diff --git a/IPython/html/services/contents/tests/test_contents_api.py b/IPython/html/services/contents/tests/test_contents_api.py index b37e51d..12a92fe 100644 --- a/IPython/html/services/contents/tests/test_contents_api.py +++ b/IPython/html/services/contents/tests/test_contents_api.py @@ -2,6 +2,7 @@ """Test the contents webservice API.""" import base64 +from contextlib import contextmanager import io import json import os @@ -21,6 +22,7 @@ from IPython.nbformat.v4 import ( from IPython.nbformat import v2 from IPython.utils import py3compat from IPython.utils.data import uniq_stable +from IPython.utils.tempdir import TemporaryDirectory def notebooks_only(dir_model): @@ -502,7 +504,6 @@ class APITest(NotebookTestBase): self.assertEqual(newnb.cells[0].source, u'Created by test ³') - def test_checkpoints(self): resp = self.api.read('foo/a.ipynb') r = self.api.new_checkpoint('foo/a.ipynb') @@ -540,3 +541,28 @@ class APITest(NotebookTestBase): self.assertEqual(r.status_code, 204) cps = self.api.get_checkpoints('foo/a.ipynb').json() self.assertEqual(cps, []) + + @contextmanager + def patch_cp_root(self, dirname): + """ + Temporarily patch the root dir of our checkpoint manager. + """ + cpm = self.notebook.contents_manager.checkpoint_manager + old_dirname = cpm.root_dir + cpm.root_dir = dirname + try: + yield + finally: + cpm.root_dir = old_dirname + + def test_checkpoints_separate_root(self): + """ + Test that FileCheckpointManager functions correctly even when it's + using a different root dir from FileContentsManager. This also keeps + the implementation honest for use with ContentsManagers that don't map + models to the filesystem + """ + + with TemporaryDirectory() as td: + with self.patch_cp_root(td): + self.test_checkpoints()