示例#1
0
    def test_submit(self):
        """ Verify that rollover submit works:
      New draft is created for the selected giving_project_grant
      User is redirected to edit draft """

        # create giving_project_grant and report
        giving_project_grant = factories.GivingProjectGrant(
            projectapp__application__organization=self.org)
        report = factories.GranteeReport(
            giving_project_grant=giving_project_grant)
        # create 2nd giving_project_grant without report
        giving_project_grant2 = factories.GivingProjectGrant(
            projectapp__application__organization=self.org)

        self.assertFalse(
            models.GranteeReportDraft.objects.filter(
                giving_project_grant=giving_project_grant2).exists())

        post_data = {
            'report': report.pk,
            'giving_project_grant': giving_project_grant2.pk
        }

        res = self.client.post(self.url, post_data)

        self.assertEqual(res.status_code, 302)
        self.assertTrue(
            res.url.endswith(_get_report_url(giving_project_grant2.pk)))
        self.assertTrue(
            models.GranteeReportDraft.objects.filter(
                giving_project_grant=giving_project_grant2).exists())
示例#2
0
    def test_second_report_reminder(self):
        """ Verify that reminder email is sent if second grantee report due"""

        today = timezone.now().date()

        giving_project_grant = factories.GivingProjectGrant(
            first_report_due=(today - timedelta(days=97)),
            second_report_due=(today + timedelta(days=7)),
        )

        self.assertEqual(giving_project_grant.next_report_due(),
                         giving_project_grant.first_report_due)

        # submit first report
        report = factories.GranteeReport(
            giving_project_grant=giving_project_grant)

        # verify that second report is due in 7 days
        self.assertEqual(giving_project_grant.next_report_due(),
                         today + timedelta(days=7))

        # verify that email is sent
        self.assert_length(mail.outbox, 0)
        res = self.client.get(self.url)
        self.assertEqual(res.status_code, 200)
        self.assert_length(mail.outbox, 1)
示例#3
0
    def test_start_second_report(self):
        giving_project_grant = factories.GivingProjectGrant(
            projectapp__application__organization=self.org, second_amount=8000)
        report = factories.GranteeReport(
            giving_project_grant=giving_project_grant)

        self.assertFalse(
            models.GranteeReportDraft.objects.filter(
                giving_project_grant=giving_project_grant).exists())

        res = self.client.get(_get_report_url(giving_project_grant.pk))

        self.assertTemplateUsed(res, 'grants/grantee_report_form.html')
        expected_title = 'Grantee Report for {:%b %d, %Y} - {:%b %d, %Y}'.format(
            giving_project_grant.first_report_due,
            giving_project_grant.first_report_due.replace(
                year=giving_project_grant.first_report_due.year + 1))
        self.assertContains(res, expected_title)

        application = giving_project_grant.projectapp.application
        self.assertEqual(res.context['form']['website'].value(),
                         application.website)
        self.assert_count(
            models.GranteeReportDraft.objects.filter(
                giving_project_grant=giving_project_grant), 1)
示例#4
0
 def test_home_link(self):
     giving_project_grant = factories.GivingProjectGrant(
         projectapp__application__organization=self.org,
         amount=5000,
         agreement_mailed=timezone.now() - timedelta(days=200),
         first_report_due=timezone.now() + timedelta(days=9))
     res = self.client.get(self.url)
     self._assert_link(res, giving_project_grant)
示例#5
0
 def test_late_home_link(self):
     """ Link to report is shown even if due date has passed """
     giving_project_grant = factories.GivingProjectGrant(
         projectapp__application__organization=self.org,
         amount=8000,
         first_report_due=timezone.now() - timedelta(days=20))
     res = self.client.get(self.url)
     self._assert_link(res, giving_project_grant)
示例#6
0
 def test_home_link_without_agreement(self):
     """ Link to report is shown even if agreement hasn't been mailed
   (YER due date used to be based on agreement_mailed) """
     award = factories.GivingProjectGrant(
         projectapp__application__organization=self.org,
         amount=5000,
         first_yer_due=timezone.now() + timedelta(days=90))
     res = self.client.get(self.url)
     self._assert_link(res, award)
示例#7
0
    def test_display_form(self):
        """ Verify display of form when there is a valid rollover option """

        # create award and YER
        award = factories.GivingProjectGrant(
            projectapp__application__organization=self.org)
        factories.YearEndReport(award=award)

        # create 2nd award without YER
        award = factories.GivingProjectGrant(
            projectapp__application__organization=self.org)

        res = self.client.get(self.url, follow=True)

        self.assertEqual(res.status_code, 200)
        self.assertTemplateUsed(res, 'grants/yer_rollover.html')
        self.assertContains(res, 'option value', count=4)
        self.assertContains(res, 'This form lets you')
示例#8
0
    def test_display_form(self):
        """ Verify display of form when there is a valid rollover option """

        # create giving_project_grant and report
        giving_project_grant = factories.GivingProjectGrant(
            projectapp__application__organization=self.org)
        factories.GranteeReport(giving_project_grant=giving_project_grant)

        # create 2nd giving_project_grant without report
        giving_project_grant = factories.GivingProjectGrant(
            projectapp__application__organization=self.org)

        res = self.client.get(self.url, follow=True)

        self.assertEqual(res.status_code, 200)
        self.assertTemplateUsed(res, 'grants/report_rollover.html')
        self.assertContains(res, 'option value', count=4)
        self.assertContains(res, 'This form lets you')
示例#9
0
    def test_early(self):
        """ org has an award, but agreement has not been mailed. verify not shown """
        factories.GivingProjectGrant(
            projectapp__application__organization=self.org,
            agreement_mailed=None)

        response = self.client.get(self.url)

        self.assertTemplateUsed(response, self.template)
        self.assertNotContains(response, 'Agreement mailed')
示例#10
0
    def test_sent(self):
        today = timezone.now()
        factories.GivingProjectGrant(
            projectapp__application__organization=self.org,
            agreement_mailed=today - timedelta(days=1),
            first_yer_due=today + timedelta(weeks=52))

        response = self.client.get(self.url)

        self.assertTemplateUsed(response, self.template)
        self.assertContains(response, 'Agreement mailed')
示例#11
0
    def test_display_no_reports(self):
        """ Verify error msg, no form if org has grant(s) but no reports """

        factories.GivingProjectGrant(
            projectapp__application__organization=self.org)

        res = self.client.get(self.url, follow=True)
        self.assertEqual(res.status_code, 200)
        self.assertTemplateUsed(res, 'grants/report_rollover.html')
        self.assertEqual(res.context['error_msg'],
                         'You don\'t have any submitted reports to copy.')
示例#12
0
    def test_display_second_yr_missing(self):
        """ Verify form if org has completed one but not both reports for their grant """
        giving_project_grant = factories.GivingProjectGrant(
            projectapp__application__organization=self.org, second_amount=8000)
        factories.GranteeReport(giving_project_grant=giving_project_grant)

        res = self.client.get(self.url, follow=True)
        self.assertEqual(res.status_code, 200)
        self.assertTemplateUsed(res, 'grants/report_rollover.html')
        self.assertContains(res, 'option value', count=4)
        self.assertContains(res, 'This form lets you')
示例#13
0
 def test_valid(self):
   award = factories.GivingProjectGrant()
   report = factories.GranteeReport(giving_project_grant=award)
   cycle_report_question = models.CycleReportQuestion.objects.filter(
     grant_cycle=award.projectapp.application.grant_cycle).first()
   answer = models.ReportAnswer(
     cycle_report_question=cycle_report_question,
     grantee_report=report,
     text='Here is my answer'
   )
   self.assertEqual(answer.get_question_text(), cycle_report_question.report_question.text)
示例#14
0
    def test_two_months_prior(self):
        """ Verify reminder is not sent 2 months before report is due """

        # create giving_project_grant where report is due in 60 days
        giving_project_grant = factories.GivingProjectGrant(
            first_report_due=timezone.now().date() + timedelta(days=60))

        # verify that email is not sent
        self.assert_length(mail.outbox, 0)
        res = self.client.get(self.url)
        self.assertEqual(res.status_code, 200)
        self.assert_length(mail.outbox, 0)
示例#15
0
    def test_first_email(self):
        """ Verify that reminder email gets sent 30 days prior to due date """

        # create award where yer is due in 30 days
        award = factories.GivingProjectGrant(
            first_yer_due=timezone.now().date() + timedelta(days=30))

        # verify that email is not sent
        self.assert_length(mail.outbox, 0)
        res = self.client.get(self.url)
        self.assertEqual(res.status_code, 200)
        self.assert_length(mail.outbox, 1)
示例#16
0
    def test_second_email(self):
        """ Verify that a reminder email goes out 7 days prior to due date """

        # create giving_project_grant where report is due in 7 days
        giving_project_grant = factories.GivingProjectGrant(
            first_report_due=timezone.now().date() + timedelta(days=7))

        # verify that email is sent
        self.assert_length(mail.outbox, 0)
        res = self.client.get(self.url)
        self.assertEqual(res.status_code, 200)
        self.assert_length(mail.outbox, 1)
