fix: Do not allow newsletter scheduling with past date (#22204)

* fix: newsletter scheduling

* fix: Add required prop on schedule dialog

* refactor: Add validation in newsletter.py

* test: fix scheduled newsletter test

---------

Co-authored-by: Ankush Menat <ankush@frappe.io>
This commit is contained in:
niraj gautam 2023-08-29 12:19:52 +05:30 committed by GitHub
parent 173605fe2c
commit dff426a267
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 1 deletions

View file

@ -112,12 +112,14 @@ frappe.ui.form.on("Newsletter", {
options: {
minDate: new Date(),
},
reqd: true,
},
{
label: __("Time"),
fieldname: "time",
fieldtype: "Select",
options: time_slots,
reqd: true,
},
],
primary_action_label: __("Schedule"),

View file

@ -55,6 +55,7 @@ class Newsletter(WebsiteGenerator):
self.validate_sender_address()
self.validate_recipient_address()
self.validate_publishing()
self.validate_scheduling_date()
@property
def newsletter_recipients(self) -> list[str]:
@ -153,6 +154,13 @@ class Newsletter(WebsiteGenerator):
if self.send_webview_link and not self.published:
frappe.throw(_("Newsletter must be published to send webview link in email"))
def validate_scheduling_date(self):
if (
self.schedule_sending
and frappe.utils.get_datetime(self.schedule_send) < frappe.utils.now_datetime()
):
frappe.throw(_("Past dates are not allowed for Scheduling."))
def get_linked_email_queue(self) -> list[str]:
"""Get list of email queue linked to this newsletter."""
return frappe.get_all(

View file

@ -96,6 +96,8 @@ class TestNewsletterMixin:
newsletter.send_emails()
return newsletter.name
return newsletter
@staticmethod
def get_newsletter(**kwargs) -> "Newsletter":
"""Generate and return Newsletter object"""
@ -162,7 +164,9 @@ class TestNewsletter(TestNewsletterMixin, FrappeTestCase):
self.assertTrue(email in recipients)
def test_schedule_send(self):
self.send_newsletter(schedule_send=add_days(getdate(), -1))
newsletter = self.send_newsletter(schedule_send=add_days(getdate(), 1))
newsletter.db_set("schedule_send", add_days(getdate(), -1)) # Set date in past
send_scheduled_email()
email_queue_list = [frappe.get_doc("Email Queue", e.name) for e in frappe.get_all("Email Queue")]
self.assertEqual(len(email_queue_list), 4)