You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.7 KiB
90 lines
2.7 KiB
4 years ago
|
"""Test the kernels service API."""
|
||
|
import json
|
||
|
import os
|
||
|
import shutil
|
||
|
|
||
|
from jupyterlab_server.tests.utils import LabTestBase, APITester
|
||
|
from ..servertest import assert_http_error
|
||
|
|
||
|
|
||
|
class SettingsAPI(APITester):
|
||
|
"""Wrapper for settings REST API requests"""
|
||
|
|
||
|
url = 'lab/api/settings'
|
||
|
|
||
|
def get(self, schema_name=''):
|
||
|
return self._req('GET', schema_name)
|
||
|
|
||
|
def put(self, schema_name, body):
|
||
|
return self._req('PUT', schema_name, json.dumps(body))
|
||
|
|
||
|
|
||
|
class SettingsAPITest(LabTestBase):
|
||
|
"""Test the settings web service API"""
|
||
|
|
||
|
def setUp(self):
|
||
|
# Copy the schema files.
|
||
|
src = os.path.join(
|
||
|
os.path.abspath(os.path.dirname(__file__)),
|
||
|
'schemas',
|
||
|
'@jupyterlab')
|
||
|
dst = os.path.join(self.lab_config.schemas_dir, '@jupyterlab')
|
||
|
if os.path.exists(dst):
|
||
|
shutil.rmtree(dst)
|
||
|
shutil.copytree(src, dst)
|
||
|
|
||
|
# Copy the overrides file.
|
||
|
src = os.path.join(
|
||
|
os.path.abspath(os.path.dirname(__file__)),
|
||
|
'app-settings',
|
||
|
'overrides.json')
|
||
|
dst = os.path.join(self.lab_config.app_settings_dir, 'overrides.json')
|
||
|
if os.path.exists(dst):
|
||
|
os.remove(dst)
|
||
|
shutil.copyfile(src, dst)
|
||
|
self.settings_api = SettingsAPI(self.request)
|
||
|
|
||
|
def test_get(self):
|
||
|
id = '@jupyterlab/apputils-extension:themes'
|
||
|
data = self.settings_api.get(id).json()
|
||
|
schema = data['schema']
|
||
|
|
||
|
assert data['id'] == id
|
||
|
# Check that overrides.json file is respected.
|
||
|
assert schema['properties']['theme']['default'] == 'JupyterLab Dark'
|
||
|
assert 'raw' in data
|
||
|
|
||
|
def test_get_bad(self):
|
||
|
with assert_http_error(404):
|
||
|
self.settings_api.get('foo')
|
||
|
|
||
|
def test_listing(self):
|
||
|
ids = [
|
||
|
'@jupyterlab/apputils-extension:themes',
|
||
|
'@jupyterlab/codemirror-extension:commands',
|
||
|
'@jupyterlab/shortcuts-extension:plugin'
|
||
|
]
|
||
|
versions = ['N/A', 'N/A', 'test-version']
|
||
|
|
||
|
response = self.settings_api.get('').json()
|
||
|
response_ids = [item['id'] for item in response['settings']]
|
||
|
response_versions = [item['version'] for item in response['settings']]
|
||
|
|
||
|
assert set(response_ids) == set(ids)
|
||
|
assert set(response_versions) == set(versions)
|
||
|
|
||
|
def test_patch(self):
|
||
|
id = '@jupyterlab/shortcuts-extension:plugin'
|
||
|
|
||
|
assert self.settings_api.put(id, dict()).status_code == 204
|
||
|
|
||
|
def test_patch_wrong_id(self):
|
||
|
with assert_http_error(404):
|
||
|
self.settings_api.put('foo', dict())
|
||
|
|
||
|
def test_patch_bad_data(self):
|
||
|
id = '@jupyterlab/codemirror-extension:commands'
|
||
|
|
||
|
with assert_http_error(400):
|
||
|
self.settings_api.put(id, dict(keyMap=10))
|