##// END OF EJS Templates
Update COPYING.txt...
Update COPYING.txt Don't exclude other projects Added new line Don't specify that the comment token in Javascript is different from Python. Fix line break Update 3-clause line

File last commit:

r15656:3c4decbd
r15988:4265cfef
Show More
test_nbmanager.py
306 lines | 10.6 KiB | text/x-python | PythonLexer
MinRK
test nbmanager.copy_notebook
r13136 # coding: utf-8
MinRK
add tests for notebook_dir validation
r7637 """Tests for the notebook manager."""
Thomas Kluyver
Convert print statements to print function calls...
r13348 from __future__ import print_function
MinRK
add tests for notebook_dir validation
r7637
MinRK
Add Trust Notebook to File menu
r15655 import logging
MinRK
add tests for notebook_dir validation
r7637 import os
Zachary Sailer
refactoring of nbmanager and filenbmanager...
r13046
from tornado.web import HTTPError
MinRK
add tests for notebook_dir validation
r7637 from unittest import TestCase
from tempfile import NamedTemporaryFile
MinRK
Add Trust Notebook to File menu
r15655 from IPython.nbformat import current
MinRK
add tests for notebook_dir validation
r7637 from IPython.utils.tempdir import TemporaryDirectory
from IPython.utils.traitlets import TraitError
Zachary Sailer
refactoring of nbmanager and filenbmanager...
r13046 from IPython.html.utils import url_path_join
MinRK
add tests for notebook_dir validation
r7637
Brian E. Granger
Fixing minor import error.
r10661 from ..filenbmanager import FileNotebookManager
Paul Ivanov
adding tests for named_notebook_path...
r13025 from ..nbmanager import NotebookManager
MinRK
add tests for notebook_dir validation
r7637
Brian E. Granger
Get the existing tests working.
r15079
Paul Ivanov
adding tests for named_notebook_path...
r13025 class TestFileNotebookManager(TestCase):
MinRK
add tests for notebook_dir validation
r7637
def test_nb_dir(self):
with TemporaryDirectory() as td:
Paul Ivanov
clean up of get_os_path and its tests...
r13034 fm = FileNotebookManager(notebook_dir=td)
self.assertEqual(fm.notebook_dir, td)
MinRK
add tests for notebook_dir validation
r7637
def test_missing_nb_dir(self):
with TemporaryDirectory() as td:
nbdir = os.path.join(td, 'notebook', 'dir', 'is', 'missing')
Brian Granger
Refactoring notebook managers and adding Azure backed storage....
r8180 self.assertRaises(TraitError, FileNotebookManager, notebook_dir=nbdir)
MinRK
add tests for notebook_dir validation
r7637
def test_invalid_nb_dir(self):
with NamedTemporaryFile() as tf:
Brian Granger
Refactoring notebook managers and adding Azure backed storage....
r8180 self.assertRaises(TraitError, FileNotebookManager, notebook_dir=tf.name)
MinRK
add tests for notebook_dir validation
r7637
Zachary Sailer
handle path separators with os.sep and add tests...
r13032 def test_get_os_path(self):
# full filesystem path should be returned with correct operating system
# separators.
with TemporaryDirectory() as td:
MinRK
reorganize who knows what about paths...
r15420 nbdir = td
Paul Ivanov
clean up of get_os_path and its tests...
r13034 fm = FileNotebookManager(notebook_dir=nbdir)
MinRK
reorganize who knows what about paths...
r15420 path = fm._get_os_path('test.ipynb', '/path/to/notebook/')
Paul Ivanov
clean up of get_os_path and its tests...
r13034 rel_path_list = '/path/to/notebook/test.ipynb'.split('/')
fs_path = os.path.join(fm.notebook_dir, *rel_path_list)
self.assertEqual(path, fs_path)
fm = FileNotebookManager(notebook_dir=nbdir)
MinRK
reorganize who knows what about paths...
r15420 path = fm._get_os_path('test.ipynb')
Paul Ivanov
clean up of get_os_path and its tests...
r13034 fs_path = os.path.join(fm.notebook_dir, 'test.ipynb')
self.assertEqual(path, fs_path)
fm = FileNotebookManager(notebook_dir=nbdir)
MinRK
reorganize who knows what about paths...
r15420 path = fm._get_os_path('test.ipynb', '////')
Paul Ivanov
clean up of get_os_path and its tests...
r13034 fs_path = os.path.join(fm.notebook_dir, 'test.ipynb')
self.assertEqual(path, fs_path)
Zachary Sailer
handle path separators with os.sep and add tests...
r13032
Paul Ivanov
adding tests for named_notebook_path...
r13025 class TestNotebookManager(TestCase):
Zachary Sailer
refactoring of nbmanager and filenbmanager...
r13046
MinRK
Add Trust Notebook to File menu
r15655 def setUp(self):
self._temp_dir = TemporaryDirectory()
self.td = self._temp_dir.name
MinRK
cleanup test_nbmanager...
r15656 self.notebook_manager = FileNotebookManager(
notebook_dir=self.td,
log=logging.getLogger()
)
MinRK
Add Trust Notebook to File menu
r15655
def tearDown(self):
self._temp_dir.cleanup()
Zachary Sailer
refactoring of nbmanager and filenbmanager...
r13046 def make_dir(self, abs_path, rel_path):
"""make subdirectory, rel_path is the relative path
to that directory from the location where the server started"""
os_path = os.path.join(abs_path, rel_path)
try:
os.makedirs(os_path)
except OSError:
Brian E. Granger
Adding dashboard navigation tests for dir browsing.
r15080 print("Directory already exists: %r" % os_path)
MinRK
Add Trust Notebook to File menu
r15655
def add_code_cell(self, nb):
output = current.new_output("display_data", output_javascript="alert('hi');")
cell = current.new_code_cell("print('hi')", outputs=[output])
if not nb.worksheets:
nb.worksheets.append(current.new_worksheet())
nb.worksheets[0].cells.append(cell)
def new_notebook(self):
MinRK
cleanup test_nbmanager...
r15656 nbm = self.notebook_manager
MinRK
Add Trust Notebook to File menu
r15655 model = nbm.create_notebook()
name = model['name']
path = model['path']
full_model = nbm.get_notebook(name, path)
nb = full_model['content']
self.add_code_cell(nb)
nbm.save_notebook(full_model, name, path)
return nb, name, path
Konrad Hinsen
NotebookManager API: rename *notebook_model methods to *notebook
r15290 def test_create_notebook(self):
MinRK
cleanup test_nbmanager...
r15656 nm = self.notebook_manager
# Test in root directory
model = nm.create_notebook()
assert isinstance(model, dict)
self.assertIn('name', model)
self.assertIn('path', model)
self.assertEqual(model['name'], 'Untitled0.ipynb')
self.assertEqual(model['path'], '')
# Test in sub-directory
sub_dir = '/foo/'
self.make_dir(nm.notebook_dir, 'foo')
model = nm.create_notebook(None, sub_dir)
assert isinstance(model, dict)
self.assertIn('name', model)
self.assertIn('path', model)
self.assertEqual(model['name'], 'Untitled0.ipynb')
self.assertEqual(model['path'], sub_dir.strip('/'))
Zachary Sailer
refactoring of nbmanager and filenbmanager...
r13046
Konrad Hinsen
NotebookManager API: rename *notebook_model methods to *notebook
r15290 def test_get_notebook(self):
MinRK
cleanup test_nbmanager...
r15656 nm = self.notebook_manager
# Create a notebook
model = nm.create_notebook()
name = model['name']
path = model['path']
# Check that we 'get' on the notebook we just created
model2 = nm.get_notebook(name, path)
assert isinstance(model2, dict)
self.assertIn('name', model2)
self.assertIn('path', model2)
self.assertEqual(model['name'], name)
self.assertEqual(model['path'], path)
# Test in sub-directory
sub_dir = '/foo/'
self.make_dir(nm.notebook_dir, 'foo')
model = nm.create_notebook(None, sub_dir)
model2 = nm.get_notebook(name, sub_dir)
assert isinstance(model2, dict)
self.assertIn('name', model2)
self.assertIn('path', model2)
self.assertIn('content', model2)
self.assertEqual(model2['name'], 'Untitled0.ipynb')
self.assertEqual(model2['path'], sub_dir.strip('/'))
Zachary Sailer
refactoring of nbmanager and filenbmanager...
r13046
Konrad Hinsen
NotebookManager API: rename *notebook_model methods to *notebook
r15290 def test_update_notebook(self):
MinRK
cleanup test_nbmanager...
r15656 nm = self.notebook_manager
# Create a notebook
model = nm.create_notebook()
name = model['name']
path = model['path']
# Change the name in the model for rename
model['name'] = 'test.ipynb'
model = nm.update_notebook(model, name, path)
assert isinstance(model, dict)
self.assertIn('name', model)
self.assertIn('path', model)
self.assertEqual(model['name'], 'test.ipynb')
# Make sure the old name is gone
self.assertRaises(HTTPError, nm.get_notebook, name, path)
# Test in sub-directory
# Create a directory and notebook in that directory
sub_dir = '/foo/'
self.make_dir(nm.notebook_dir, 'foo')
model = nm.create_notebook(None, sub_dir)
name = model['name']
path = model['path']
# Change the name in the model for rename
model['name'] = 'test_in_sub.ipynb'
model = nm.update_notebook(model, name, path)
assert isinstance(model, dict)
self.assertIn('name', model)
self.assertIn('path', model)
self.assertEqual(model['name'], 'test_in_sub.ipynb')
self.assertEqual(model['path'], sub_dir.strip('/'))
# Make sure the old name is gone
self.assertRaises(HTTPError, nm.get_notebook, name, path)
Zachary Sailer
refactoring of nbmanager and filenbmanager...
r13046
Konrad Hinsen
NotebookManager API: rename *notebook_model methods to *notebook
r15290 def test_save_notebook(self):
MinRK
cleanup test_nbmanager...
r15656 nm = self.notebook_manager
# Create a notebook
model = nm.create_notebook()
name = model['name']
path = model['path']
# Get the model with 'content'
full_model = nm.get_notebook(name, path)
# Save the notebook
model = nm.save_notebook(full_model, name, path)
assert isinstance(model, dict)
self.assertIn('name', model)
self.assertIn('path', model)
self.assertEqual(model['name'], name)
self.assertEqual(model['path'], path)
# Test in sub-directory
# Create a directory and notebook in that directory
sub_dir = '/foo/'
self.make_dir(nm.notebook_dir, 'foo')
model = nm.create_notebook(None, sub_dir)
name = model['name']
path = model['path']
model = nm.get_notebook(name, path)
# Change the name in the model for rename
model = nm.save_notebook(model, name, path)
assert isinstance(model, dict)
self.assertIn('name', model)
self.assertIn('path', model)
self.assertEqual(model['name'], 'Untitled0.ipynb')
self.assertEqual(model['path'], sub_dir.strip('/'))
Zachary Sailer
refactoring of nbmanager and filenbmanager...
r13046
Thomas Kluyver
Add test for saving notebook with .py script
r13514 def test_save_notebook_with_script(self):
MinRK
cleanup test_nbmanager...
r15656 nm = self.notebook_manager
# Create a notebook
model = nm.create_notebook()
nm.save_script = True
model = nm.create_notebook()
name = model['name']
path = model['path']
Thomas Kluyver
Add test for saving notebook with .py script
r13514
MinRK
cleanup test_nbmanager...
r15656 # Get the model with 'content'
full_model = nm.get_notebook(name, path)
Thomas Kluyver
Add test for saving notebook with .py script
r13514
MinRK
cleanup test_nbmanager...
r15656 # Save the notebook
model = nm.save_notebook(full_model, name, path)
Thomas Kluyver
Add test for saving notebook with .py script
r13514
MinRK
cleanup test_nbmanager...
r15656 # Check that the script was created
py_path = os.path.join(nm.notebook_dir, os.path.splitext(name)[0]+'.py')
assert os.path.exists(py_path), py_path
Thomas Kluyver
Add test for saving notebook with .py script
r13514
Konrad Hinsen
NotebookManager API: rename *notebook_model methods to *notebook
r15290 def test_delete_notebook(self):
MinRK
cleanup test_nbmanager...
r15656 nm = self.notebook_manager
# Create a notebook
nb, name, path = self.new_notebook()
# Delete the notebook
nm.delete_notebook(name, path)
# Check that a 'get' on the deleted notebook raises and error
self.assertRaises(HTTPError, nm.get_notebook, name, path)
MinRK
test nbmanager.copy_notebook
r13136
def test_copy_notebook(self):
MinRK
cleanup test_nbmanager...
r15656 nm = self.notebook_manager
path = u'Ã¥ b'
name = u'nb √.ipynb'
os.mkdir(os.path.join(nm.notebook_dir, path))
orig = nm.create_notebook({'name' : name}, path=path)
# copy with unspecified name
copy = nm.copy_notebook(name, path=path)
self.assertEqual(copy['name'], orig['name'].replace('.ipynb', '-Copy0.ipynb'))
# copy with specified name
copy2 = nm.copy_notebook(name, u'copy 2.ipynb', path=path)
self.assertEqual(copy2['name'], u'copy 2.ipynb')
MinRK
test nbmanager.copy_notebook
r13136
MinRK
Add Trust Notebook to File menu
r15655 def test_trust_notebook(self):
MinRK
cleanup test_nbmanager...
r15656 nbm = self.notebook_manager
MinRK
Add Trust Notebook to File menu
r15655 nb, name, path = self.new_notebook()
untrusted = nbm.get_notebook(name, path)['content']
MinRK
cleanup test_nbmanager...
r15656 assert not nbm.notary.check_cells(untrusted)
MinRK
Add Trust Notebook to File menu
r15655
MinRK
cleanup test_nbmanager...
r15656 # print(untrusted)
MinRK
Add Trust Notebook to File menu
r15655 nbm.trust_notebook(name, path)
trusted = nbm.get_notebook(name, path)['content']
MinRK
cleanup test_nbmanager...
r15656 # print(trusted)
assert nbm.notary.check_cells(trusted)
MinRK
Add Trust Notebook to File menu
r15655
def test_mark_trusted_cells(self):
MinRK
cleanup test_nbmanager...
r15656 nbm = self.notebook_manager
MinRK
Add Trust Notebook to File menu
r15655 nb, name, path = self.new_notebook()
nbm.mark_trusted_cells(nb, name, path)
for cell in nb.worksheets[0].cells:
if cell.cell_type == 'code':
assert not cell.trusted
nbm.trust_notebook(name, path)
nb = nbm.get_notebook(name, path)['content']
for cell in nb.worksheets[0].cells:
if cell.cell_type == 'code':
assert cell.trusted
def test_check_and_sign(self):
MinRK
cleanup test_nbmanager...
r15656 nbm = self.notebook_manager
MinRK
Add Trust Notebook to File menu
r15655 nb, name, path = self.new_notebook()
nbm.mark_trusted_cells(nb, name, path)
nbm.check_and_sign(nb, name, path)
assert not nbm.notary.check_signature(nb)
nbm.trust_notebook(name, path)
nb = nbm.get_notebook(name, path)['content']
nbm.mark_trusted_cells(nb, name, path)
nbm.check_and_sign(nb, name, path)
assert nbm.notary.check_signature(nb)