Esempio n. 1
0
    def test_passesInclusionCheck(self):
        """
Examples: (assume today is March 21, 2013)
Grade A, last observed date January 1, 2012
     ignore since more than one year ago

Grade B, last observed date January 1, 2012
     ignore since more than one year ago

Grade C, last observed date January 1, 2012
     ignore since more than one year ago

Grade N
      ignore since never approved

Grade N*
      ignore since never approved

Grade W
      ignore since never approved

Grade A, last observed date June 1, 2012
      conflict possible

Grade B, last observed date June 1, 2012
      conflict possible

Grade C, last observed date June 1, 2012
      conflict possible

Grade A, last observed date is blank
      conflict possible

Grade B, last observed date is blank, project is open
      conflict possible

Grade C, last observed date is blank, project is open
      conflict possible

Grade B, last observed date is blank, project is complete/closed
      ignore - never observed

Grade C, last observed date is blank, project is complete/closed
      ignore - never observed
        """

        now = datetime(2013, 3, 21)
        sc = SourceConflicts(now = now)

        # create a new proposal w/ sessions and sources
        newP = createProposal() 
        newS = self.createSession(newP)
        newS.receivers.add(Receiver.objects.get(abbreviation = 'Q'))
        newS.receivers.add(Receiver.objects.get(abbreviation = '800'))
        newS.save()
        src1 = self.createSrc(newP) 
        src2 = self.createSrc(newP) 

        for g in ['N', 'N*', 'W']:
            newS.grade = SessionGrade.objects.get(grade = g)
            newS.save()
            self.assertEqual(False, sc.passesInclusionCheck(newP, now = now))

        
        # now see how it works for other grades; this depends on dss project:
        project = dss.Project.objects.order_by('pcode').all()[0]
        project.complete = False
        project.save()
        newP.dss_project = project
        newP.save()
        for g in ['A', 'B', 'C']:
            newS.grade = SessionGrade.objects.get(grade = g)
            newS.save()
            # clear the cache
            sc.includeProposals = {}
            self.assertEqual(True, sc.passesInclusionCheck(newP, now = now))

        project.complete = True
        project.save()
        for g in ['B', 'C']:
            newS.grade = SessionGrade.objects.get(grade = g)
            newS.save()
            # clear the cache
            sc.includeProposals = {}
            self.assertEqual(False, sc.passesInclusionCheck(newP, now = now))
        
        # now some tests using the last observed date.
        s = create_sesshun()
        s.project = newP.dss_project
        s.save()
        start = now - timedelta(days = 365 + 10) # more then a year ago
        dur = 1
        pa = dss.Period_Accounting(scheduled = dur)
        pa.save()
        state = dss.Period_State.objects.get(abbreviation = 'S')
        p = dss.Period(session = s
                  , start      = start
                  , duration   = dur
                  , state      = state
                  , accounting = pa
                  )
        p.save()        

        for g in ['A', 'B', 'C']:
            newS.grade = SessionGrade.objects.get(grade = g)
            newS.save()
            # clear the cache
            sc.includeProposals = {}
            self.assertEqual(False, sc.passesInclusionCheck(newP, now = now))

        start = now - timedelta(days = 365 - 10) # less then a year ago
        p.start = start
        p.save()

        for g in ['A', 'B', 'C']:
            newS.grade = SessionGrade.objects.get(grade = g)
            newS.save()
            # clear the cache
            sc.includeProposals = {}
            self.assertEqual(True, sc.passesInclusionCheck(newP, now = now))