Ejemplo n.º 1
0
class TestGetInterventionContext(BaseTenantTestCase):
    '''Exercise the tasks' helper function get_intervention_context()'''
    def setUp(self):
        super(TestGetInterventionContext, self).setUp()
        self.intervention = InterventionFactory()

    def test_simple_intervention(self):
        '''Exercise get_intervention_context() with a very simple intervention'''
        result = partners.tasks.get_intervention_context(self.intervention)

        self.assertIsInstance(result, dict)
        self.assertEqual(sorted(result.keys()),
                         sorted(['number', 'partner', 'start_date', 'url', 'unicef_focal_points']))
        self.assertEqual(result['number'], six.text_type(self.intervention))
        self.assertEqual(result['partner'], self.intervention.agreement.partner.name)
        self.assertEqual(result['start_date'], 'None')
        self.assertEqual(result['url'],
                         'https://{}/pmp/interventions/{}/details'.format(settings.HOST, self.intervention.id))
        self.assertEqual(result['unicef_focal_points'], [])

    def test_non_trivial_intervention(self):
        '''Exercise get_intervention_context() with an intervention that has some interesting detail'''
        focal_point_user = User.objects.all()[0]
        self.intervention.unicef_focal_points.add(focal_point_user)

        self.intervention.start = datetime.date(2017, 8, 1)
        self.intervention.save()

        result = partners.tasks.get_intervention_context(self.intervention)

        self.assertIsInstance(result, dict)
        self.assertEqual(sorted(result.keys()),
                         sorted(['number', 'partner', 'start_date', 'url', 'unicef_focal_points']))
        self.assertEqual(result['number'], six.text_type(self.intervention))
        self.assertEqual(result['partner'], self.intervention.agreement.partner.name)
        self.assertEqual(result['start_date'], '2017-08-01')
        self.assertEqual(result['url'],
                         'https://{}/pmp/interventions/{}/details'.format(settings.HOST, self.intervention.id))
        self.assertEqual(result['unicef_focal_points'], [focal_point_user.email])
Ejemplo n.º 2
0
    def test_update_intervention(self):
        """Ensure agreement update fails if intervention dates aren't appropriate.

        I don't think it's possible to supply interventions when creating via the serializer, so this only tests update.
        """
        agreement = AgreementFactory(agreement_type=Agreement.SSFA,
                                     partner=self.partner,
                                     status=Agreement.DRAFT,
                                     start=self.today - datetime.timedelta(days=5),
                                     end=self.today + datetime.timedelta(days=5),
                                     signed_by_unicef_date=None,
                                     signed_by_partner_date=None)
        intervention = InterventionFactory(agreement=agreement)

        # Start w/an invalid intervention.
        data = {
            "agreement": agreement,
            "intervention": intervention,
        }
        serializer = AgreementCreateUpdateSerializer()
        # If I don't set serializer.instance, the validator gets confused. I guess (?) this is ordinarily set by DRF
        # during an update?
        serializer.instance = agreement
        serializer.context['request'] = self.fake_request

        with self.assertRaises(serializers.ValidationError) as context_manager:
            serializer.validate(data=data)

        self.assertSimpleExceptionFundamentals(
            context_manager,
            "Start and end dates don't match the Document's start and end"
        )

        # Set start date and save again; it should still fail because end date isn't set.
        intervention.start = agreement.start
        intervention.save()

        with self.assertRaises(serializers.ValidationError) as context_manager:
            serializer.validate(data=data)

        self.assertSimpleExceptionFundamentals(
            context_manager,
            "Start and end dates don't match the Document's start and end"
        )

        # Set start date and save again; it should still fail because end date doesn't match agreement end date.
        intervention.end = agreement.end + datetime.timedelta(days=100)
        intervention.save()

        with self.assertRaises(serializers.ValidationError) as context_manager:
            serializer.validate(data=data)

        self.assertSimpleExceptionFundamentals(
            context_manager,
            "Start and end dates don't match the Document's start and end"
        )

        # Set start date and save again; it should now succeed.
        intervention.end = agreement.end
        intervention.save()

        # Should not raise an exception
        serializer.validate(data=data)