|
6 | 6 |
|
7 | 7 | from ietf.utils.test_data import make_test_data, make_review_data |
8 | 8 | from ietf.utils.test_utils import login_testing_unauthorized, TestCase, unicontent, reload_db_objects |
9 | | -from ietf.review.models import ReviewRequest, ReviewRequestStateName |
10 | 9 | from ietf.doc.models import TelechatDocEvent |
11 | 10 | from ietf.iesg.models import TelechatDate |
12 | 11 | from ietf.person.models import Email, Person |
| 12 | +from ietf.review.models import ReviewRequest, ReviewRequestStateName, ReviewerSettings, UnavailablePeriod |
13 | 13 | from ietf.review.utils import suggested_review_requests_for_team |
14 | 14 | import ietf.group.views_review |
15 | 15 | from ietf.utils.mail import outbox, empty_outbox |
@@ -190,3 +190,85 @@ def test_email_open_review_assignments(self): |
190 | 190 | self.assertEqual(outbox[0]["subject"], "Test subject") |
191 | 191 | self.assertTrue("Test body" in unicode(outbox[0])) |
192 | 192 |
|
| 193 | + def test_change_reviewer_settings(self): |
| 194 | + doc = make_test_data() |
| 195 | + |
| 196 | + reviewer = Person.objects.get(name="Plain Man") |
| 197 | + |
| 198 | + review_req = make_review_data(doc) |
| 199 | + review_req.reviewer = reviewer.email_set.first() |
| 200 | + review_req.save() |
| 201 | + |
| 202 | + url = urlreverse(ietf.group.views_review.change_reviewer_settings, kwargs={ |
| 203 | + "group_type": review_req.team.type_id, |
| 204 | + "acronym": review_req.team.acronym, |
| 205 | + "reviewer_email": review_req.reviewer_id, |
| 206 | + }) |
| 207 | + |
| 208 | + login_testing_unauthorized(self, reviewer.user.username, url) |
| 209 | + |
| 210 | + # get |
| 211 | + r = self.client.get(url) |
| 212 | + self.assertEqual(r.status_code, 200) |
| 213 | + |
| 214 | + # set settings |
| 215 | + empty_outbox() |
| 216 | + r = self.client.post(url, { |
| 217 | + "action": "change_settings", |
| 218 | + "min_interval": "7", |
| 219 | + "filter_re": "test-[regexp]", |
| 220 | + "skip_next": "2", |
| 221 | + }) |
| 222 | + self.assertEqual(r.status_code, 302) |
| 223 | + settings = ReviewerSettings.objects.get(person=reviewer, team=review_req.team) |
| 224 | + self.assertEqual(settings.min_interval, 7) |
| 225 | + self.assertEqual(settings.filter_re, "test-[regexp]") |
| 226 | + self.assertEqual(settings.skip_next, 2) |
| 227 | + self.assertEqual(len(outbox), 1) |
| 228 | + self.assertTrue("reviewer availability" in outbox[0]["subject"].lower()) |
| 229 | + self.assertTrue("frequency changed", unicode(outbox[0]).lower()) |
| 230 | + self.assertTrue("skip next", unicode(outbox[0]).lower()) |
| 231 | + |
| 232 | + # add unavailable period |
| 233 | + start_date = datetime.date.today() + datetime.timedelta(days=10) |
| 234 | + empty_outbox() |
| 235 | + r = self.client.post(url, { |
| 236 | + "action": "add_period", |
| 237 | + 'start_date': start_date.isoformat(), |
| 238 | + 'end_date': "", |
| 239 | + 'availability': "unavailable", |
| 240 | + }) |
| 241 | + self.assertEqual(r.status_code, 302) |
| 242 | + period = UnavailablePeriod.objects.get(person=reviewer, team=review_req.team, start_date=start_date) |
| 243 | + self.assertEqual(period.end_date, None) |
| 244 | + self.assertEqual(period.availability, "unavailable") |
| 245 | + self.assertEqual(len(outbox), 1) |
| 246 | + self.assertTrue(start_date.isoformat(), unicode(outbox[0]).lower()) |
| 247 | + self.assertTrue("indefinite", unicode(outbox[0]).lower()) |
| 248 | + |
| 249 | + # end unavailable period |
| 250 | + empty_outbox() |
| 251 | + end_date = start_date + datetime.timedelta(days=10) |
| 252 | + r = self.client.post(url, { |
| 253 | + "action": "end_period", |
| 254 | + 'period_id': period.pk, |
| 255 | + 'end_date': end_date.isoformat(), |
| 256 | + }) |
| 257 | + self.assertEqual(r.status_code, 302) |
| 258 | + period = reload_db_objects(period) |
| 259 | + self.assertEqual(period.end_date, end_date) |
| 260 | + self.assertEqual(len(outbox), 1) |
| 261 | + self.assertTrue(start_date.isoformat(), unicode(outbox[0]).lower()) |
| 262 | + self.assertTrue("indefinite", unicode(outbox[0]).lower()) |
| 263 | + |
| 264 | + # delete unavailable period |
| 265 | + empty_outbox() |
| 266 | + r = self.client.post(url, { |
| 267 | + "action": "delete_period", |
| 268 | + 'period_id': period.pk, |
| 269 | + }) |
| 270 | + self.assertEqual(r.status_code, 302) |
| 271 | + self.assertEqual(UnavailablePeriod.objects.filter(person=reviewer, team=review_req.team, start_date=start_date).count(), 0) |
| 272 | + self.assertEqual(len(outbox), 1) |
| 273 | + self.assertTrue(start_date.isoformat(), unicode(outbox[0]).lower()) |
| 274 | + self.assertTrue(end_date.isoformat(), unicode(outbox[0]).lower()) |
0 commit comments