File indexing completed on 2026-04-27 07:41:43
0001 from django.test import TestCase
0002 from django.urls import reverse
0003 from django.contrib.auth.models import User
0004 from django.utils import timezone
0005 from rest_framework.test import APITestCase, APIClient
0006 from rest_framework import status
0007 from monitor_app.models import SystemAgent, AppLog, Run, StfFile, Subscriber
0008 from monitor_app.serializers import AppLogSerializer
0009 from django.core.management import call_command
0010 from io import StringIO
0011 import logging
0012 import uuid
0013 import re
0014
0015
0016 class SubscriberAPITests(APITestCase):
0017 def setUp(self):
0018 unique_username = f"testuser_{uuid.uuid4()}"
0019 self.user = User.objects.create_user(username=unique_username, password='testpassword')
0020 self.client.force_authenticate(user=self.user)
0021 self.subscriber = Subscriber.objects.create(
0022 subscriber_name="test_subscriber",
0023 fraction=0.5,
0024 description="Test subscriber for unit tests",
0025 is_active=True
0026 )
0027
0028 def test_list_subscribers(self):
0029 url = reverse('monitor_app:subscriber-list')
0030 response = self.client.get(url)
0031 self.assertEqual(response.status_code, status.HTTP_200_OK)
0032
0033 def test_create_subscriber(self):
0034 url = reverse('monitor_app:subscriber-list')
0035 data = {
0036 'subscriber_name': 'new_subscriber',
0037 'fraction': 0.8,
0038 'description': 'New test subscriber',
0039 'is_active': True
0040 }
0041 response = self.client.post(url, data, format='json')
0042 self.assertEqual(response.status_code, status.HTTP_201_CREATED)
0043 self.assertEqual(Subscriber.objects.count(), 2)
0044
0045 def test_get_subscriber(self):
0046 url = reverse('monitor_app:subscriber-detail', kwargs={'pk': self.subscriber.subscriber_id})
0047 response = self.client.get(url)
0048 self.assertEqual(response.status_code, status.HTTP_200_OK)
0049 self.assertEqual(response.data['subscriber_name'], "test_subscriber")
0050
0051 def test_update_subscriber_status(self):
0052 url = reverse('monitor_app:subscriber-detail', kwargs={'pk': self.subscriber.subscriber_id})
0053 data = {'is_active': False}
0054 response = self.client.patch(url, data, format='json')
0055 self.assertEqual(response.status_code, status.HTTP_200_OK)
0056 self.subscriber.refresh_from_db()
0057 self.assertFalse(self.subscriber.is_active)
0058
0059 def test_update_subscriber_fraction(self):
0060 url = reverse('monitor_app:subscriber-detail', kwargs={'pk': self.subscriber.subscriber_id})
0061 data = {'fraction': 0.3}
0062 response = self.client.patch(url, data, format='json')
0063 self.assertEqual(response.status_code, status.HTTP_200_OK)
0064 self.subscriber.refresh_from_db()
0065 self.assertEqual(self.subscriber.fraction, 0.3)
0066
0067 def test_delete_subscriber(self):
0068 url = reverse('monitor_app:subscriber-detail', kwargs={'pk': self.subscriber.subscriber_id})
0069 response = self.client.delete(url)
0070 self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
0071 self.assertFalse(Subscriber.objects.filter(pk=self.subscriber.subscriber_id).exists())
0072
0073 def test_create_subscriber_duplicate_name(self):
0074 url = reverse('monitor_app:subscriber-list')
0075 data = {
0076 'subscriber_name': 'test_subscriber',
0077 'fraction': 0.1,
0078 'description': 'Duplicate name test'
0079 }
0080 response = self.client.post(url, data, format='json')
0081 self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
0082
0083 def test_invalid_fraction_range(self):
0084 url = reverse('monitor_app:subscriber-list')
0085 data = {
0086 'subscriber_name': 'invalid_fraction_subscriber',
0087 'fraction': 1.5,
0088 'description': 'Invalid fraction test'
0089 }
0090 response = self.client.post(url, data, format='json')
0091
0092
0093
0094 def test_unauthenticated_access_denied(self):
0095 self.client.force_authenticate(user=None)
0096 url = reverse('monitor_app:subscriber-list')
0097 response = self.client.get(url)
0098 self.assertIn(response.status_code, [status.HTTP_401_UNAUTHORIZED, status.HTTP_403_FORBIDDEN])