コード例 #1
0
ファイル: tests.py プロジェクト: Quantra/python-boxview
 def setUp(self):
     self.api = BoxView('<box view api key>')
コード例 #2
0
ファイル: tests.py プロジェクト: suriya/python-boxview
 def setUp(self):
     self.api = BoxView('<box view api key>')
コード例 #3
0
ファイル: tests.py プロジェクト: Quantra/python-boxview
class BoxViewTestCase(unittest.TestCase):

    def setUp(self):
        self.api = BoxView('<box view api key>')

    def test_initials(self):
        # api key is required
        self.assertRaises(ValueError, BoxView)

        now = datetime.datetime.utcnow().replace(microsecond=0)
        dtfiso = now.isoformat()
        dfiso = now.date().isoformat()

        self.assertEqual(dtfiso, format_date(dtfiso))
        self.assertEqual(dtfiso, format_date(now))
        self.assertEqual(dfiso, format_date(now.date()))

        headers = {'Content-Type': 'text/plain'}
        self.assertEqual('text/plain', get_mimetype_from_headers(headers))
        headers = {'Content-Type': 'text/plain; charset=utf-8'}
        self.assertEqual('text/plain', get_mimetype_from_headers(headers))

    @patch.object(Session, 'request')
    def test_crate_document_from_url(self, mock_request):
        response = Response()
        response.status_code = 201
        response._content = json.dumps(test_document)
        mock_request.return_value = response

        result = self.api.create_document(url=test_url,
                                          name='Test Document',
                                          thumbnails='100x100,200x200',
                                          non_svg=False)
        self.assertIsNotNone(result)
        self.assertEqual(result, test_document)

        data = {
            'url': test_url,
            'name': 'Test Document',
            'thumbnails': '100x100,200x200',
        }
        headers = {'Content-Type': 'application/json'}
        url = urljoin(API_URL, 'documents')
        mock_request.assert_called_with('POST', url,
                                        data=json.dumps(data),
                                        headers=headers)

        # url of file param is required
        self.assertRaises(ValueError, self.api.create_document)

    @patch.object(Session, 'request')
    def test_create_document_from_file(self, mock_request):
        response = Response()
        response.status_code = 201
        response._content = json.dumps(test_document)
        mock_request.return_value = response

        stream = six.BytesIO()
        result = self.api.create_document_from_file(stream,
                                                    name='Test Document')
        self.assertEqual(result, test_document)

        result = self.api.create_document_from_file(__file__,
                                                    name='Test Document')
        self.assertEqual(result, test_document)

    @patch.object(Session, 'request')
    def test_get_document(self, mock_request):
        response = Response()
        response.status_code = 200
        response._content = json.dumps(test_document)
        mock_request.return_value = response

        result = self.api.get_document(test_document['id'])
        self.assertIsNotNone(result)
        self.assertEqual(result, test_document)

    @patch.object(Session, 'request')
    def test_get_documents(self, mock_request):
        response = Response()
        response.status_code = 200
        response._content = json.dumps(test_document_list)
        mock_request.return_value = response

        now = datetime.datetime.utcnow()
        result = self.api.get_documents(limit=10, created_before=now)
        self.assertIsNotNone(result)
        self.assertEqual(result, test_document_list)

    @patch.object(Session, 'request')
    def test_update_document(self, mock_request):
        response = Response()
        response.status_code = 200
        response._content = json.dumps(test_document)
        mock_request.return_value = response

        result = self.api.update_document(test_document['id'],
                                          name='TestDocument')
        self.assertIsNotNone(result)
        self.assertEqual(result, test_document)

    @patch.object(Session, 'request')
    def test_delete_document(self, mock_request):
        response = Response()
        response.status_code = 204
        mock_request.return_value = response

        self.api.delete_document(test_document['id'])

    @patch.object(Session, 'request')
    def test_get_document_content(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'text/plain'
        response._content = 'test'
        response.raw = six.BytesIO('test')
        mock_request.return_value = response

        stream = six.BytesIO()
        mimetype = self.api.get_document_content(stream, test_document['id'])
        self.assertEqual(stream.getvalue(), response._content)
        self.assertEqual(mimetype, response.headers['Content-Type'])

        stream = six.BytesIO()
        self.api.get_document_content(stream,
                                      test_document['id'],
                                      extension='.pdf')
        self.assertEqual(stream.getvalue(), response._content)

        stream = six.BytesIO()
        self.api.get_document_content(stream,
                                      test_document['id'],
                                      extension='.zip')
        self.assertEqual(stream.getvalue(), response._content)

        stream = six.BytesIO()
        # allowed only .zip and .pdf extensions
        self.assertRaises(ValueError,
                          self.api.get_document_content,
                          stream,
                          test_document['id'],
                          extension='.docx')

    @patch.object(Session, 'request')
    def test_get_document_content_to_string(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'text/plain'
        response._content = 'test'
        response.raw = six.BytesIO('test')
        mock_request.return_value = response

        doc_id = test_document['id']
        result, mimetype = self.api.get_document_content_to_string(doc_id)
        self.assertIsNotNone(result)
        self.assertEqual(result, response._content)
        self.assertEqual(mimetype, response.headers['Content-Type'])

    @patch.object(Session, 'request')
    def test_get_document_content_to_file(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'text/plain'
        response._content = 'test'
        response.raw = six.BytesIO('test')
        mock_request.return_value = response

        filename = 'boxview.txt'
        mimetype = self.api.get_document_content_to_file(filename,
                                                         test_document['id'])
        self.assertEqual(mimetype, response.headers['Content-Type'])
        self.assertTrue(os.path.exists(filename))
        try:
            os.remove(filename)
        except OSError:
            pass

    @patch.object(Session, 'request')
    def test_get_document_content_mimetype(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'text/plain'
        mock_request.return_value = response

        mimetype = self.api.get_document_content_mimetype(test_document['id'])
        self.assertEqual(mimetype, response.headers['Content-Type'])

    @patch.object(Session, 'request')
    def test_create_session(self, mock_request):
        response = Response()
        response.status_code = 201
        response._content = json.dumps(test_session)
        mock_request.return_value = response

        expires_at = datetime.datetime.utcnow()
        doc_id = test_document['id']
        result = self.api.create_session(doc_id,
                                         duration=600,
                                         expires_at=expires_at,
                                         is_downloadable=True,
                                         is_text_selectable=True)
        self.assertIsNotNone(result)
        self.assertEqual(result['id'], test_session['id'])

        data = {
            'document_id': doc_id,
            'duration': 600,
            'expires_at': expires_at.replace(microsecond=0).isoformat(),
            'is_downloadable': True,
            'is_text_selectable': True
        }
        headers = {'Content-Type': 'application/json'}
        url = urljoin(API_URL, 'sessions')
        mock_request.assert_called_with('POST', url,
                                        data=json.dumps(data),
                                        headers=headers)

    @patch.object(Session, 'request')
    def test_ready_to_view(self, mock_request):
        response = Response()
        response.status_code = 200
        response._content = json.dumps(test_document)
        mock_request.return_value = response

        result = self.api.ready_to_view(test_document['id'])
        self.assertIsNotNone(result)
        self.assertTrue(bool(result))

        response._content = json.dumps(dict(test_document, status='error'))

        result = self.api.ready_to_view(test_document['id'])
        self.assertFalse(bool(result))

    @patch.object(Session, 'request')
    def test_request_error(self, mock_request):
        response = Response()
        response.status_code = 401
        response._content = 'Unauthorized'
        response.reason = 'Unauthorized'
        mock_request.return_value = response

        self.assertRaises(BoxViewError,
                          self.api.get_document,
                          test_document['id'])

    @patch.object(Session, 'request')
    def test_request_retry_after(self, mock_request):
        response = Response()
        response.status_code = 202
        response.headers['Retry-After'] = '100.0'
        mock_request.return_value = response

        try:
            self.api.get_thumbnail_to_string(test_document['id'], 100, 100)
        except RetryAfter as e:
            self.assertEqual(e.seconds, 100.0)
        else:
            self.assertTrue(False)

    @patch.object(Session, 'request')
    def test_get_thumbnail(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'image/png'
        response._content = 'test'
        response.raw = six.BytesIO('test')
        mock_request.return_value = response

        stream = six.BytesIO()
        mimetype = self.api.get_thumbnail(stream, test_document['id'], 100, 100)
        self.assertEqual(stream.getvalue(), response._content)
        self.assertEqual(mimetype, response.headers['Content-Type'])

    @patch.object(Session, 'request')
    def test_get_thumbnail_to_string(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'image/png'
        response._content = 'test'
        response.raw = six.BytesIO('test')
        mock_request.return_value = response

        doc_id = test_document['id']
        result, mimetype = self.api.get_thumbnail_to_string(doc_id, 100, 100)
        self.assertIsNotNone(result)
        self.assertEqual(result, response._content)
        self.assertEqual(mimetype, response.headers['Content-Type'])

    @patch.object(Session, 'request')
    def test_get_thumbnail_to_file(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'image/png'
        response._content = 'test'
        response.raw = six.BytesIO('test')
        mock_request.return_value = response

        filename = 'boxview.png'
        mimetype = self.api.get_thumbnail_to_file(filename,
                                                  test_document['id'],
                                                  100, 100)
        self.assertEqual(mimetype, response.headers['Content-Type'])
        self.assertTrue(os.path.exists(filename))
        try:
            os.remove(filename)
        except OSError:
            pass
コード例 #4
0
ファイル: tests.py プロジェクト: suriya/python-boxview
class BoxViewTestCase(unittest.TestCase):
    def setUp(self):
        self.api = BoxView('<box view api key>')

    def test_initials(self):
        # api key is required
        self.assertRaises(ValueError, BoxView)

        now = datetime.datetime.utcnow().replace(microsecond=0)
        dtfiso = now.isoformat()
        dfiso = now.date().isoformat()

        self.assertEqual(dtfiso, format_date(dtfiso))
        self.assertEqual(dtfiso, format_date(now))
        self.assertEqual(dfiso, format_date(now.date()))

        headers = {'Content-Type': 'text/plain'}
        self.assertEqual('text/plain', get_mimetype_from_headers(headers))
        headers = {'Content-Type': 'text/plain; charset=utf-8'}
        self.assertEqual('text/plain', get_mimetype_from_headers(headers))

    @patch.object(Session, 'request')
    def test_crate_document_from_url(self, mock_request):
        response = Response()
        response.status_code = 201
        response._content = json.dumps(TEST_DOCUMENT)
        mock_request.return_value = response

        result = self.api.create_document(url=TEST_URL,
                                          name='Test Document',
                                          thumbnails='100x100,200x200',
                                          non_svg=False)
        self.assertIsNotNone(result)
        self.assertEqual(result, TEST_DOCUMENT)

        data = {
            'url': TEST_URL,
            'name': 'Test Document',
            'thumbnails': '100x100,200x200',
            'non_svg': False,
        }
        headers = {'Content-Type': 'application/json'}
        url = urljoin(API_URL, 'documents')
        mock_request.assert_called_with('POST',
                                        url,
                                        data=json.dumps(data),
                                        headers=headers)

        # url of file param is required
        self.assertRaises(ValueError, self.api.create_document)

    @patch.object(Session, 'request')
    def test_create_document_from_file(self, mock_request):
        response = Response()
        response.status_code = 201
        response._content = json.dumps(TEST_DOCUMENT)
        mock_request.return_value = response

        stream = six.BytesIO()
        result = self.api.create_document_from_file(stream,
                                                    name='Test Document')
        self.assertEqual(result, TEST_DOCUMENT)

        result = self.api.create_document_from_file(__file__,
                                                    name='Test Document')
        self.assertEqual(result, TEST_DOCUMENT)

    @patch.object(Session, 'request')
    def test_get_document(self, mock_request):
        response = Response()
        response.status_code = 200
        response._content = json.dumps(TEST_DOCUMENT)
        mock_request.return_value = response

        result = self.api.get_document(TEST_DOCUMENT['id'])
        self.assertIsNotNone(result)
        self.assertEqual(result, TEST_DOCUMENT)

    @patch.object(Session, 'request')
    def test_get_documents(self, mock_request):
        response = Response()
        response.status_code = 200
        response._content = json.dumps(TEST_DOCUMENT_LIST)
        mock_request.return_value = response

        now = datetime.datetime.utcnow()
        result = self.api.get_documents(limit=10, created_before=now)
        self.assertIsNotNone(result)
        self.assertEqual(result, TEST_DOCUMENT_LIST)

    @patch.object(Session, 'request')
    def test_update_document(self, mock_request):
        response = Response()
        response.status_code = 200
        response._content = json.dumps(TEST_DOCUMENT)
        mock_request.return_value = response

        result = self.api.update_document(TEST_DOCUMENT['id'],
                                          name='TestDocument')
        self.assertIsNotNone(result)
        self.assertEqual(result, TEST_DOCUMENT)

    @patch.object(Session, 'request')
    def test_delete_document(self, mock_request):
        response = Response()
        response.status_code = 204
        mock_request.return_value = response

        self.api.delete_document(TEST_DOCUMENT['id'])

    @patch.object(Session, 'request')
    def test_get_document_content(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'text/plain'
        response._content = 'test'
        response.raw = six.BytesIO('test')
        mock_request.return_value = response

        stream = six.BytesIO()
        mimetype = self.api.get_document_content(stream, TEST_DOCUMENT['id'])
        self.assertEqual(stream.getvalue(), response._content)
        self.assertEqual(mimetype, response.headers['Content-Type'])

        stream = six.BytesIO()
        self.api.get_document_content(stream,
                                      TEST_DOCUMENT['id'],
                                      extension='.pdf')
        self.assertEqual(stream.getvalue(), response._content)

        stream = six.BytesIO()
        self.api.get_document_content(stream,
                                      TEST_DOCUMENT['id'],
                                      extension='.zip')
        self.assertEqual(stream.getvalue(), response._content)

        stream = six.BytesIO()
        # allowed only .zip and .pdf extensions
        self.assertRaises(ValueError,
                          self.api.get_document_content,
                          stream,
                          TEST_DOCUMENT['id'],
                          extension='.docx')

    @patch.object(Session, 'request')
    def test_get_document_content_to_string(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'text/plain'
        response._content = 'test'
        response.raw = six.BytesIO('test')
        mock_request.return_value = response

        doc_id = TEST_DOCUMENT['id']
        result, mimetype = self.api.get_document_content_to_string(doc_id)
        self.assertIsNotNone(result)
        self.assertEqual(result, response._content)
        self.assertEqual(mimetype, response.headers['Content-Type'])

    @patch.object(Session, 'request')
    def test_get_document_content_to_file(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'text/plain'
        response._content = 'test'
        response.raw = six.BytesIO('test')
        mock_request.return_value = response

        filename = 'boxview.txt'
        mimetype = self.api.get_document_content_to_file(
            filename, TEST_DOCUMENT['id'])
        self.assertEqual(mimetype, response.headers['Content-Type'])
        self.assertTrue(os.path.exists(filename))
        try:
            os.remove(filename)
        except OSError:
            pass

    @patch.object(Session, 'request')
    def test_get_document_content_mimetype(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'text/plain'
        mock_request.return_value = response

        mimetype = self.api.get_document_content_mimetype(TEST_DOCUMENT['id'])
        self.assertEqual(mimetype, response.headers['Content-Type'])

    @patch.object(Session, 'request')
    def test_create_session(self, mock_request):
        response = Response()
        response.status_code = 201
        response._content = json.dumps(TEST_SESSION)
        mock_request.return_value = response

        expires_at = datetime.datetime.utcnow()
        doc_id = TEST_DOCUMENT['id']
        result = self.api.create_session(doc_id,
                                         duration=600,
                                         expires_at=expires_at,
                                         is_downloadable=True,
                                         is_text_selectable=True)
        self.assertIsNotNone(result)
        self.assertEqual(result['id'], TEST_SESSION['id'])

        data = {
            'document_id': doc_id,
            'duration': 600,
            'expires_at': expires_at.replace(microsecond=0).isoformat(),
            'is_downloadable': True,
            'is_text_selectable': True
        }
        headers = {'Content-Type': 'application/json'}
        url = urljoin(API_URL, 'sessions')
        mock_request.assert_called_with('POST',
                                        url,
                                        data=json.dumps(data),
                                        headers=headers)

    @patch.object(Session, 'request')
    def test_ready_to_view(self, mock_request):
        response = Response()
        response.status_code = 200
        response._content = json.dumps(TEST_DOCUMENT)
        mock_request.return_value = response

        result = self.api.ready_to_view(TEST_DOCUMENT['id'])
        self.assertIsNotNone(result)
        self.assertTrue(bool(result))

        response._content = json.dumps(dict(TEST_DOCUMENT, status='error'))

        result = self.api.ready_to_view(TEST_DOCUMENT['id'])
        self.assertFalse(bool(result))

    @patch.object(Session, 'request')
    def test_request_error(self, mock_request):
        response = Response()
        response.status_code = 401
        response._content = 'Unauthorized'
        response.reason = 'Unauthorized'
        mock_request.return_value = response

        self.assertRaises(BoxViewError, self.api.get_document,
                          TEST_DOCUMENT['id'])

    @patch.object(Session, 'request')
    def test_request_retry_after(self, mock_request):
        response = Response()
        response.status_code = 202
        response.headers['Retry-After'] = '100.0'
        mock_request.return_value = response

        try:
            self.api.get_thumbnail_to_string(TEST_DOCUMENT['id'], 100, 100)
        except RetryAfter as e:
            self.assertEqual(e.seconds, 100.0)
        else:
            self.assertTrue(False)

    @patch.object(Session, 'request')
    def test_get_thumbnail(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'image/png'
        response._content = 'test'
        response.raw = six.BytesIO('test')
        mock_request.return_value = response

        stream = six.BytesIO()
        mimetype = self.api.get_thumbnail(stream, TEST_DOCUMENT['id'], 100,
                                          100)
        self.assertEqual(stream.getvalue(), response._content)
        self.assertEqual(mimetype, response.headers['Content-Type'])

    @patch.object(Session, 'request')
    def test_get_thumbnail_to_string(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'image/png'
        response._content = 'test'
        response.raw = six.BytesIO('test')
        mock_request.return_value = response

        doc_id = TEST_DOCUMENT['id']
        result, mimetype = self.api.get_thumbnail_to_string(doc_id, 100, 100)
        self.assertIsNotNone(result)
        self.assertEqual(result, response._content)
        self.assertEqual(mimetype, response.headers['Content-Type'])

    @patch.object(Session, 'request')
    def test_get_thumbnail_to_file(self, mock_request):
        response = Response()
        response.status_code = 200
        response.headers['Content-Type'] = 'image/png'
        response._content = 'test'
        response.raw = six.BytesIO('test')
        mock_request.return_value = response

        filename = 'boxview.png'
        mimetype = self.api.get_thumbnail_to_file(filename,
                                                  TEST_DOCUMENT['id'], 100,
                                                  100)
        self.assertEqual(mimetype, response.headers['Content-Type'])
        self.assertTrue(os.path.exists(filename))
        try:
            os.remove(filename)
        except OSError:
            pass

    @patch.object(Session, 'request')
    def test_create_storage_profile(self, mock_request):
        response = Response()
        response.status_code = 201
        response._content = json.dumps(TEST_STORAGE_PROFILE)
        mock_request.return_value = response

        result = self.api.create_storage_profile('S3', 'bucket', 'key_id',
                                                 'secret_key')
        self.assertIsNotNone(result)
        self.assertEqual(result, TEST_STORAGE_PROFILE)

    @patch.object(Session, 'request')
    def test_get_storage_profile(self, mock_request):
        response = Response()
        response.status_code = 200
        response._content = json.dumps(TEST_STORAGE_PROFILE)
        mock_request.return_value = response

        result = self.api.get_storage_profile()
        self.assertIsNotNone(result)
        self.assertEqual(result, TEST_STORAGE_PROFILE)

    @patch.object(Session, 'request')
    def test_delete_storage_profile(self, mock_request):
        response = Response()
        response.status_code = 204
        mock_request.return_value = response

        self.api.delete_storage_profile()

    @patch.object(Session, 'request')
    def test_create_webhook(self, mock_request):
        response = Response()
        response.status_code = 201
        response._content = json.dumps(TEST_WEBHOOK)
        mock_request.return_value = response

        result = self.api.create_webhook('http://example.com/webhook')
        self.assertIsNotNone(result)
        self.assertEqual(result, TEST_WEBHOOK)

    @patch.object(Session, 'request')
    def test_get_webhook(self, mock_request):
        response = Response()
        response.status_code = 200
        response._content = json.dumps(TEST_WEBHOOK)
        mock_request.return_value = response

        result = self.api.get_webhook()
        self.assertIsNotNone(result)
        self.assertEqual(result, TEST_WEBHOOK)

    @patch.object(Session, 'request')
    def test_delete_webhook(self, mock_request):
        response = Response()
        response.status_code = 204
        mock_request.return_value = response

        self.api.delete_webhook()