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:
parent
173605fe2c
commit
dff426a267
3 changed files with 15 additions and 1 deletions
|
|
@ -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"),
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue