test_config_api.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # coding: utf-8
  2. """Test the config webservice API."""
  3. import json
  4. import requests
  5. from notebook.utils import url_path_join
  6. from notebook.tests.launchnotebook import NotebookTestBase
  7. class ConfigAPI(object):
  8. """Wrapper for notebook API calls."""
  9. def __init__(self, request):
  10. self.request = request
  11. def _req(self, verb, section, body=None):
  12. response = self.request(verb,
  13. url_path_join('api/config', section),
  14. data=body,
  15. )
  16. response.raise_for_status()
  17. return response
  18. def get(self, section):
  19. return self._req('GET', section)
  20. def set(self, section, values):
  21. return self._req('PUT', section, json.dumps(values))
  22. def modify(self, section, values):
  23. return self._req('PATCH', section, json.dumps(values))
  24. class APITest(NotebookTestBase):
  25. """Test the config web service API"""
  26. def setUp(self):
  27. self.config_api = ConfigAPI(self.request)
  28. def test_create_retrieve_config(self):
  29. sample = {'foo': 'bar', 'baz': 73}
  30. r = self.config_api.set('example', sample)
  31. self.assertEqual(r.status_code, 204)
  32. r = self.config_api.get('example')
  33. self.assertEqual(r.status_code, 200)
  34. self.assertEqual(r.json(), sample)
  35. def test_modify(self):
  36. sample = {'foo': 'bar', 'baz': 73,
  37. 'sub': {'a': 6, 'b': 7}, 'sub2': {'c': 8}}
  38. self.config_api.set('example', sample)
  39. r = self.config_api.modify('example', {'foo': None, # should delete foo
  40. 'baz': 75,
  41. 'wib': [1,2,3],
  42. 'sub': {'a': 8, 'b': None, 'd': 9},
  43. 'sub2': {'c': None} # should delete sub2
  44. })
  45. self.assertEqual(r.status_code, 200)
  46. self.assertEqual(r.json(), {'baz': 75, 'wib': [1,2,3],
  47. 'sub': {'a': 8, 'd': 9}})
  48. def test_get_unknown(self):
  49. # We should get an empty config dictionary instead of a 404
  50. r = self.config_api.get('nonexistant')
  51. self.assertEqual(r.status_code, 200)
  52. self.assertEqual(r.json(), {})