test_config_api.py
68 lines
| 2.3 KiB
| text/x-python
|
PythonLexer
Thomas Kluyver
|
r18703 | # coding: utf-8 | ||
Thomas Kluyver
|
r18705 | """Test the config webservice API.""" | ||
Thomas Kluyver
|
r18703 | |||
import json | ||||
import requests | ||||
from IPython.html.utils import url_path_join | ||||
from IPython.html.tests.launchnotebook import NotebookTestBase | ||||
class ConfigAPI(object): | ||||
"""Wrapper for notebook API calls.""" | ||||
def __init__(self, base_url): | ||||
self.base_url = base_url | ||||
def _req(self, verb, section, body=None): | ||||
response = requests.request(verb, | ||||
url_path_join(self.base_url, 'api/config', section), | ||||
data=body, | ||||
) | ||||
response.raise_for_status() | ||||
return response | ||||
def get(self, section): | ||||
return self._req('GET', section) | ||||
def set(self, section, values): | ||||
return self._req('PUT', section, json.dumps(values)) | ||||
def modify(self, section, values): | ||||
return self._req('PATCH', section, json.dumps(values)) | ||||
class APITest(NotebookTestBase): | ||||
Thomas Kluyver
|
r18705 | """Test the config web service API""" | ||
Thomas Kluyver
|
r18703 | def setUp(self): | ||
self.config_api = ConfigAPI(self.base_url()) | ||||
def test_create_retrieve_config(self): | ||||
sample = {'foo': 'bar', 'baz': 73} | ||||
r = self.config_api.set('example', sample) | ||||
self.assertEqual(r.status_code, 204) | ||||
r = self.config_api.get('example') | ||||
self.assertEqual(r.status_code, 200) | ||||
self.assertEqual(r.json(), sample) | ||||
def test_modify(self): | ||||
Thomas Kluyver
|
r18705 | sample = {'foo': 'bar', 'baz': 73, | ||
'sub': {'a': 6, 'b': 7}, 'sub2': {'c': 8}} | ||||
Thomas Kluyver
|
r18703 | self.config_api.set('example', sample) | ||
r = self.config_api.modify('example', {'foo': None, # should delete foo | ||||
'baz': 75, | ||||
'wib': [1,2,3], | ||||
Thomas Kluyver
|
r18705 | 'sub': {'a': 8, 'b': None, 'd': 9}, | ||
'sub2': {'c': None} # should delete sub2 | ||||
Thomas Kluyver
|
r18703 | }) | ||
self.assertEqual(r.status_code, 200) | ||||
Thomas Kluyver
|
r18705 | self.assertEqual(r.json(), {'baz': 75, 'wib': [1,2,3], | ||
'sub': {'a': 8, 'd': 9}}) | ||||
Thomas Kluyver
|
r18703 | |||
def test_get_unknown(self): | ||||
# We should get an empty config dictionary instead of a 404 | ||||
r = self.config_api.get('nonexistant') | ||||
self.assertEqual(r.status_code, 200) | ||||
self.assertEqual(r.json(), {}) | ||||