File: test_config_api.py

package info (click to toggle)
jupyter-notebook 6.4.13-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 13,860 kB
  • sloc: javascript: 20,765; python: 15,658; makefile: 255; sh: 160
file content (65 lines) | stat: -rw-r--r-- 2,252 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
"""Test the config webservice API."""

import json

from notebook.utils import url_path_join
from notebook.tests.launchnotebook import NotebookTestBase


class ConfigAPI:
    """Wrapper for notebook API calls."""
    def __init__(self, request):
        self.request = request

    def _req(self, verb, section, body=None):
        response = self.request(verb,
                url_path_join('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):
    """Test the config web service API"""
    def setUp(self):
        self.config_api = ConfigAPI(self.request)

    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):
        sample = {'foo': 'bar', 'baz': 73,
                  'sub': {'a': 6, 'b': 7}, 'sub2': {'c': 8}}
        self.config_api.set('example', sample)

        r = self.config_api.modify('example', {'foo': None,  # should delete foo
                                               'baz': 75,
                                               'wib': [1,2,3],
                                               'sub': {'a': 8, 'b': None, 'd': 9},
                                               'sub2': {'c': None}  # should delete sub2
                                              })
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.json(), {'baz': 75, 'wib': [1,2,3],
                                    'sub': {'a': 8, 'd': 9}})

    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(), {})