from django.test import TestCase import os import shutil import time import alert_manager.tasks from django.conf import settings from pyrosapp.models import * TEST_FILE = "test_voevent.xml" TEST_FILE_PATH = os.path.join(alert_manager.tasks.VOEVENTS_PATH, TEST_FILE) VOEVENTS_TO_SEND_PATH = "alert_manager/events_to_send" class TestStrategyChange(TestCase): fixtures = ['alert_mgr_test.json'] def setUp(self): ''' Creates the base for the tests ''' self.alert = Alert.objects.get() self.strat1 = Alert.objects.get().strategyobs self.strat2 = StrategyObs.objects.exclude(id=self.strat1.id)[0] self.alert.strategyobs = self.strat1 self.alert.save() def test_change_inexistant_strat(self): self.client.login(username="test@test.test", password="test") path = "/alert_manager/change_obs_strategy_validate/" + str(self.alert.id) response = self.client.post(path, {"strategy_choice": 42}) self.assertTrue("error" in response.context.keys(), "There should be an error of non existant strategy") def test_change_inexistant_alert(self): self.client.login(username="test@test.test", password="test") path = "/alert_manager/change_obs_strategy_validate/" + str(self.alert.id + 1) response = self.client.post(path, {"strategy_choice": self.strat2.id}) self.assertTrue("error" in response.context.keys(), "There should be an error of non existant alert") def test_change_same_strat(self): self.client.login(username="test@test.test", password="test") path = "/alert_manager/change_obs_strategy_validate/" + str(self.alert.id) response = self.client.post(path, {"strategy_choice": self.strat1.id}) self.assertTrue("error" in response.context.keys(), "There should be an error of changing to same strategy") def test_change_all_working(self): self.client.login(username="test@test.test", password="test") path = "/alert_manager/change_obs_strategy_validate/" + str(self.alert.id) response = self.client.post(path, {"strategy_choice": self.strat2.id}) self.assertFalse("error" in response.context.keys(), "There shouldn't be an error") self.assertEqual(Alert.objects.count(), 2, "There should be 2 alerts after the strategy change") new_alert = Alert.objects.exclude(id=self.alert.id)[0] self.assertEqual(new_alert.strategyobs.id, self.strat2.id, "The new alert should have the 'strat2' strategy") class AlertListenerTestsCelery(TestCase): def setup(self): pass def test_alert_reception(self): ''' Must be launched with scripts/celery_test.sh Copy a VOEvent file in the events_received directory to start the workflow Tests if the alert and children are well created ''' if os.path.isfile(TEST_FILE_PATH): os.remove(TEST_FILE_PATH) time.sleep(3) shutil.copyfile(os.path.join(VOEVENTS_TO_SEND_PATH, TEST_FILE), TEST_FILE_PATH) time.sleep(3) self.assertEqual( Alert.objects.count(), 1, "There should be 1 and only 1 alert") self.assertEqual( Request.objects.count(), 1, "There should be 1 and only 1 request") self.assertEqual( Sequence.objects.count(), 2, "There should be 2 and only 2 sequences") self.assertEqual( Album.objects.count(), 3, "There should be 3 and only 3 albums") self.assertEqual( Plan.objects.count(), 3, "There should be 3 and only 3 plans") def test_basic(self): ''' Used to test scripts/celery_test.sh Only work if the initial_fixture is on the prod DB (an only it) ''' Country.objects.create(name="TEEEEST") self.assertEqual(Country.objects.count(), 2, "should be 2 countries")