Apply suggestions from code review

This commit is contained in:
shamoon 2024-03-03 21:52:36 -08:00
parent 04315817a2
commit 914db68e5e
2 changed files with 73 additions and 1 deletions

View File

@ -20,6 +20,14 @@ class TestSystemStatus(APITestCase):
)
def test_system_status(self):
"""
GIVEN:
- A user is logged in
WHEN:
- The user requests the system status
THEN:
- The response contains relevant system status information
"""
self.client.force_login(self.user)
response = self.client.get(self.ENDPOINT)
self.assertEqual(response.status_code, status.HTTP_200_OK)
@ -38,6 +46,14 @@ class TestSystemStatus(APITestCase):
self.assertIsNotNone(response.data["tasks"]["redis_error"])
def test_system_status_insufficient_permissions(self):
"""
GIVEN:
- A user is not logged in or does not have permissions
WHEN:
- The user requests the system status
THEN:
- The response contains a 401 status code or a 403 status code
"""
response = self.client.get(self.ENDPOINT)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
normal_user = User.objects.create_user(username="normal_user")
@ -46,6 +62,14 @@ class TestSystemStatus(APITestCase):
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_system_status_container_detection(self):
"""
GIVEN:
- The application is running in a containerized environment
WHEN:
- The user requests the system status
THEN:
- The response contains the correct install type
"""
self.client.force_login(self.user)
os.environ["PNGX_CONTAINERIZED"] = "1"
response = self.client.get(self.ENDPOINT)
@ -57,6 +81,14 @@ class TestSystemStatus(APITestCase):
@mock.patch("redis.Redis.execute_command")
def test_system_status_redis_ping(self, mock_ping):
"""
GIVEN:
- Redies ping returns True
WHEN:
- The user requests the system status
THEN:
- The response contains the correct redis status
"""
mock_ping.return_value = True
self.client.force_login(self.user)
response = self.client.get(self.ENDPOINT)
@ -65,6 +97,14 @@ class TestSystemStatus(APITestCase):
@mock.patch("celery.app.control.Inspect.ping")
def test_system_status_celery_ping(self, mock_ping):
"""
GIVEN:
- Celery ping returns pong
WHEN:
- The user requests the system status
THEN:
- The response contains the correct celery status
"""
mock_ping.return_value = {"hostname": {"ok": "pong"}}
self.client.force_login(self.user)
response = self.client.get(self.ENDPOINT)
@ -74,6 +114,14 @@ class TestSystemStatus(APITestCase):
@override_settings(INDEX_DIR="/tmp/index")
@mock.patch("whoosh.index.FileIndex.last_modified")
def test_system_status_index_ok(self, mock_last_modified):
"""
GIVEN:
- The index last modified time is set
WHEN:
- The user requests the system status
THEN:
- The response contains the correct index status
"""
mock_last_modified.return_value = 1707839087
self.client.force_login(self.user)
response = self.client.get(self.ENDPOINT)
@ -84,6 +132,14 @@ class TestSystemStatus(APITestCase):
@override_settings(INDEX_DIR="/tmp/index/")
@mock.patch("documents.index.open_index", autospec=True)
def test_system_status_index_error(self, mock_open_index):
"""
GIVEN:
- The index is not found
WHEN:
- The user requests the system status
THEN:
- The response contains the correct index status
"""
mock_open_index.return_value = None
mock_open_index.side_effect = Exception("Index error")
self.client.force_login(self.user)
@ -95,6 +151,14 @@ class TestSystemStatus(APITestCase):
@override_settings(DATA_DIR="/tmp/does_not_exist/data/")
def test_system_status_classifier_ok(self):
"""
GIVEN:
- The classifier is found
WHEN:
- The user requests the system status
THEN:
- The response contains the correct classifier status
"""
load_classifier()
test_classifier = DocumentClassifier()
test_classifier.save()
@ -105,6 +169,14 @@ class TestSystemStatus(APITestCase):
self.assertIsNone(response.data["tasks"]["classifier_error"])
def test_system_status_classifier_error(self):
"""
GIVEN:
- The classifier is not found
WHEN:
- The user requests the system status
THEN:
- The response contains an error classifier status
"""
with override_settings(MODEL_FILE="does_not_exist"):
self.client.force_login(self.user)
response = self.client.get(self.ENDPOINT)

View File

@ -1586,7 +1586,7 @@ class SystemStatusView(GenericAPIView, PassUserMixin):
media_stats = os.statvfs(settings.MEDIA_ROOT)
redis_url = settings._CELERY_REDIS_URL
redis_url = settings._CHANNELS_REDIS_URL
redis_error = None
with Redis.from_url(url=redis_url) as client:
try: