From 68b1d5bb8b084a0b62ca7ae152d2dcc1b61d285e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C4=93teris=20Caune?= Date: Mon, 15 Mar 2021 13:06:57 +0200 Subject: [PATCH] Fix the "Email Reports" screen to clear Profile.next_nag_date --- CHANGELOG.md | 1 + hc/accounts/tests/test_notifications.py | 19 ++++++++++++++++++- hc/accounts/views.py | 4 ++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6eacadb1..c6745edf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ All notable changes to this project will be documented in this file. - Relax cron expression validation: accept all expressions that croniter accepts - Fix sendalerts to clear Profile.next_nag_date if all checks up - Fix the pause action to clear Profile.next_nag_date if all checks up +- Fix the "Email Reports" screen to clear Profile.next_nag_date if all checks up ## v1.19.0 - 2021-02-03 diff --git a/hc/accounts/tests/test_notifications.py b/hc/accounts/tests/test_notifications.py index 29ba9cd7..194ce51f 100644 --- a/hc/accounts/tests/test_notifications.py +++ b/hc/accounts/tests/test_notifications.py @@ -1,6 +1,7 @@ from datetime import timedelta as td from django.utils.timezone import now +from hc.api.models import Check from hc.test import BaseTestCase @@ -34,7 +35,9 @@ class NotificationsTestCase(BaseTestCase): self.assertFalse(self.profile.reports_allowed) self.assertIsNone(self.profile.next_report_date) - def test_it_saves_hourly_nag_period(self): + def test_it_sets_next_nag_date_when_setting_hourly_nag_period(self): + Check.objects.create(project=self.project, status="down") + self.client.login(username="alice@example.org", password="password") form = {"nag_period": "3600"} @@ -45,6 +48,20 @@ class NotificationsTestCase(BaseTestCase): self.assertEqual(self.profile.nag_period.total_seconds(), 3600) self.assertIsNotNone(self.profile.next_nag_date) + def test_it_clears_next_nag_date_when_setting_hourly_nag_period(self): + self.profile.next_nag_date = now() + td(minutes=30) + self.profile.save() + + self.client.login(username="alice@example.org", password="password") + + form = {"nag_period": "3600"} + r = self.client.post("/accounts/profile/notifications/", form) + self.assertEqual(r.status_code, 200) + + self.profile.refresh_from_db() + self.assertEqual(self.profile.nag_period.total_seconds(), 3600) + self.assertIsNone(self.profile.next_nag_date) + def test_it_does_not_save_nonstandard_nag_period(self): self.profile.nag_period = td(seconds=3600) self.profile.save() diff --git a/hc/accounts/views.py b/hc/accounts/views.py index 3897d03f..b77a2ed9 100644 --- a/hc/accounts/views.py +++ b/hc/accounts/views.py @@ -457,9 +457,9 @@ def notifications(request): if profile.nag_period != form.cleaned_data["nag_period"]: # Set the new nag period profile.nag_period = form.cleaned_data["nag_period"] - # and schedule next_nag_date: + # and update next_nag_date: if profile.nag_period: - profile.next_nag_date = now() + profile.nag_period + profile.update_next_nag_date() else: profile.next_nag_date = None