示例#1
0
  def test_start_conflicting_drafts(self):
    a = factories.Organization()
    b = factories.Organization()

    # create drafts for same cycle
    draft_a = factories.DraftGrantApplication(organization=a)
    draft_b = factories.DraftGrantApplication(organization=b,
                                              grant_cycle=draft_a.grant_cycle)

    post_data = {'action': 'merge', '_selected_action': [a.pk, b.pk]}
    res = self.client.post(self.admin_url, post_data, follow=True)

    self.assertEqual(res.status_code, 200)
    self.assertTemplateUsed(res, 'admin/change_list.html')
    self.assert_message(res, r'same grant cycle. Cannot be automatically merged.$', regex=True)
示例#2
0
    def test_both(self):
        fake_now = timezone.now().replace(hour=0) + timedelta(days=1)
        rr_cycle = factories.GrantCycle(title='Rapid Response',
                                        open=fake_now - timedelta(weeks=2),
                                        close=fake_now - timedelta(minutes=4))
        s_cycle = factories.GrantCycle(title='Seed Grant',
                                       open=fake_now - timedelta(weeks=2),
                                       close=fake_now - timedelta(minutes=95))
        self.assert_count(models.GrantCycle.objects.all(), 2)

        for i in range(0, 4):
            factories.DraftGrantApplication(grant_cycle=s_cycle if i %
                                            2 else rr_cycle)

        logger.info = Mock()
        timezone.now = Mock(return_value=fake_now)
        res = self.client.get(self.url)
        self.assertEqual(res.status_code, 201)

        logger.info.assert_any_call('auto_create_cycles created %d new cycles',
                                    2)
        new_cycle_ids = (models.GrantCycle.objects.filter(
            close__gte=fake_now).values_list('id', flat=True))

        for draft in models.DraftGrantApplication.objects.all():
            self.assertIn(draft.grant_cycle_id, new_cycle_ids)

        for id in new_cycle_ids:
            self.assert_count(
                models.CycleNarrative.objects.filter(grant_cycle_id=id),
                len(gc.STANDARD_NARRATIVES))
        self.assert_length(mail.outbox, 1)
示例#3
0
    def test_draft_rollover(self):
        draft = factories.DraftGrantApplication(organization=self.org)
        target_cycle = factories.GrantCycle(status='open')

        response = self.client.post('/apply/copy', {
            'cycle': target_cycle.pk,
            'draft': draft.pk,
            'application': ''
        },
                                    follow=True)

        ids = {
            'organization_id': self.org.pk,
            'grant_cycle_id': target_cycle.pk
        }
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'grants/org_app.html')

        new_draft = DraftGrantApplication.objects.get(**ids)
        old_contents = json.loads(draft.contents)
        new_contents = json.loads(new_draft.contents)
        self.assertEqual(old_contents, new_contents)
        for field in GrantApplication.file_fields():
            if hasattr(draft, field):
                self.assertEqual(getattr(draft, field),
                                 getattr(new_draft, field))
示例#4
0
  def test_wrong_org(self):
    other_org = factories.Organization()
    draft = factories.DraftGrantApplication(organization=other_org)

    response = self.client.delete(self.url)
    self.assertEqual(response.status_code, 400)
    self.assertEqual(response.content, 'User does not have permission to delete this draft')
示例#5
0
    def test_long_alert_skip(self):
        now = timezone.now()
        cycle = factories.GrantCycle(close=now + timedelta(days=7, hours=12))
        draft = factories.DraftGrantApplication(grant_cycle=cycle, created=now)

        self.assert_length(mail.outbox, 0)
        self.client.get(reverse(cron.draft_app_warning))
        self.assert_length(mail.outbox, 0)
示例#6
0
    def test_valid(self):
        self.login_as_org()
        draft = factories.DraftGrantApplication(organization=self.org)

        response = self.client.post(self._get_url(draft), {})

        self.assertEqual(200, response.status_code)
        draft.refresh_from_db()
        self.assertEqual(draft.contents, '{}')
示例#7
0
  def test_post(self):
    """ Wrong http method - should have no effect """
    draft = factories.DraftGrantApplication(organization=self.org)

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

    self.assertEqual(response.status_code, 405)
    self.assertEqual(response.get('Allow'), 'DELETE')
    self.assert_count(models.DraftGrantApplication.objects.filter(pk=draft.pk), 1)
