Skip to content
Snippets Groups Projects
Select Git revision
  • 9b7ca102a8ab823142ce5d4a95f2c2e4aa8f3543
  • main default protected
  • ardc-deploy20250618-hotfixes
  • ardc-main
  • ardc-379-improve-tags-filter
  • 379-improve-tags-filter
  • 103-improve-print-style
  • upgrade
  • ardc-334-overdue-reports
  • try-ci
  • ardc-389-de-regex-filetypes
  • ardc-279-require-organization-name-on-application
  • ardc-281-require-review-expertise-field-on-draft
  • ots-main
  • smex-production
  • request-review-workflow
  • lfc-main
  • smex-main
  • extension-ots-wagtail-email-configuration
  • enhancement/gh-3288-change-help-to-rich-text
  • new-workflow
  • ardc-deploy-20250722
  • ardc-deploy-20250717
  • ardc-deploy-20250618
  • ardc-deploy-20250518
  • ardc-deploy-20250514
  • ardc-deploy-20250513
  • ardc-deploy-20250321
  • ardc-deploy-20250204
  • v5.23.0
  • ardc-deploy-20250107
  • v5.22.0
  • ardc-deploy-20241220
  • v5.21.1
  • v5.21.0
  • v5.20.0
  • v5.19.0
  • ardc-deploy-20241210
  • ardc-deploy-20241122
  • ardc-deploy-20241107
  • v5.18.0
41 results

test_views.py

Blame
  • user avatar
    Dan Braghis authored
    9b7ca102
    History
    test_views.py 5.50 KiB
    from django.test import TestCase, RequestFactory
    from django.urls import reverse
    
    from opentech.apply.determinations.models import ACCEPTED
    from opentech.apply.users.tests.factories import StaffFactory, UserFactory
    from .factories import DeterminationFactory
    from opentech.apply.funds.tests.factories import ApplicationSubmissionFactory
    
    
    class BaseTestCase(TestCase):
        url_name = ''
        user_factory = None
    
        def setUp(self):
            self.factory = RequestFactory()
            self.user = self.user_factory()
            self.client.force_login(self.user)
    
        def url(self, instance, view_name='detail'):
            full_url_name = self.url_name.format(view_name)
            url = reverse(full_url_name, kwargs=self.get_kwargs(instance))
            request = self.factory.get(url, secure=True)
            return request.build_absolute_uri()
    
        def get_page(self, instance, view_name='detail'):
            return self.client.get(self.url(instance, view_name), secure=True, follow=True)
    
        def post_page(self, instance, data, view_name='detail'):
            return self.client.post(self.url(instance, view_name), data, secure=True, follow=True)
    
        def refresh(self, instance):
            return instance.__class__.objects.get(id=instance.id)
    
    
    class StaffDeterminationsTestCase(BaseTestCase):
        user_factory = StaffFactory
        url_name = 'funds:submissions:determinations:{}'
    
        def get_kwargs(self, instance):
            return {'submission_pk': instance.submission.id}
    
        def test_can_access_determination(self):
            submission = ApplicationSubmissionFactory(status='in_discussion')
            determination = DeterminationFactory(submission=submission, author=self.user, not_draft=True)
            response = self.get_page(determination)
            self.assertContains(response, determination.submission.title)
            self.assertContains(response, self.user.full_name)
            self.assertContains(response, reverse('funds:submissions:detail', kwargs={'pk': submission.id}))
            self.assertFalse(response.context['can_view_extended_data'])
    
        def test_lead_can_access_determination(self):
            submission = ApplicationSubmissionFactory(status='in_discussion', lead=self.user)
            determination = DeterminationFactory(submission=submission, author=self.user, not_draft=True)
            response = self.get_page(determination)
            self.assertContains(response, determination.submission.title)
            self.assertContains(response, self.user.full_name)
            self.assertContains(response, reverse('funds:submissions:detail', kwargs={'pk': submission.id}))
            self.assertTrue(response.context['can_view_extended_data'])
    
    class DeterminationFormTestCase(BaseTestCase):
        user_factory = StaffFactory
        url_name = 'funds:submissions:determinations:{}'
    
        def get_kwargs(self, instance):
            return {'submission_pk': instance.id}
    
        def test_can_access_form_if_lead(self):
            submission = ApplicationSubmissionFactory(status='in_discussion', lead=self.user)
            response = self.get_page(submission, 'form')
            self.assertContains(response, submission.title)
            self.assertContains(response, reverse('funds:submissions:detail', kwargs={'pk': submission.id}))
    
        def test_cannot_access_form_if_not_lead(self):
            submission = ApplicationSubmissionFactory(status='in_discussion')
            response = self.get_page(submission, 'form')
            self.assertEqual(response.status_code, 403)
    
        def test_cant_access_wrong_status(self):
            submission = ApplicationSubmissionFactory()
            response = self.get_page(submission, 'form')
            self.assertEqual(response.status_code, 403)
    
        def test_cant_resubmit_determination(self):
            submission = ApplicationSubmissionFactory(status='in_discussion', lead=self.user)
            determination = DeterminationFactory(submission=submission, author=self.user, submitted=True)
            response = self.post_page(submission, {'data': 'value', 'outcome': determination.outcome}, 'form')
            self.assertTrue(response.context['has_determination_response'])
            self.assertContains(response, 'You have already added a determination for this submission')
    
        def test_can_edit_draft_determination(self):
            submission = ApplicationSubmissionFactory(status='in_discussion', lead=self.user)
            DeterminationFactory(submission=submission, author=self.user)
            response = self.post_page(submission, {
                'data': 'value',
                'outcome': ACCEPTED,
                'message': 'Accepted determination draft message',
                'save_draft': True
            }, 'form')
            self.assertContains(response, 'Accepted')
            self.assertContains(response, reverse(self.url_name.format('form'), kwargs=self.get_kwargs(submission)))
            self.assertContains(response, 'Accepted determination draft message')
    
        def test_cannot_edit_draft_determination_if_not_lead(self):
            submission = ApplicationSubmissionFactory(status='in_discussion')
            determination = DeterminationFactory(submission=submission, author=self.user)
            response = self.post_page(submission, {'data': 'value', 'outcome': determination.outcome}, 'form')
            self.assertEqual(response.status_code, 403)
    
    
    class UserDeterminationFormTestCase(BaseTestCase):
        user_factory = UserFactory
        url_name = 'funds:submissions:determinations:{}'
    
        def get_kwargs(self, instance):
            return {'submission_pk': instance.id}
    
        def test_cant_access_form(self):
            submission = ApplicationSubmissionFactory(status='in_discussion')
            response = self.get_page(submission, 'form')
            self.assertEqual(response.status_code, 403)