示例#17
0
    def test_15_days_prior(self):
        """ Verify that no email is sent 15 days prior to due date """

        # create giving_project_grant where report is due in 15 days
        giving_project_grant = factories.GivingProjectGrant(
            first_report_due=timezone.now().date() + timedelta(days=15))

        # verify that email is not sent
        self.assert_length(mail.outbox, 0)
        res = self.client.get(self.url)
        self.assertEqual(res.status_code, 200)
        self.assert_length(mail.outbox, 0)
示例#18
0
    def test_display_all_reports_done(self):
        """ Verify error msg, no form if org has reports for all grants """
        giving_project_grant = factories.GivingProjectGrant(
            projectapp__application__organization=self.org)
        factories.GranteeReport(giving_project_grant=giving_project_grant)

        res = self.client.get(self.url, follow=True)
        self.assertEqual(res.status_code, 200)
        self.assertTemplateUsed(res, 'grants/report_rollover.html')
        self.assertRegexpMatches(
            res.context['error_msg'],
            'You have a submitted or draft year-end report for all of your grants'
        )
示例#19
0
    def test_submit(self):
        """ Verify that rollover submit works:
      New draft is created for the selected award
      User is redirected to edit draft """

        # create award and YER
        award = factories.GivingProjectGrant(
            projectapp__application__organization=self.org)
        report = factories.YearEndReport(award=award)
        # create 2nd award without YER
        award2 = factories.GivingProjectGrant(
            projectapp__application__organization=self.org)

        self.assertFalse(models.YERDraft.objects.filter(award=award2).exists())

        post_data = {'report': report.pk, 'award': award2.pk}

        res = self.client.post(self.url, post_data)

        self.assertEqual(res.status_code, 302)
        self.assertTrue(res.url.endswith(_get_yer_url(award2.pk)))
        self.assertTrue(models.YERDraft.objects.filter(award=award2).exists())
示例#20
0
    def test_second_home_link(self):
        # make award be two-year
        award = factories.GivingProjectGrant(
            projectapp__application__organization=self.org,
            amount=8000,
            second_amount=4000,
            first_yer_due=timezone.now() - timedelta(days=20))
        # submit first YER
        first_yer = factories.YearEndReport(award=award)

        res = self.client.get(self.url)

        self._assert_link(res, award)
        self.assertContains(res, 'Year end report</a> submitted', count=1)
示例#21
0
    def test_second_home_link(self):
        # make giving_project_grant be two-year
        giving_project_grant = factories.GivingProjectGrant(
            projectapp__application__organization=self.org,
            amount=8000,
            second_amount=4000,
            first_report_due=timezone.now() - timedelta(days=20),
            second_report_due=timezone.now() + timedelta(days=15))
        # submit first report
        first_report = factories.GranteeReport(
            giving_project_grant=giving_project_grant)

        res = self.client.get(self.url)

        self._assert_link(res, giving_project_grant)
        self.assertContains(res, 'Grantee report</a> submitted', count=1)
示例#22
0
    def test_yer_complete(self):
        """ Verify that an email is not sent if a year-end report has been completed """

        # create award where yer is due in 7 days, with YER completed
        award = factories.GivingProjectGrant(
            first_yer_due=timezone.now().date() + timedelta(days=7))
        yer = factories.YearEndReport(award=award)

        # verify that no more are due
        self.assertEqual(award.next_yer_due(), None)

        # verify that email is not sent
        self.assert_length(mail.outbox, 0)
        res = self.client.get(self.url)
        self.assertEqual(res.status_code, 200)
        self.assert_length(mail.outbox, 0)
示例#23
0
    def test_two_completed(self):
        # two year award with both YER submitted
        award = factories.GivingProjectGrant(
            projectapp__application__organization=self.org,
            amount=8000,
            second_amount=4000,
            first_yer_due=timezone.now() - timedelta(days=200))
        factories.YearEndReport(award=award)
        factories.YearEndReport(award=award)

        res = self.client.get(self.url)

        self.assertEqual(res.status_code, 200)
        self.assertTemplateUsed('grants/org_home.html')
        self.assertContains(res, 'Year end report</a> submitted', count=2)
        self.assertNotContains(res,
                               '<a href="{}>'.format(_get_yer_url(award.pk)))