示例#8
0
    def test_short_alert(self):
        """ Cycle created now with cycle closing in 2.5 days """

        now = timezone.now()
        cycle = factories.GrantCycle(close=now + timedelta(days=2, hours=12))
        draft = factories.DraftGrantApplication(grant_cycle=cycle, created=now)

        self.assert_length(mail.outbox, 0)
        self.client.get(reverse(cron.draft_app_warning))
        self.assert_length(mail.outbox, 1)
示例#9
0
    def test_valid_delete(self):
        draft = factories.DraftGrantApplication(organization=self.org)

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

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.content, 'success')
        self.assert_count(
            models.DraftGrantApplication.objects.filter(organization=self.org),
            0)
示例#10
0
  def test_draft_exists(self):
    source_app = factories.GrantApplication()
    draft = factories.DraftGrantApplication(
      organization=source_app.organization, grant_cycle__status='open')
    res = self.client.post(
      reverse(views.admin_rollover, kwargs={'app_id': source_app.pk}),
      data={'cycle': draft.grant_cycle.pk}
    )

    self.assertEqual(res.status_code, 200)
    self.assertFalse(res.context['form'].is_valid())
    self.assert_count(GrantApplication.objects.filter(grant_cycle=draft.grant_cycle), 0)
示例#11
0
    def test_mult_budget(self):
        draft = factories.DraftGrantApplication(organization=self.org)
        files = [
            'funding_sources.docx', 'diversity.doc', 'budget1.docx',
            'budget2.txt', 'budget3.png', '', ''
        ]
        alter_draft_files(draft, files)

        res = self.client.post(_get_apply_url(draft.grant_cycle.pk),
                               follow=True)

        self.assertEqual(res.status_code, 200)
        self.assertTemplateUsed(res, 'grants/submitted.html')
        self.assert_count(
            DraftGrantApplication.objects.filter(organization=self.org), 0)
        app = GrantApplication.objects.get(organization=self.org,
                                           grant_cycle=draft.grant_cycle)
        self.assertEqual(app.budget1, files[2])
        self.assertEqual(app.budget2, files[3])
示例#12
0
    def test_valid(self):
        draft = factories.DraftGrantApplication()
        original = draft.budget3

        self.create_blob('fakeblobkey123',
                         filename='file.txt',
                         content_type='text',
                         content='filler')

        url = reverse(views.add_file,
                      kwargs={
                          'draft_type': 'apply',
                          'draft_id': draft.pk
                      })
        budget = SimpleUploadedFile("file.txt", "blob-key=fakeblobkey123")
        res = self.client.post(url, {'budget3': budget}, follow=True)

        self.assertEqual(res.status_code, 200)
        self.assertContains(res, 'file.txt')
        draft.refresh_from_db()
        self.assertEqual(draft.budget3.name, 'fakeblobkey123/file.txt')
        self.assertNotEqual(draft.budget3, original)
示例#13
0
    def test_already_created(self):
        fake_now = timezone.now().replace(hour=0) + timedelta(days=1)
        timezone.now = Mock(return_value=fake_now)
        logger.info = Mock()

        cycle = factories.GrantCycle(title='Rapid Response',
                                     open=fake_now - timedelta(weeks=2),
                                     close=fake_now - timedelta(hours=1))
        factories.DraftGrantApplication(grant_cycle=cycle)
        cycle = factories.GrantCycle(title='Rapid Response',
                                     open=fake_now - timedelta(minutes=5),
                                     close=fake_now + timedelta(days=12))

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

        self.assertEqual(res.status_code, 200)
        self.assertEqual(logger.info.call_count, 2)
        logger.info.assert_any_call(
            'auto_create_cycles skipping %s cycle; next one exists',
            'Rapid Response')
        logger.info.assert_any_call(
            'auto_create_cycles did nothing; new cycles already existed')
        self.assert_count(models.GrantCycle.objects.all(), 2)
        self.assert_length(mail.outbox, 0)
示例#14
0
 def test_not_logged_in(self):
     draft = factories.DraftGrantApplication()
     response = self.client.post(self._get_url(draft),
                                 {'mission': 'Something'})
     self.assertEqual(401, response.status_code)
示例#15
0
 def setUp(self):
     self.login_as_org()
     self.draft = factories.DraftGrantApplication()