|
1 | | -from datetime import datetime, timezone |
| 1 | +from datetime import datetime, timedelta |
| 2 | +from django.utils import timezone |
| 3 | +from unittest.mock import patch |
2 | 4 | from django.conf import settings |
3 | 5 | from modeltranslation.utils import build_localized_fieldname |
4 | 6 |
|
|
10 | 12 | from api.factories.country import CountryFactory |
11 | 13 | from deployments.factories.molnix_tag import MolnixTagFactory |
12 | 14 |
|
13 | | -from notifications.models import SurgeAlert, SurgeAlertType |
| 15 | +from notifications.models import SurgeAlert, SurgeAlertStatus, SurgeAlertType |
14 | 16 | from notifications.factories import SurgeAlertFactory |
| 17 | +from django.core.management import call_command |
15 | 18 |
|
16 | 19 |
|
17 | 20 | class NotificationTestCase(APITestCase): |
@@ -136,3 +139,97 @@ def _to_csv(*items): |
136 | 139 | molnix_tag_names=_to_csv('OP-6700', 'L-FRA', 'AMER'), |
137 | 140 | )) |
138 | 141 | self.assertEqual(response['count'], 2) |
| 142 | + |
| 143 | + def test_surge_alert_status(self): |
| 144 | + region_1, region_2 = RegionFactory.create_batch(2) |
| 145 | + country_1 = CountryFactory.create(iso3='ATL', region=region_1) |
| 146 | + country_2 = CountryFactory.create(iso3='NPT', region=region_2) |
| 147 | + |
| 148 | + molnix_tag_1 = MolnixTagFactory.create(name='OP-6700') |
| 149 | + molnix_tag_2 = MolnixTagFactory.create(name='L-FRA') |
| 150 | + molnix_tag_3 = MolnixTagFactory.create(name='AMER') |
| 151 | + |
| 152 | + alert1 = SurgeAlertFactory.create( |
| 153 | + message='CEA Coordinator, Floods, Atlantis', |
| 154 | + country=country_1, |
| 155 | + molnix_tags=[molnix_tag_1, molnix_tag_2], |
| 156 | + opens=timezone.now() - timedelta(days=2), |
| 157 | + closes=timezone.now() + timedelta(days=5) |
| 158 | + ) |
| 159 | + alert2 = SurgeAlertFactory.create( |
| 160 | + message='WASH Coordinator, Earthquake, Neptunus', |
| 161 | + country=country_2, |
| 162 | + molnix_tags=[molnix_tag_1, molnix_tag_3], |
| 163 | + opens=timezone.now() - timedelta(days=2), |
| 164 | + closes=timezone.now() - timedelta(days=1) |
| 165 | + ) |
| 166 | + alert3 = SurgeAlertFactory.create( |
| 167 | + message='New One', |
| 168 | + country=country_2, |
| 169 | + molnix_tags=[molnix_tag_1, molnix_tag_3], |
| 170 | + molnix_status='unfilled', |
| 171 | + ) |
| 172 | + |
| 173 | + self.assertEqual(alert1.status, SurgeAlertStatus.OPEN) |
| 174 | + self.assertEqual(alert2.status, SurgeAlertStatus.CLOSED) |
| 175 | + self.assertEqual(alert3.status, SurgeAlertStatus.STOOD_DOWN) |
| 176 | + |
| 177 | + def _fetch(filters): |
| 178 | + return self.client.get('/api/v2/surge_alert/', filters).json() |
| 179 | + |
| 180 | + response = _fetch(dict({ |
| 181 | + 'status': SurgeAlertStatus.OPEN |
| 182 | + })) |
| 183 | + |
| 184 | + self.assertEqual(response['count'], 1) |
| 185 | + self.assertEqual(response['results'][0]['status'], SurgeAlertStatus.OPEN) |
| 186 | + |
| 187 | + response = _fetch(dict({ |
| 188 | + 'status': SurgeAlertStatus.CLOSED |
| 189 | + })) |
| 190 | + self.assertEqual(response['count'], 1) |
| 191 | + self.assertEqual(response['results'][0]['status'], SurgeAlertStatus.CLOSED) |
| 192 | + |
| 193 | + response = _fetch(dict({ |
| 194 | + 'status': SurgeAlertStatus.STOOD_DOWN |
| 195 | + })) |
| 196 | + self.assertEqual(response['count'], 1) |
| 197 | + self.assertEqual(response['results'][0]['status'], SurgeAlertStatus.STOOD_DOWN) |
| 198 | + |
| 199 | + |
| 200 | +class SurgeAlertTestCase(APITestCase): |
| 201 | + def test_update_alert_status_command(self): |
| 202 | + region_1, region_2 = RegionFactory.create_batch(2) |
| 203 | + country_1 = CountryFactory.create(iso3='NPP', region=region_1) |
| 204 | + country_2 = CountryFactory.create(iso3='CTT', region=region_2) |
| 205 | + |
| 206 | + molnix_tag_1 = MolnixTagFactory.create(name='OP-6700') |
| 207 | + molnix_tag_2 = MolnixTagFactory.create(name='L-FRA') |
| 208 | + molnix_tag_3 = MolnixTagFactory.create(name='AMER') |
| 209 | + |
| 210 | + alert1 = SurgeAlertFactory.create( |
| 211 | + message='CEA Coordinator, Floods, Atlantis', |
| 212 | + country=country_1, |
| 213 | + molnix_tags=[molnix_tag_1, molnix_tag_2], |
| 214 | + opens=timezone.now() - timedelta(days=2), |
| 215 | + closes=timezone.now() + timedelta(seconds=5) |
| 216 | + ) |
| 217 | + alert2 = SurgeAlertFactory.create( |
| 218 | + message='WASH Coordinator, Earthquake, Neptunus', |
| 219 | + country=country_2, |
| 220 | + molnix_tags=[molnix_tag_1, molnix_tag_3], |
| 221 | + opens=timezone.now() - timedelta(days=2), |
| 222 | + closes=timezone.now() - timedelta(days=1) |
| 223 | + ) |
| 224 | + self.assertEqual(alert1.status, SurgeAlertStatus.OPEN) |
| 225 | + self.assertEqual(alert2.status, SurgeAlertStatus.CLOSED) |
| 226 | + |
| 227 | + with patch('django.utils.timezone.now') as mock_now: |
| 228 | + mock_now.return_value = datetime.now() + timedelta(days=1) |
| 229 | + call_command('update_surge_alert_status') |
| 230 | + |
| 231 | + alert1.refresh_from_db() |
| 232 | + alert2.refresh_from_db() |
| 233 | + |
| 234 | + self.assertEqual(alert1.status, SurgeAlertStatus.CLOSED) |
| 235 | + self.assertEqual(alert2.status, SurgeAlertStatus.CLOSED) |
0 commit comments