diff --git a/IPython/html/services/notebooks/tests/test_notebooks_api.py b/IPython/html/services/notebooks/tests/test_notebooks_api.py index bb7ef44..d1d9471 100644 --- a/IPython/html/services/notebooks/tests/test_notebooks_api.py +++ b/IPython/html/services/notebooks/tests/test_notebooks_api.py @@ -11,7 +11,7 @@ import requests from IPython.html.utils import url_path_join from IPython.html.tests.launchnotebook import NotebookTestBase -from IPython.nbformat.current import new_notebook, write +from IPython.nbformat.current import new_notebook, write, writes from IPython.utils.data import uniq_stable class NBAPI(object): @@ -38,6 +38,9 @@ class NBAPI(object): def create_untitled(self, path='/'): return self._req('POST', path) + def upload(self, name, body, path='/'): + return self._req('POST', url_path_join(path, name), body) + def delete(self, name, path='/'): return self._req('DELETE', url_path_join(path, name)) @@ -62,6 +65,7 @@ class APITest(NotebookTestBase): def setUp(self): nbdir = self.notebook_dir.name + for d in self.dirs: os.mkdir(pjoin(nbdir, d)) @@ -121,6 +125,7 @@ class APITest(NotebookTestBase): assert False, "Reading a non-existent notebook should fail" def _check_nb_created(self, resp, name, path): + self.assertEqual(resp.status_code, 201) self.assertEqual(resp.headers['Location'].split('/')[-1], name) self.assertEqual(resp.json()['name'], name) assert os.path.isfile(pjoin(self.notebook_dir.name, path, name)) @@ -137,6 +142,13 @@ class APITest(NotebookTestBase): resp = self.nb_api.create_untitled(path='foo/bar') self._check_nb_created(resp, 'Untitled0.ipynb', pjoin('foo', 'bar')) + def test_upload(self): + nb = new_notebook(name='Upload test') + resp = self.nb_api.upload('Upload test.ipynb', path='foo', + body=writes(nb, format='ipynb')) + self._check_nb_created(resp, 'Upload test.ipynb', 'foo') + + def test_delete(self): for d, name in self.dirs_nbs: resp = self.nb_api.delete('%s.ipynb' % name, d)