Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from django.test import TestCase, RequestFactory
from django.urls import reverse
from opentech.apply.users.tests.factories import StaffFactory
from .factories import ReviewFactory
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='review'):
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='review'):
return self.client.get(self.url(instance, view_name), secure=True, follow=True)
def post_page(self, instance, data, view_name='review'):
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 StaffReviewsTestCase(BaseTestCase):
user_factory = StaffFactory
url_name = 'funds:submissions:reviews:{}'
def get_kwargs(self, instance):
return {'pk': instance.id, 'submission_pk': instance.submission.id}
def test_can_access_review(self):
submission = ApplicationSubmissionFactory()
review = ReviewFactory(submission=submission, author=self.user)
response = self.get_page(review)
self.assertContains(response, review.submission.title)
self.assertContains(response, self.user.full_name)
def test_cant_access_other_review(self):
submission = ApplicationSubmissionFactory()
review = ReviewFactory(submission=submission)
response = self.get_page(review)
self.assertEqual(response.status_code, 403)
class StaffReviewListingTestCase(BaseTestCase):
user_factory = StaffFactory
url_name = 'funds:submissions:reviews:{}'
def get_kwargs(self, instance):
return {'submission_pk': instance.id}
def test_can_access_review_listing(self):
submission = ApplicationSubmissionFactory()
reviews = ReviewFactory.create_batch(3, submission=submission)
response = self.get_page(submission, 'list')
self.assertContains(response, submission.title)
for review in reviews:
self.assertContains(response, review.author.full_name)