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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
from django.test import TestCase
from opentech.apply.funds.tests.factories import (
ApplicationSubmissionFactory,
AssignedWithRoleReviewersFactory,
AssignedReviewersFactory,
InvitedToProposalFactory,
ReviewerRoleFactory,
)
from opentech.apply.review.tests.factories import ReviewFactory
from opentech.apply.users.tests.factories import (
ReviewerFactory,
StaffFactory,
)
from opentech.apply.funds.forms import UpdateReviewersForm
class TestReviewerFormQueries(TestCase):
def test_queries_init_and_render(self):
user = StaffFactory()
ReviewerRoleFactory.create_batch(3)
StaffFactory.create_batch(3)
ReviewerFactory.create_batch(3)
submission = InvitedToProposalFactory(lead=user, workflow_stages=2)
# Reviewers
# Assigned Reviewers
# Roles
with self.assertNumQueries(3):
form = UpdateReviewersForm(user=user, instance=submission)
# 3 x Staff - 1 per Role
# 1 x reviewers queryset
# 1 x submission reviewers
with self.assertNumQueries(5):
form.as_p()
def test_queries_roles_swap(self):
user = StaffFactory()
submission = ApplicationSubmissionFactory()
staff = StaffFactory.create_batch(4)
roles = ReviewerRoleFactory.create_batch(2)
form = UpdateReviewersForm(user=user, instance=submission)
AssignedWithRoleReviewersFactory(role=roles[0], submission=submission, reviewer=staff[0])
AssignedWithRoleReviewersFactory(role=roles[1], submission=submission, reviewer=staff[1])
data = {}
for field, user in zip(form.fields, staff):
if field.startswith('role'):
data[field] = user.id
else:
data[field] = None
form = UpdateReviewersForm(data, user=user, instance=submission)
self.assertTrue(form.is_valid())
# 1 - Submission
# 8 - 1 per role (2 savepoint, 1 get, 1 update)
# 1 - check - orphaned
with self.assertNumQueries(10):
form.save()
def test_queries_reviewers_swap(self):
user = StaffFactory()
submission = InvitedToProposalFactory(lead=user)
reviewers = ReviewerFactory.create_batch(4)
AssignedReviewersFactory(submission=submission, reviewer=reviewers[0])
AssignedReviewersFactory(submission=submission, reviewer=reviewers[1])
data = {'reviewer_reviewers': [reviewer.id for reviewer in reviewers[2:]]}
form = UpdateReviewersForm(data, user=user, instance=submission)
self.assertTrue(form.is_valid())
# 1 - Submission
# 1 - Delete old
# 1 - Cache existing
# 1 - Add new
# 1 - check - orphaned
with self.assertNumQueries(5):
form.save()
def test_queries_existing_reviews(self):
user = StaffFactory()
submission = InvitedToProposalFactory(lead=user)
reviewers = ReviewerFactory.create_batch(4)
ReviewFactory(submission=submission, author=reviewers[0])
ReviewFactory(submission=submission, author=reviewers[1])
data = {'reviewer_reviewers': [reviewer.id for reviewer in reviewers[2:]]}
form = UpdateReviewersForm(data, user=user, instance=submission)
self.assertTrue(form.is_valid())
# 1 - Submission
# 1 - Delete old
# 1 - Cache existing
# 1 - Add new
# 1 - check - orphaned
with self.assertNumQueries(5):
form.save()