Back to home page

EIC code displayed by LXR

 
 

    


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',  # Same as existing
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,  # Invalid: > 1.0
0088             'description': 'Invalid fraction test'
0089         }
0090         response = self.client.post(url, data, format='json')
0091         # Note: This test may pass if no validation is implemented, but documents expected behavior
0092         # self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
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])