Updates
This commit is contained in:
151
ETB-API/sla_oncall/tests.py
Normal file
151
ETB-API/sla_oncall/tests.py
Normal file
@@ -0,0 +1,151 @@
|
||||
"""
|
||||
Tests for SLA & On-Call Management
|
||||
"""
|
||||
from django.test import TestCase
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.utils import timezone
|
||||
from datetime import datetime, timedelta, time
|
||||
from unittest.mock import patch, MagicMock
|
||||
|
||||
from sla_oncall.models import (
|
||||
BusinessHours,
|
||||
SLADefinition,
|
||||
EscalationPolicy,
|
||||
OnCallRotation,
|
||||
OnCallAssignment,
|
||||
SLAInstance,
|
||||
EscalationInstance,
|
||||
NotificationTemplate,
|
||||
)
|
||||
from incident_intelligence.models import Incident
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
class BusinessHoursModelTest(TestCase):
|
||||
"""Test BusinessHours model functionality"""
|
||||
|
||||
def setUp(self):
|
||||
self.business_hours = BusinessHours.objects.create(
|
||||
name='Test Business Hours',
|
||||
description='Test business hours',
|
||||
timezone='UTC',
|
||||
weekday_start=time(9, 0),
|
||||
weekday_end=time(17, 0),
|
||||
weekend_start=time(10, 0),
|
||||
weekend_end=time(16, 0),
|
||||
)
|
||||
|
||||
def test_business_hours_creation(self):
|
||||
"""Test business hours creation"""
|
||||
self.assertEqual(self.business_hours.name, 'Test Business Hours')
|
||||
self.assertEqual(self.business_hours.weekday_start, time(9, 0))
|
||||
self.assertTrue(self.business_hours.is_active)
|
||||
|
||||
def test_is_business_hours_weekday(self):
|
||||
"""Test business hours check for weekday"""
|
||||
# Monday 10 AM UTC
|
||||
test_time = timezone.make_aware(datetime(2024, 1, 8, 10, 0))
|
||||
self.assertTrue(self.business_hours.is_business_hours(test_time))
|
||||
|
||||
# Monday 6 AM UTC (before business hours)
|
||||
test_time = timezone.make_aware(datetime(2024, 1, 8, 6, 0))
|
||||
self.assertFalse(self.business_hours.is_business_hours(test_time))
|
||||
|
||||
|
||||
class SLADefinitionModelTest(TestCase):
|
||||
"""Test SLADefinition model functionality"""
|
||||
|
||||
def setUp(self):
|
||||
self.business_hours = BusinessHours.objects.create(
|
||||
name='Test Business Hours',
|
||||
description='Test business hours',
|
||||
timezone='UTC',
|
||||
)
|
||||
|
||||
self.sla_definition = SLADefinition.objects.create(
|
||||
name='Test SLA',
|
||||
description='Test SLA definition',
|
||||
sla_type='RESPONSE_TIME',
|
||||
incident_severities=['HIGH', 'CRITICAL'],
|
||||
incident_categories=['SYSTEM'],
|
||||
target_duration_minutes=60,
|
||||
business_hours=self.business_hours,
|
||||
)
|
||||
|
||||
def test_sla_definition_creation(self):
|
||||
"""Test SLA definition creation"""
|
||||
self.assertEqual(self.sla_definition.name, 'Test SLA')
|
||||
self.assertEqual(self.sla_definition.target_duration_minutes, 60)
|
||||
self.assertEqual(self.sla_definition.escalation_threshold_percent, 80.0)
|
||||
|
||||
|
||||
class OnCallRotationModelTest(TestCase):
|
||||
"""Test OnCallRotation model functionality"""
|
||||
|
||||
def setUp(self):
|
||||
self.user = User.objects.create_user(
|
||||
username='testuser',
|
||||
email='test@example.com',
|
||||
password='testpass123'
|
||||
)
|
||||
|
||||
self.rotation = OnCallRotation.objects.create(
|
||||
name='Test Rotation',
|
||||
description='Test rotation',
|
||||
rotation_type='WEEKLY',
|
||||
team_name='Test Team',
|
||||
)
|
||||
|
||||
def test_rotation_creation(self):
|
||||
"""Test on-call rotation creation"""
|
||||
self.assertEqual(self.rotation.name, 'Test Rotation')
|
||||
self.assertEqual(self.rotation.rotation_type, 'WEEKLY')
|
||||
self.assertEqual(self.rotation.status, 'ACTIVE')
|
||||
|
||||
|
||||
class SLAInstanceModelTest(TestCase):
|
||||
"""Test SLAInstance model functionality"""
|
||||
|
||||
def setUp(self):
|
||||
self.user = User.objects.create_user(
|
||||
username='testuser',
|
||||
email='test@example.com',
|
||||
password='testpass123'
|
||||
)
|
||||
|
||||
self.incident = Incident.objects.create(
|
||||
title='Test Incident',
|
||||
description='Test incident description',
|
||||
severity='HIGH',
|
||||
category='SYSTEM',
|
||||
reporter=self.user,
|
||||
)
|
||||
|
||||
self.sla_definition = SLADefinition.objects.create(
|
||||
name='Test SLA',
|
||||
description='Test SLA definition',
|
||||
sla_type='RESPONSE_TIME',
|
||||
target_duration_minutes=60,
|
||||
)
|
||||
|
||||
self.sla_instance = SLAInstance.objects.create(
|
||||
sla_definition=self.sla_definition,
|
||||
incident=self.incident,
|
||||
target_time=timezone.now() + timedelta(minutes=60),
|
||||
)
|
||||
|
||||
def test_sla_instance_creation(self):
|
||||
"""Test SLA instance creation"""
|
||||
self.assertEqual(self.sla_instance.incident, self.incident)
|
||||
self.assertEqual(self.sla_instance.sla_definition, self.sla_definition)
|
||||
self.assertEqual(self.sla_instance.status, 'ACTIVE')
|
||||
|
||||
def test_is_breached_property(self):
|
||||
"""Test SLA breach detection"""
|
||||
# Active SLA with future target time
|
||||
self.assertFalse(self.sla_instance.is_breached)
|
||||
|
||||
# Active SLA with past target time
|
||||
self.sla_instance.target_time = timezone.now() - timedelta(minutes=1)
|
||||
self.assertTrue(self.sla_instance.is_breached)
|
||||
Reference in New Issue
Block a user