|
13 | 13 | RewardPointRedemptionEvent,
|
14 | 14 | SemesterActivation,
|
15 | 15 | )
|
16 |
| -from evap.rewards.tools import is_semester_activated, redeemed_points_of_user, reward_points_of_user |
| 16 | +from evap.rewards.tools import is_semester_activated, reward_points_of_user |
17 | 17 | from evap.staff.tests.utils import WebTestStaffMode, WebTestStaffModeWith200Check
|
18 | 18 |
|
19 | 19 |
|
@@ -50,81 +50,69 @@ def setUpTestData(cls):
|
50 | 50 | baker.make(RewardPointGranting, user_profile=cls.student, value=5)
|
51 | 51 | cls.event1 = baker.make(RewardPointRedemptionEvent, redeem_end_date=date.today() + timedelta(days=1))
|
52 | 52 | cls.event2 = baker.make(RewardPointRedemptionEvent, redeem_end_date=date.today() + timedelta(days=1))
|
| 53 | + cls.event_with_multiple = baker.make( |
| 54 | + RewardPointRedemptionEvent, redeem_end_date=date.today() + timedelta(days=1), step=5 |
| 55 | + ) |
53 | 56 |
|
54 | 57 | def test_redeem_all_points(self):
|
55 | 58 | response = self.app.get(self.url, user=self.student)
|
56 | 59 | form = response.forms["reward-redemption-form"]
|
57 |
| - form.set(f"points-{self.event1.pk}", 2) |
58 |
| - form.set(f"points-{self.event2.pk}", 3) |
59 |
| - response = form.submit() |
| 60 | + form.set("form-0-points", 2) |
| 61 | + form.set("form-1-points", 3) |
| 62 | + response = form.submit().follow() |
60 | 63 | self.assertContains(response, "You successfully redeemed your points.")
|
61 | 64 | self.assertEqual(0, reward_points_of_user(self.student))
|
62 | 65 |
|
63 | 66 | def test_redeem_too_many_points(self):
|
64 | 67 | response = self.app.get(self.url, user=self.student)
|
65 | 68 | form = response.forms["reward-redemption-form"]
|
66 |
| - form.set(f"points-{self.event1.pk}", 3) |
67 |
| - form.set(f"points-{self.event2.pk}", 3) |
68 |
| - response = form.submit(status=400) |
69 |
| - self.assertContains(response, "have enough reward points.", status_code=400) |
| 69 | + form.set("form-0-points", 3) |
| 70 | + form.set("form-1-points", 3) |
| 71 | + response = form.submit() |
| 72 | + self.assertContains(response, "have enough reward points.") |
70 | 73 | self.assertEqual(5, reward_points_of_user(self.student))
|
71 | 74 |
|
72 | 75 | def test_redeem_zero_points(self):
|
73 | 76 | response = self.app.get(self.url, user=self.student)
|
74 | 77 | form = response.forms["reward-redemption-form"]
|
75 |
| - form.set(f"points-{self.event1.pk}", 0) |
76 |
| - response = form.submit(status=400) |
77 |
| - self.assertContains(response, "cannot redeem 0 points.", status_code=400) |
| 78 | + response = form.submit() |
| 79 | + self.assertContains(response, "cannot redeem 0 points.") |
| 80 | + self.assertEqual(5, reward_points_of_user(self.student)) |
| 81 | + |
| 82 | + def test_redeem_multiple(self): |
| 83 | + response = self.app.get(self.url, user=self.student) |
| 84 | + form = response.forms["reward-redemption-form"] |
| 85 | + form.set("form-2-points", 5) |
| 86 | + response = form.submit().follow() |
| 87 | + self.assertContains(response, "You successfully redeemed your points.") |
| 88 | + self.assertEqual(0, reward_points_of_user(self.student)) |
| 89 | + |
| 90 | + def test_redeem_wrong_multiple(self): |
| 91 | + response = self.app.get(self.url, user=self.student) |
| 92 | + form = response.forms["reward-redemption-form"] |
| 93 | + form.set("form-2-points", 3) |
| 94 | + response = form.submit() |
| 95 | + self.assertContains(response, "this value is a multiple of step size 5.") |
78 | 96 | self.assertEqual(5, reward_points_of_user(self.student))
|
79 | 97 |
|
80 | 98 | def test_redeem_points_for_expired_event(self):
|
81 | 99 | """Regression test for #846"""
|
82 | 100 | response = self.app.get(self.url, user=self.student)
|
83 | 101 | form = response.forms["reward-redemption-form"]
|
84 |
| - form.set(f"points-{self.event2.pk}", 1) |
| 102 | + form.set("form-1-points", 1) |
85 | 103 | RewardPointRedemptionEvent.objects.update(redeem_end_date=date.today() - timedelta(days=1))
|
86 |
| - response = form.submit(status=400) |
87 |
| - self.assertContains(response, "event expired already.", status_code=400) |
| 104 | + response = form.submit() |
88 | 105 | self.assertEqual(5, reward_points_of_user(self.student))
|
89 | 106 |
|
90 |
| - def post_redemption_request(self, redemption_params, additional_params=None, status=200): |
91 |
| - if additional_params is None: |
92 |
| - additional_params = { |
93 |
| - "previous_redeemed_points": redeemed_points_of_user(self.student), |
94 |
| - } |
95 |
| - return self.app.post( |
96 |
| - self.url, params={**redemption_params, **additional_params}, user=self.student, status=status |
97 |
| - ) |
98 |
| - |
99 |
| - def test_invalid_post_parameters(self): |
100 |
| - self.post_redemption_request({"points-asd": 2}, status=400) |
101 |
| - self.post_redemption_request({"points-": 2}, status=400) |
102 |
| - self.post_redemption_request({f"points-{self.event1.pk}": ""}, status=400) |
103 |
| - self.post_redemption_request({f"points-{self.event1.pk}": "asd"}, status=400) |
104 |
| - |
105 |
| - # redemption without or with invalid point parameters |
106 |
| - self.post_redemption_request( |
107 |
| - redemption_params={f"points-{self.event1.pk}": 1}, additional_params={}, status=400 |
108 |
| - ) |
109 |
| - self.post_redemption_request( |
110 |
| - redemption_params={f"points-{self.event1.pk}": 1}, |
111 |
| - additional_params={"previous_redeemed_points": "asd"}, |
112 |
| - status=400, |
113 |
| - ) |
114 |
| - self.assertFalse(RewardPointRedemption.objects.filter(user_profile=self.student).exists()) |
115 |
| - |
116 |
| - # now, a correct request succeeds |
117 |
| - self.post_redemption_request({f"points-{self.event1.pk}": 2}) |
118 |
| - |
119 | 107 | def test_inconsistent_previous_redemption_counts(self):
|
120 | 108 | response1 = self.app.get(self.url, user=self.student)
|
121 | 109 | form1 = response1.forms["reward-redemption-form"]
|
122 |
| - form1.set(f"points-{self.event1.pk}", 2) |
| 110 | + form1.set("form-1-points", 2) |
123 | 111 | response2 = self.app.get(self.url, user=self.student)
|
124 | 112 | form2 = response2.forms["reward-redemption-form"]
|
125 |
| - form2.set(f"points-{self.event1.pk}", 2) |
| 113 | + form2.set("form-1-points", 2) |
126 | 114 | form1.submit()
|
127 |
| - form2.submit(status=409) |
| 115 | + form2.submit(status=400) |
128 | 116 | self.assertEqual(1, RewardPointRedemption.objects.filter(user_profile=self.student).count())
|
129 | 117 |
|
130 | 118 |
|
|
0 commit comments