tests.py 6.46 KB
from django.test import TestCase
from common.RequestBuilder import RequestBuilder
from common.models import *
from django.contrib.auth.models import User
from django.utils import timezone

from utils.Logger import *
log = setupLogger("common", "common")

class RequestBuilderTests(TestCase):

    fixtures = ['tests/common_test_TZ.json']

    def setUp(self):
        '''
            Creates the base for the tests : user, scientific program, etc
        '''

        country = Country.objects.create(name="France")
        usr_lvl = UserLevel.objects.create(name="default")
        self.pyusr = PyrosUser.objects.create(username="toto", country=country, user_level=usr_lvl, quota=1111)
        self.sp = ScientificProgram.objects.create(name="default")

    def test_full_creation(self):
        '''
            Goal : Create a full request with sequences, albums & plans, and check if they are in the DB
        '''
        request_builder = RequestBuilder()
        request_builder.start_new_request(self.pyusr, self.sp, False)

        # seq1
        seq1 = request_builder.add_sequence(1, 0, 10, name="seq1")
        alb11 = request_builder.add_album(seq1, Detector.NIR, name="alb11")
        request_builder.add_plan(
            alb11, Filter.NIR_FILTER_1, 120, 5, name="plan111")
        alb12 = request_builder.add_album(seq1, Detector.VIS, name="alb12")
        request_builder.add_plan(
            alb12, Filter.VIS_FILTER_1, 180, 1, name="plan121")

        # seq2
        seq2 = request_builder.add_sequence(1, 0, 10, name="seq2")
        alb21 = request_builder.add_album(seq2, Detector.NIR, name="alb21")
        request_builder.add_plan(
            alb21, Filter.NIR_FILTER_2, 60, 3, name="plan211")

        request_builder.validate_request()

        # Check content in DB :

        req = Request.objects.get()
        seq1 = Sequence.objects.get(name="seq1")
        seq2 = Sequence.objects.get(name="seq2")
        albums = Album.objects.all()

        self.assertEqual(len(req.sequences.all()), 2, "There should be 2 sequences")
        self.assertEqual(seq1.albums.count(), 2, "There should be 2 albums in seq1")
        self.assertEqual(seq2.albums.count(), 1, "There should be 1 album in seq2")
        self.assertEqual(Plan.objects.count(), 3, "There should be 3 plans")
        self.assertEqual(len(albums), 3, "There should be 3 albums")
        for album in albums:
            self.assertEqual(album.plans.count(), 1, "There should be 1 plan in each album")


class CountryTests(TestCase):

    def test_creation(self):
        Country.objects.create(name="France", desc="Test", quota=1)
        france = Country.objects.get(name="France")
        self.assertEqual(france.name, "France")
        self.assertEqual(france.desc, "Test")
        self.assertEqual(france.quota, 1)
        france.quota = -1
        france.delete()
        france.save()
        Country.objects.create(name="Mexique")
        countries = Country.objects.all()
        self.assertEqual(countries.count(), 2)
        countries[0].name = "Toto"
        countries[0].save()


class DeviceTests(TestCase):

    def test_creation(self):
        countries = Country.objects.all()
        self.assertEqual(countries.count(), 0, "perdu !")


class RequestTests(TestCase):

    def setUp(self):
        strat1 = StrategyObs.objects.create(name="strat1")
        france = Country.objects.create(name="France")
        admin = UserLevel.objects.create(name="Admin")
        haribo = PyrosUser.objects.create(username="Haribo",
            country=france, user_level=admin)
        sp1 = ScientificProgram.objects.create(name="sp1")
        req1 = Request.objects.create(
            name="req1", pyros_user=haribo, scientific_program=sp1)
        alert = Alert(strategyobs=strat1, request_id=req1)
        alert.__dict__.update(req1.__dict__)
        alert.save()
        log.info(alert.__dict__)

        sched = Schedule.objects.create()
        seq1 = Sequence.objects.create(
            name="seq1", request=req1)

        tel = Telescope.objects.create(name="telescope")
        det = Detector.objects.create(name="detector", telescope=tel)
        alb1 = Album.objects.create(name="alb1", sequence=seq1, detector=det)

        fw = FilterWheel.objects.create(name="fw")

        fil = Filter.objects.create(name="filter", filter_wheel=fw)
        plan1 = Plan.objects.create(name="plan1", album=alb1, filter=fil)
        img1 = Image.objects.create(name="img1", plan=plan1)
        img2 = Image.objects.create(name="img2", plan=plan1)

    def test_request_access(self):
        alert = Alert.objects.get()
        self.assertEqual(alert.request.name, "req1")

        req1 = Request.objects.get(name="req1")
        req1.name = "reqtiti"
        req1.save()
        # j'ai saved req1, pourtant alert1.request.name est toujours le même
        self.assertEqual(alert.request.name, "req1")

        alert = Alert.objects.get()
        # j'ai refait un get de mon alert, donc c'est mis à jour
        self.assertEqual(alert.request.name, "reqtiti")

        alert.name = "reqtoto"
        alert.save()
        self.assertEqual(req1.name, "reqtiti")
        self.assertEqual(alert.request.name, "reqtoto")

        req1 = Request.objects.get()
        self.assertEqual(req1.name, "reqtoto")

        alert.request.save()
        req1 = Request.objects.get()
        self.assertEqual(req1.name, "reqtoto")

    def test_reinit_base(self):
        req1 = Request.objects.get()
        self.assertEqual(req1.name, "req1")

    def test_full_request(self):
        req1 = Request.objects.get()
        self.assertEqual(req1.sequences.count(), 1)
        albums = req1.sequences.all()[0].albums
        self.assertEqual(albums.count(), 1)
        images = albums.all()[0].plans.all()[0].images
        self.assertEqual(images.count(), 2)
        img1 = images.get(name="img1")
        img1.name = "img1.1"
        img11 = req1.sequences.get().albums.get().plans.get().images.get(
            name="img1")  # j'ai toujours pas sauvegardé mon image
        img1.save()
        img11 = req1.sequences.get().albums.get().plans.get().images.get(
            name="img1.1")  # j'ai sauvegardé mon image

        req1 = Request.objects.get()
        img1 = req1.sequences.get().albums.get().plans.get().images.get(
            name="img1.1")

        img11 = Image.objects.get(name="img1.1")
        img11.name = "img1.2"
        img11.save()

        self.assertEqual(img1.name, "img1.1")  # img1 et img11 sont différents
        img1 = req1.sequences.get().albums.get().plans.get().images.get(
            name="img1.2")