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())
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)
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)
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)
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)
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)
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')
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')
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')
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')
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.')
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')
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)
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)
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)
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)
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)
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' )
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())
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)
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)
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)
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)))
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)
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)))
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)
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)
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)
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)
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