123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- from unittest import TestCase
- from ipython_genutils.tempdir import TemporaryDirectory
- from ..largefilemanager import LargeFileManager
- import os
- from tornado import web
- def _make_dir(contents_manager, api_path):
- """
- Make a directory.
- """
- os_path = contents_manager._get_os_path(api_path)
- try:
- os.makedirs(os_path)
- except OSError:
- print("Directory already exists: %r" % os_path)
- class TestLargeFileManager(TestCase):
- def setUp(self):
- self._temp_dir = TemporaryDirectory()
- self.td = self._temp_dir.name
- self.contents_manager = LargeFileManager(root_dir=self.td)
- def make_dir(self, api_path):
- """make a subdirectory at api_path
- override in subclasses if contents are not on the filesystem.
- """
- _make_dir(self.contents_manager, api_path)
- def test_save(self):
- cm = self.contents_manager
- # Create a notebook
- model = cm.new_untitled(type='notebook')
- name = model['name']
- path = model['path']
- # Get the model with 'content'
- full_model = cm.get(path)
- # Save the notebook
- model = cm.save(full_model, path)
- assert isinstance(model, dict)
- self.assertIn('name', model)
- self.assertIn('path', model)
- self.assertEqual(model['name'], name)
- self.assertEqual(model['path'], path)
- try:
- model = {'name': 'test', 'path': 'test', 'chunk': 1}
- cm.save(model, model['path'])
- except web.HTTPError as e:
- self.assertEqual('HTTP 400: Bad Request (No file type provided)', str(e))
- try:
- model = {'name': 'test', 'path': 'test', 'chunk': 1, 'type': 'notebook'}
- cm.save(model, model['path'])
- except web.HTTPError as e:
- self.assertEqual('HTTP 400: Bad Request (File type "notebook" is not supported for large file transfer)', str(e))
- try:
- model = {'name': 'test', 'path': 'test', 'chunk': 1, 'type': 'file'}
- cm.save(model, model['path'])
- except web.HTTPError as e:
- self.assertEqual('HTTP 400: Bad Request (No file content provided)', str(e))
- try:
- model = {'name': 'test', 'path': 'test', 'chunk': 2, 'type': 'file',
- 'content': u'test', 'format': 'json'}
- cm.save(model, model['path'])
- except web.HTTPError as e:
- self.assertEqual("HTTP 400: Bad Request (Must specify format of file contents as 'text' or 'base64')",
- str(e))
- # Save model for different chunks
- model = {'name': 'test', 'path': 'test', 'type': 'file',
- 'content': u'test==', 'format': 'text'}
- name = model['name']
- path = model['path']
- cm.save(model, path)
- for chunk in (1, 2, -1):
- for fm in ('text', 'base64'):
- full_model = cm.get(path)
- full_model['chunk'] = chunk
- full_model['format'] = fm
- model_res = cm.save(full_model, path)
- assert isinstance(model_res, dict)
- self.assertIn('name', model_res)
- self.assertIn('path', model_res)
- self.assertNotIn('chunk', model_res)
- self.assertEqual(model_res['name'], name)
- self.assertEqual(model_res['path'], path)
- # Test in sub-directory
- # Create a directory and notebook in that directory
- sub_dir = '/foo/'
- self.make_dir('foo')
- model = cm.new_untitled(path=sub_dir, type='notebook')
- name = model['name']
- path = model['path']
- model = cm.get(path)
- # Change the name in the model for rename
- model = cm.save(model, path)
- assert isinstance(model, dict)
- self.assertIn('name', model)
- self.assertIn('path', model)
- self.assertEqual(model['name'], 'Untitled.ipynb')
- self.assertEqual(model['path'], 'foo/Untitled.ipynb')
|