def test_exportProposal(self): # add an author to test more code - make it the contact author = self.addAuthor(self.proposal) self.proposal.contact = author self.proposal.save() export = DssExport() project = export.exportProposal(self.proposal.pcode) self.assertEqual(self.proposal.pcode, project.pcode) a = project.allotments.all()[0] self.assertEqual(a.psc_time, self.session.allotment.allocated_time) self.assertTrue(project.investigator_set.filter( user__pst_id = self.proposal.pi.pst_person_id)[0].principal_investigator) # should be 2 investigators, and I'm not the principal self.assertEqual(2, len(project.investigator_set.all())) for i in project.investigator_set.all(): self.assertEqual(i.principal_investigator , i.user.last_name != 'Marganian' ) self.assertEqual(i.principal_contact , i.user.last_name == 'Marganian' )
def test_exportElectiveSession(self): self.genPeriods() ps = self.session.period_set.all().order_by('start') self.session.session_type = SessionType.objects.get(type = 'Elective') self.session.save() export = DssExport() project = export.exportProposal(self.proposal.pcode) dss_session = project.sesshun_set.all()[0] self.assertEqual(dss_session.session_type.type, 'elective') self.assertEqual(1, len(dss_session.elective_set.all())) self.assertEqual(len(ps), len(dss_session.elective_set.all()[0].periods.all())) self.assertEqual(len(ps), len(dss_session.period_set.all()))
def test_exportWindowedSession(self): self.genPeriods() ps = self.session.period_set.all().order_by('start') self.session.session_type = SessionType.objects.get(type = 'Windowed') self.session.save() export = DssExport() project = export.exportProposal(self.proposal.pcode) dss_session = project.sesshun_set.all()[0] self.assertEqual(dss_session.session_type.type, 'windowed') self.assertEqual(0, len(dss_session.elective_set.all())) self.assertEqual(len(ps), len(dss_session.window_set.all())) self.assertEqual(len(ps), len(dss_session.period_set.all())) self.assertEqual(dss_session.window_set.all()[0].windowrange_set.all()[0].duration , self.session.monitoring.window_size)
def test_exportFixedSession(self): self.genPeriods() self.session.session_type = SessionType.objects.get(type = 'Fixed') self.session.save() ps = self.session.period_set.all().order_by('start') export = DssExport() project = export.exportProposal(self.proposal.pcode) dss_session = project.sesshun_set.all()[0] self.assertEqual(dss_session.session_type.type, 'fixed') self.assertEqual(len(ps), len(dss_session.period_set.all())) expected_starts = [p.start for p in ps] self.assertEqual(expected_starts , [dp.start for dp in dss_session.period_set.all().order_by('start')])
def test_exportFlags(self): export = DssExport() s = self.proposal.session_set.all()[0] # set all the flags, and see how the transfer s.flags.thermal_night = True s.flags.optical_night = True s.flags.rfi_night = True s.flags.transit_flat = True s.flags.guaranteed = True s.flags.save() project = export.exportProposal(self.proposal.pcode) s = project.sesshun_set.all()[0] self.assertTrue(s.guaranteed()) # TBF self.assertTrue(s.transit()) # these two are mutually exclusive: self.assertEqual(False, s.RfiNight()) self.assertTrue(s.PtcsNight()) # Note: no 'optical night' in DSS # clean up and try it again s.delete() project.delete() # change the flags s = self.proposal.session_set.all()[0] s.flags.rfi_night = False s.flags.thermal_night = False s.flags.guaranteed = False s.flags.save() project = export.exportProposal(self.proposal.pcode) s = project.sesshun_set.all()[0] self.assertEqual(False, s.guaranteed()) # TBF self.assertTrue(s.transit()) # these two are mutually exclusive: self.assertEqual(False, s.RfiNight()) self.assertTrue(s.PtcsNight())
def test_withinProprietaryDate(self): s = self.proposal.session_set.all()[0] src0 = self.proposal.source_set.all()[0] tpcode = self.proposal.pcode # Need a DSS Project for this export = DssExport() project = export.exportProposal(tpcode) proposal = Proposal.objects.get(pcode = tpcode) period = dss.Period.objects.create(session = project.sesshun_set.all()[0] , start = datetime(2012, 6, 10) , duration = 8 , state = dss.Period_State.objects.get(name = 'Scheduled') ) # turn the crank sc = SourceConflicts() _, result = sc.withinProprietaryDate(proposal, now = datetime(2012, 6, 12)) self.assertTrue(result) _, result = sc.withinProprietaryDate(proposal, now = datetime(2013, 6, 12)) self.assertTrue(not result)
def test_exportProposal2(self): # now make sure no allocated time keeps it from getting transferred s = self.proposal.session_set.all()[0] original_time = s.allotment.allocated_time s.allotment.allocated_time = 0.0 s.allotment.save() export = DssExport() project = export.exportProposal(self.proposal.pcode) # make sure it wasn't transferred self.assertEqual(self.proposal.pcode, project.pcode) self.assertEqual(len(self.proposal.session_set.all()) - 1 , len(project.sesshun_set.all())) # restore the allocated time, but make sure it has a failing grade s = self.proposal.session_set.all()[0] s.allotment.allocated_time = original_time s.allotment.save() original_grade = s.grade s.grade = SessionGrade.objects.get(grade = 'N*') s.save() export = DssExport() # we can't call exportProposal again, becasuse if the corresponding # DSS Project exists already, it will go ahead and use it; and deleting # Projects is a pain in the ass. Instead, just try to import the session. #project = export.exportProposal(self.proposal.pcode) export.exportSession(s, project) # make sure it still wasn't transferred - get them fresh from DB to be sure proposal = Proposal.objects.get(pcode = self.proposal.pcode) project = dss.Project.objects.get(pcode = project.pcode) self.assertEqual(len(proposal.session_set.all()) - 1 , len(project.sesshun_set.all())) # now restore the original grade, and we should see the session get exported s.grade = original_grade s.save() export.exportSession(s, project) # make sure it WAS transferred - get them fresh from DB to be sure proposal = Proposal.objects.get(pcode = self.proposal.pcode) project = dss.Project.objects.get(pcode = project.pcode) self.assertEqual(len(proposal.session_set.all()) , len(project.sesshun_set.all()))
from django.core.management import setup_environ import settings setup_environ(settings) from scheduler import models as dss from pht import models as pht from pht.tools.database import DssExport export = DssExport() for p in dss.Project.objects.filter(semester__semester = '12B').exclude(pcode__contains = 'TGBT'): print "Fixing", p.pcode for s in p.sesshun_set.all(): pht_s = pht.Session.objects.get(name = s.name) pht_s.dss_session = s pht_s.save() for pr in s.period_set.all(): pa = dss.Period_Accounting(scheduled = 0.0) pa.save() pr.accounting = pa pr.score = -1.0 pr.save() export.addPeriodReceivers(pr, [r.abbreviation for r in pht_s.receivers.all()]) print "done."