Blame view

src/alert_manager/tests.py 4.47 KB
3df2d31a   haribo   #3430 : dates are...
1
from django.test import TestCase
fafae58f   haribo   Cleaned directory
2
3
4
5
import os
import shutil
import time
import alert_manager.tasks
3df2d31a   haribo   #3430 : dates are...
6

fafae58f   haribo   Cleaned directory
7
8
from django.conf import settings

ddf59dd4   haribo   Remaniement :
9
from common.models import *
fafae58f   haribo   Cleaned directory
10

d84050e6   haribo   Date: 20/07/2016
11
TEST_FILE = "unittest_voevent.xml"
fafae58f   haribo   Cleaned directory
12
13
14
15
16
17

TEST_FILE_PATH = os.path.join(alert_manager.tasks.VOEVENTS_PATH, TEST_FILE)

VOEVENTS_TO_SEND_PATH = "alert_manager/events_to_send"


fd99569d   haribo   Date: 22/06/2016
18
19
class TestStrategyChange(TestCase):

ddf59dd4   haribo   Remaniement :
20
    fixtures = ['tests/alert_mgr_test.json']
fd99569d   haribo   Date: 22/06/2016
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

    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):
d84050e6   haribo   Date: 20/07/2016
62
63
64
65
    '''
        IMPORTANT : As soon as you do a DB request in a test, the test DB will no longer be synchronized with the DB used by celery
                    I have no idea why (Paul), but any call to the DB must be done in setup or after all celery actions are finished
    '''
fafae58f   haribo   Cleaned directory
66
67

    def setup(self):
d84050e6   haribo   Date: 20/07/2016
68
69
70
71
72
73
        default_strat = StrategyObs.objects.get(is_default=True)
        default_strat.is_default = False
        default_strat.save()
        test_strat = StrategyObs.objects.get(name="strat_unittest")
        test_strat.is_default = True
        test_strat.save()
fafae58f   haribo   Cleaned directory
74
75

    def test_alert_reception(self):
94082e77   haribo   Date: 03/06/2016
76
77
78
79
80
81
        '''
            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
        '''

fafae58f   haribo   Cleaned directory
82
83
84
85
86
87
88
        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)
d84050e6   haribo   Date: 20/07/2016
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104

        self.assertEqual(Alert.objects.count(), 1)
        alert = Alert.objects.all()[0]
        self.assertEqual(alert.author, "ivo://nasa.gsfc.tan/gcn")
        self.assertEqual(alert.burst_ra, 74.7412)
        self.assertEqual(alert.burst_dec, 25.3137)
        self.assertEqual(alert.trig_id, 532871)
        self.assertEqual(alert.editor, "61")
        self.assertEqual(alert.pkt_ser_num, 1)

        self.assertEqual(Request.objects.count(), 1)
        self.assertEqual(Sequence.objects.count(), 2)
        self.assertEqual(Album.objects.count(), 3)
        self.assertEqual(Plan.objects.count(), 6)


fafae58f   haribo   Cleaned directory
105
106

    def test_basic(self):
94082e77   haribo   Date: 03/06/2016
107
108
109
110
        '''
            Used to test scripts/celery_test.sh
            Only work if the initial_fixture is on the prod DB (an only it)
        '''
fafae58f   haribo   Cleaned directory
111
112
        Country.objects.create(name="TEEEEST")
        self.assertEqual(Country.objects.count(), 2, "should be 2 countries")