From 613df66004712f7d0c02ef3b598f08fe05134a8e Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 11 Dec 2023 10:30:14 -0800 Subject: [PATCH] Move remoteversion-related API tests --- src/documents/tests/test_api.py | 116 ----------------- .../tests/test_api_remote_version.py | 123 ++++++++++++++++++ 2 files changed, 123 insertions(+), 116 deletions(-) create mode 100644 src/documents/tests/test_api_remote_version.py diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index f9368817c..67a68f38e 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -3,13 +3,11 @@ import json import os import shutil import tempfile -import urllib.request import uuid import zoneinfo from datetime import timedelta from pathlib import Path from unittest import mock -from unittest.mock import MagicMock import celery from dateutil import parser @@ -36,7 +34,6 @@ from documents.models import StoragePath from documents.models import Tag from documents.tests.utils import DirectoriesMixin from documents.tests.utils import DocumentConsumeDelayMixin -from paperless import version class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase): @@ -1997,119 +1994,6 @@ class TestDocumentApiV2(DirectoriesMixin, APITestCase): ) -class TestApiRemoteVersion(DirectoriesMixin, APITestCase): - ENDPOINT = "/api/remote_version/" - - def setUp(self): - super().setUp() - - @mock.patch("urllib.request.urlopen") - def test_remote_version_enabled_no_update_prefix(self, urlopen_mock): - cm = MagicMock() - cm.getcode.return_value = status.HTTP_200_OK - cm.read.return_value = json.dumps({"tag_name": "ngx-1.6.0"}).encode() - cm.__enter__.return_value = cm - urlopen_mock.return_value = cm - - response = self.client.get(self.ENDPOINT) - - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertDictEqual( - response.data, - { - "version": "1.6.0", - "update_available": False, - }, - ) - - @mock.patch("urllib.request.urlopen") - def test_remote_version_enabled_no_update_no_prefix(self, urlopen_mock): - cm = MagicMock() - cm.getcode.return_value = status.HTTP_200_OK - cm.read.return_value = json.dumps( - {"tag_name": version.__full_version_str__}, - ).encode() - cm.__enter__.return_value = cm - urlopen_mock.return_value = cm - - response = self.client.get(self.ENDPOINT) - - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertDictEqual( - response.data, - { - "version": version.__full_version_str__, - "update_available": False, - }, - ) - - @mock.patch("urllib.request.urlopen") - def test_remote_version_enabled_update(self, urlopen_mock): - new_version = ( - version.__version__[0], - version.__version__[1], - version.__version__[2] + 1, - ) - new_version_str = ".".join(map(str, new_version)) - - cm = MagicMock() - cm.getcode.return_value = status.HTTP_200_OK - cm.read.return_value = json.dumps( - {"tag_name": new_version_str}, - ).encode() - cm.__enter__.return_value = cm - urlopen_mock.return_value = cm - - response = self.client.get(self.ENDPOINT) - - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertDictEqual( - response.data, - { - "version": new_version_str, - "update_available": True, - }, - ) - - @mock.patch("urllib.request.urlopen") - def test_remote_version_bad_json(self, urlopen_mock): - cm = MagicMock() - cm.getcode.return_value = status.HTTP_200_OK - cm.read.return_value = b'{ "blah":' - cm.__enter__.return_value = cm - urlopen_mock.return_value = cm - - response = self.client.get(self.ENDPOINT) - - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertDictEqual( - response.data, - { - "version": "0.0.0", - "update_available": False, - }, - ) - - @mock.patch("urllib.request.urlopen") - def test_remote_version_exception(self, urlopen_mock): - cm = MagicMock() - cm.getcode.return_value = status.HTTP_200_OK - cm.read.side_effect = urllib.error.URLError("an error") - cm.__enter__.return_value = cm - urlopen_mock.return_value = cm - - response = self.client.get(self.ENDPOINT) - - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertDictEqual( - response.data, - { - "version": "0.0.0", - "update_available": False, - }, - ) - - class TestApiObjects(DirectoriesMixin, APITestCase): def setUp(self) -> None: super().setUp() diff --git a/src/documents/tests/test_api_remote_version.py b/src/documents/tests/test_api_remote_version.py new file mode 100644 index 000000000..00d3e0775 --- /dev/null +++ b/src/documents/tests/test_api_remote_version.py @@ -0,0 +1,123 @@ +import json +import urllib.request +from unittest import mock +from unittest.mock import MagicMock + +from rest_framework import status +from rest_framework.test import APITestCase + +from documents.tests.utils import DirectoriesMixin +from paperless import version + + +class TestApiRemoteVersion(DirectoriesMixin, APITestCase): + ENDPOINT = "/api/remote_version/" + + def setUp(self): + super().setUp() + + @mock.patch("urllib.request.urlopen") + def test_remote_version_enabled_no_update_prefix(self, urlopen_mock): + cm = MagicMock() + cm.getcode.return_value = status.HTTP_200_OK + cm.read.return_value = json.dumps({"tag_name": "ngx-1.6.0"}).encode() + cm.__enter__.return_value = cm + urlopen_mock.return_value = cm + + response = self.client.get(self.ENDPOINT) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertDictEqual( + response.data, + { + "version": "1.6.0", + "update_available": False, + }, + ) + + @mock.patch("urllib.request.urlopen") + def test_remote_version_enabled_no_update_no_prefix(self, urlopen_mock): + cm = MagicMock() + cm.getcode.return_value = status.HTTP_200_OK + cm.read.return_value = json.dumps( + {"tag_name": version.__full_version_str__}, + ).encode() + cm.__enter__.return_value = cm + urlopen_mock.return_value = cm + + response = self.client.get(self.ENDPOINT) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertDictEqual( + response.data, + { + "version": version.__full_version_str__, + "update_available": False, + }, + ) + + @mock.patch("urllib.request.urlopen") + def test_remote_version_enabled_update(self, urlopen_mock): + new_version = ( + version.__version__[0], + version.__version__[1], + version.__version__[2] + 1, + ) + new_version_str = ".".join(map(str, new_version)) + + cm = MagicMock() + cm.getcode.return_value = status.HTTP_200_OK + cm.read.return_value = json.dumps( + {"tag_name": new_version_str}, + ).encode() + cm.__enter__.return_value = cm + urlopen_mock.return_value = cm + + response = self.client.get(self.ENDPOINT) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertDictEqual( + response.data, + { + "version": new_version_str, + "update_available": True, + }, + ) + + @mock.patch("urllib.request.urlopen") + def test_remote_version_bad_json(self, urlopen_mock): + cm = MagicMock() + cm.getcode.return_value = status.HTTP_200_OK + cm.read.return_value = b'{ "blah":' + cm.__enter__.return_value = cm + urlopen_mock.return_value = cm + + response = self.client.get(self.ENDPOINT) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertDictEqual( + response.data, + { + "version": "0.0.0", + "update_available": False, + }, + ) + + @mock.patch("urllib.request.urlopen") + def test_remote_version_exception(self, urlopen_mock): + cm = MagicMock() + cm.getcode.return_value = status.HTTP_200_OK + cm.read.side_effect = urllib.error.URLError("an error") + cm.__enter__.return_value = cm + urlopen_mock.return_value = cm + + response = self.client.get(self.ENDPOINT) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertDictEqual( + response.data, + { + "version": "0.0.0", + "update_available": False, + }, + )