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") institute = Institute.objects.get(name="CNRS") self.pyusr = PyrosUser.objects.create(username="toto", country=country, institute=institute) # (AKo) We need to assign UserLevel after PyrosUser creation, we can't associate directly from creation because it's a m2m relation UserLevel.objects.all()[0].pyros_users.add(self.pyusr) self.sp = ScientificProgram.objects.create(name="default",institute=institute) 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") institute = Institute.objects.create(name="CNRS",quota=999.0) haribo = PyrosUser.objects.create(username="Haribo", country=france,institute=institute) admin.pyros_users.add(haribo) sp1 = ScientificProgram.objects.create(name="sp1",institute=institute) 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")