Show More
@@ -13,7 +13,7 pjoin = os.path.join | |||
|
13 | 13 | import requests |
|
14 | 14 | |
|
15 | 15 | from IPython.html.utils import url_path_join |
|
16 | from IPython.html.tests.launchnotebook import NotebookTestBase | |
|
16 | from IPython.html.tests.launchnotebook import NotebookTestBase, assert_http_error | |
|
17 | 17 | from IPython.nbformat.current import (new_notebook, write, read, new_worksheet, |
|
18 | 18 | new_heading_cell, to_notebook_json) |
|
19 | 19 | from IPython.utils.data import uniq_stable |
@@ -119,13 +119,9 class APITest(NotebookTestBase): | |||
|
119 | 119 | expected = { normalize('NFC', name) for name in expected } |
|
120 | 120 | self.assertEqual(nbnames, expected) |
|
121 | 121 | |
|
122 | def assert_404(self, name, path): | |
|
123 | try: | |
|
124 |
self.nb_api. |
|
|
125 | except requests.HTTPError as e: | |
|
126 | self.assertEqual(e.response.status_code, 404) | |
|
127 | else: | |
|
128 | assert False, "Reading a non-existent notebook should fail" | |
|
122 | def test_list_nonexistant_dir(self): | |
|
123 | with assert_http_error(404): | |
|
124 | self.nb_api.list('nonexistant') | |
|
129 | 125 | |
|
130 | 126 | def test_get_contents(self): |
|
131 | 127 | for d, name in self.dirs_nbs: |
@@ -136,7 +132,8 class APITest(NotebookTestBase): | |||
|
136 | 132 | self.assertIsInstance(nb['content']['metadata'], dict) |
|
137 | 133 | |
|
138 | 134 | # Name that doesn't exist - should be a 404 |
|
139 | self.assert_404('q.ipynb', 'foo') | |
|
135 | with assert_http_error(404): | |
|
136 | self.nb_api.read('q.ipynb', 'foo') | |
|
140 | 137 | |
|
141 | 138 | def _check_nb_created(self, resp, name, path): |
|
142 | 139 | self.assertEqual(resp.status_code, 201) |
@@ -212,4 +209,5 class APITest(NotebookTestBase): | |||
|
212 | 209 | self.assertEqual(saved['path'], 'foo/bar') |
|
213 | 210 | assert os.path.isfile(pjoin(self.notebook_dir.name,'foo','bar','a2.ipynb')) |
|
214 | 211 | assert not os.path.isfile(pjoin(self.notebook_dir.name, 'foo', 'a.ipynb')) |
|
215 | self.assert_404('a.ipynb', 'foo') No newline at end of file | |
|
212 | with assert_http_error(404): | |
|
213 | self.nb_api.read('a.ipynb', 'foo') No newline at end of file |
@@ -9,7 +9,7 import shutil | |||
|
9 | 9 | pjoin = os.path.join |
|
10 | 10 | |
|
11 | 11 | from IPython.html.utils import url_path_join |
|
12 | from IPython.html.tests.launchnotebook import NotebookTestBase | |
|
12 | from IPython.html.tests.launchnotebook import NotebookTestBase, assert_http_error | |
|
13 | 13 | from IPython.nbformat.current import new_notebook, write |
|
14 | 14 | |
|
15 | 15 | class SessionAPI(object): |
@@ -64,14 +64,6 class SessionAPITest(NotebookTestBase): | |||
|
64 | 64 | self.sess_api.delete(session['id']) |
|
65 | 65 | shutil.rmtree(pjoin(self.notebook_dir.name, 'foo')) |
|
66 | 66 | |
|
67 | def assert_404(self, id): | |
|
68 | try: | |
|
69 | self.sess_api.get(id) | |
|
70 | except requests.HTTPError as e: | |
|
71 | self.assertEqual(e.response.status_code, 404) | |
|
72 | else: | |
|
73 | assert False, "Getting nonexistent session didn't give HTTP error" | |
|
74 | ||
|
75 | 67 | def test_create(self): |
|
76 | 68 | sessions = self.sess_api.list().json() |
|
77 | 69 | self.assertEqual(len(sessions), 0) |
@@ -101,7 +93,8 class SessionAPITest(NotebookTestBase): | |||
|
101 | 93 | sessions = self.sess_api.list().json() |
|
102 | 94 | self.assertEqual(sessions, []) |
|
103 | 95 | |
|
104 | self.assert_404(sid) | |
|
96 | with assert_http_error(404): | |
|
97 | self.sess_api.get(sid) | |
|
105 | 98 | |
|
106 | 99 | def test_modify(self): |
|
107 | 100 | newsession = self.sess_api.create('nb1.ipynb', 'foo').json() |
@@ -3,12 +3,12 | |||
|
3 | 3 | import sys |
|
4 | 4 | import time |
|
5 | 5 | import requests |
|
6 | from contextlib import contextmanager | |
|
6 | 7 | from subprocess import Popen, PIPE |
|
7 | 8 | from unittest import TestCase |
|
8 | 9 | |
|
9 | 10 | from IPython.utils.tempdir import TemporaryDirectory |
|
10 | 11 | |
|
11 | ||
|
12 | 12 | class NotebookTestBase(TestCase): |
|
13 | 13 | """A base class for tests that need a running notebook. |
|
14 | 14 | |
@@ -67,3 +67,15 class NotebookTestBase(TestCase): | |||
|
67 | 67 | @classmethod |
|
68 | 68 | def base_url(cls): |
|
69 | 69 | return 'http://localhost:%i/' % cls.port |
|
70 | ||
|
71 | ||
|
72 | @contextmanager | |
|
73 | def assert_http_error(status): | |
|
74 | try: | |
|
75 | yield | |
|
76 | except requests.HTTPError as e: | |
|
77 | real_status = e.response.status_code | |
|
78 | assert real_status == status, \ | |
|
79 | "Expected status %d, got %d" % (real_status, status) | |
|
80 | else: | |
|
81 | assert False, "Expected HTTP error status" No newline at end of file |
General Comments 0
You need to be logged in to leave comments.
Login now