示例#24
0
    def test_report_complete(self):
        """ Verify that an email is not sent if a year-end report has been completed """

        # create giving_project_grant where report is due in 7 days, with report completed
        giving_project_grant = factories.GivingProjectGrant(
            first_report_due=timezone.now().date() + timedelta(days=7))
        report = factories.GranteeReport(
            giving_project_grant=giving_project_grant)

        # verify that no more are due
        self.assertEqual(giving_project_grant.next_report_due(), None)

        # verify that email is not sent
        self.assert_length(mail.outbox, 0)
        res = self.client.get(self.url)
        self.assertEqual(res.status_code, 200)
        self.assert_length(mail.outbox, 0)
示例#25
0
    def test_two_completed(self):
        # two year giving_project_grant with both report submitted
        giving_project_grant = factories.GivingProjectGrant(
            projectapp__application__organization=self.org,
            amount=8000,
            second_amount=4000,
            first_report_due=timezone.now() - timedelta(days=200))
        factories.GranteeReport(giving_project_grant=giving_project_grant)
        factories.GranteeReport(giving_project_grant=giving_project_grant)

        res = self.client.get(self.url)

        self.assertEqual(res.status_code, 200)
        self.assertTemplateUsed('grants/org_home.html')
        self.assertContains(res, 'Grantee report</a> submitted', count=2)
        self.assertNotContains(
            res,
            '<a href="{}>'.format(_get_report_url(giving_project_grant.pk)))
示例#26
0
    def test_second_yer_complete(self):
        """ Verify that reminder email is not sent if second year end report completed"""

        today = timezone.now()
        award = factories.GivingProjectGrant(
            first_yer_due=(today + timedelta(days=7)).replace(year=today.year -
                                                              1),
            second_amount=9000)
        factories.YearEndReport(award=award)
        factories.YearEndReport(award=award)

        self.assertEqual(award.next_yer_due(), None)

        # verify that email is not sent
        self.assert_length(mail.outbox, 0)
        res = self.client.get(self.url)
        self.assertEqual(res.status_code, 200)
        self.assert_length(mail.outbox, 0)
示例#27
0
    def test_second_report_complete(self):
        """ Verify that reminder email is not sent if second grantee report completed"""

        today = timezone.now()
        giving_project_grant = factories.GivingProjectGrant(
            first_report_due=(today +
                              timedelta(days=7)).replace(year=today.year - 1),
            second_amount=9000)
        factories.GranteeReport(giving_project_grant=giving_project_grant)
        factories.GranteeReport(giving_project_grant=giving_project_grant)

        self.assertEqual(giving_project_grant.next_report_due(), None)

        # verify that email is not sent
        self.assert_length(mail.outbox, 0)
        res = self.client.get(self.url)
        self.assertEqual(res.status_code, 200)
        self.assert_length(mail.outbox, 0)
示例#28
0
    def test_start_second_report(self):
        award = factories.GivingProjectGrant(
            projectapp__application__organization=self.org, second_amount=8000)
        yer = factories.YearEndReport(award=award)

        self.assertFalse(models.YERDraft.objects.filter(award=award).exists())

        res = self.client.get(_get_yer_url(award.pk))

        self.assertTemplateUsed(res, 'grants/yer_form.html')
        expected_title = 'Year-end Report for {:%b %d, %Y} - {:%b %d, %Y}'.format(
            award.first_yer_due,
            award.first_yer_due.replace(year=award.first_yer_due.year + 1))
        self.assertContains(res, expected_title)

        application = award.projectapp.application
        self.assertEqual(res.context['form']['website'].value(),
                         application.website)
        self.assert_count(models.YERDraft.objects.filter(award=award), 1)
示例#29
0
    def test_second_yer_reminder(self):
        """ Verify that reminder email is sent if second year end report due"""

        today = timezone.now().date()

        award = factories.GivingProjectGrant(
            first_yer_due=(today + timedelta(days=7)).replace(year=today.year -
                                                              1),
            second_amount=9000)

        self.assertEqual(award.next_yer_due(), award.first_yer_due)

        # submit first YER
        yer = factories.YearEndReport(award=award)

        # verify that second yer is due in 7 days
        self.assertEqual(award.next_yer_due(), today + timedelta(days=7))

        # verify that email is sent
        self.assert_length(mail.outbox, 0)
        res = self.client.get(self.url)
        self.assertEqual(res.status_code, 200)
        self.assert_length(mail.outbox, 1)
示例#30
0
 def setUp(self):
     super(GrantReading, self).setUp()
     award = factories.GivingProjectGrant(first_yer_due=timezone.now())
     yer = factories.YearEndReport(award=award)
     self.yer_id = yer.pk