diff --git a/assets/js/src/newsletters/send.jsx b/assets/js/src/newsletters/send.jsx index a3be59d832..ac6380f2c7 100644 --- a/assets/js/src/newsletters/send.jsx +++ b/assets/js/src/newsletters/send.jsx @@ -101,6 +101,7 @@ define( endpoint: 'newsletterTemplates', action: 'save', data: { + newsletter_id: response.data.id, name: response.data.subject, description: response.data.preheader, thumbnail: thumbnail.toDataURL('image/jpeg'), @@ -189,12 +190,17 @@ define( 'MailPoet Free version': window.mailpoet_version, }); } + this.setState({ loading: false }); }); - }).fail(this.showError); + }) + .fail((err) => { + this.showError(err); + this.setState({ loading: false }); + }); } }) - .fail(this.showError) - .always(() => { + .fail((err) => { + this.showError(err); this.setState({ loading: false }); }); } diff --git a/lib/API/JSON/v1/NewsletterTemplates.php b/lib/API/JSON/v1/NewsletterTemplates.php index 96a78956de..c1e9b9ada4 100644 --- a/lib/API/JSON/v1/NewsletterTemplates.php +++ b/lib/API/JSON/v1/NewsletterTemplates.php @@ -38,6 +38,13 @@ class NewsletterTemplates extends APIEndpoint { } function save($data = array()) { + if(!empty($data['newsletter_id'])) { + $template = NewsletterTemplate::whereEqual('newsletter_id', $data['newsletter_id'])->findOne(); + if(!empty($template)) { + $template = $template->asArray(); + $data['id'] = $template['id']; + } + } $template = NewsletterTemplate::createOrUpdate($data); $errors = $template->getErrors(); diff --git a/lib/Config/Migrator.php b/lib/Config/Migrator.php index de45ecafd5..ba16e476c4 100644 --- a/lib/Config/Migrator.php +++ b/lib/Config/Migrator.php @@ -244,6 +244,7 @@ class Migrator { function newsletterTemplates() { $attributes = array( 'id int(11) unsigned NOT NULL AUTO_INCREMENT,', + 'newsletter_id int NULL DEFAULT 0,', 'name varchar(250) NOT NULL,', 'categories varchar(250) NOT NULL DEFAULT "[]",', 'description varchar(250) NOT NULL,', diff --git a/tests/unit/API/JSON/v1/NewsletterTemplatesTest.php b/tests/unit/API/JSON/v1/NewsletterTemplatesTest.php index 0fb14aa72a..f83c8a92aa 100644 --- a/tests/unit/API/JSON/v1/NewsletterTemplatesTest.php +++ b/tests/unit/API/JSON/v1/NewsletterTemplatesTest.php @@ -15,6 +15,7 @@ class NewsletterTemplatesTest extends \MailPoetTest { NewsletterTemplate::createOrUpdate(array( 'name' => 'Template #2', + 'newsletter_id' => 1, 'description' => 'My Second Template', 'body' => '{"key2": "value2"}' )); @@ -53,7 +54,7 @@ class NewsletterTemplatesTest extends \MailPoetTest { expect($response->data)->equals($templates); } - function testItCanSaveANewsletterTemplate() { + function testItCanSaveANewTemplate() { $template_data = array( 'name' => 'Template #3', 'description' => 'My Third Template', @@ -68,6 +69,41 @@ class NewsletterTemplatesTest extends \MailPoetTest { ); } + function testItCanSaveANewTemplateAssociatedWithANewsletter() { + $template_data = array( + 'newsletter_id' => 2, + 'name' => 'Template #3', + 'description' => 'My Third Template', + 'body' => '{"key3": "value3"}' + ); + + $router = new NewsletterTemplates(); + $response = $router->save($template_data); + expect($response->status)->equals(APIResponse::STATUS_OK); + expect($response->data)->equals( + NewsletterTemplate::findOne($response->data['id'])->asArray() + ); + } + + function testItCanUpdateTemplateAssociatedWithANewsletter() { + $template_data = array( + 'newsletter_id' => 1, + 'name' => 'Template #2', + 'description' => 'My Updated Second Template', + 'body' => '{"key3": "value3"}' + ); + + $router = new NewsletterTemplates(); + $response = $router->save($template_data); + expect($response->status)->equals(APIResponse::STATUS_OK); + expect($response->data)->equals( + NewsletterTemplate::findOne($response->data['id'])->asArray() + ); + + $template = NewsletterTemplate::whereEqual('newsletter_id', 1)->findOne(); + expect($response->data)->equals($template->asArray()); + } + function testItCanDeleteANewsletterTemplate() { $template = NewsletterTemplate::where('name', 'Template #2')->findOne(); expect($template->deleted_at)->null();