diff --git a/assets/js/src/newsletters/templates.jsx b/assets/js/src/newsletters/templates.jsx index f9e26ec288..e2128be6b0 100644 --- a/assets/js/src/newsletters/templates.jsx +++ b/assets/js/src/newsletters/templates.jsx @@ -29,7 +29,7 @@ define( action: 'save', data: template }).done(function(response) { - if(response === true) { + if(response.result === true) { this.props.onImport(template); } else { response.map(function(error) { diff --git a/assets/js/src/newsletters/types.jsx b/assets/js/src/newsletters/types.jsx index 7dbcf7ff0a..351e58e3a9 100644 --- a/assets/js/src/newsletters/types.jsx +++ b/assets/js/src/newsletters/types.jsx @@ -29,12 +29,14 @@ define( subject: 'Draft newsletter', } }).done(function(response) { - if(response.id !== undefined) { - this.history.pushState(null, `/template/${response.id}`); + if(response.result && response.newsletter.id) { + this.history.pushState(null, `/template/${response.newsletter.id}`); } else { - response.map(function(error) { - MailPoet.Notice.error(error); - }); + if(response.errors.length > 0) { + response.errors.map(function(error) { + MailPoet.Notice.error(error); + }); + } } }.bind(this)); }, diff --git a/assets/js/src/newsletters/types/notification.jsx b/assets/js/src/newsletters/types/notification.jsx index 62db27bad5..92f1606cd1 100644 --- a/assets/js/src/newsletters/types/notification.jsx +++ b/assets/js/src/newsletters/types/notification.jsx @@ -138,12 +138,14 @@ define( options: this.state, }, }).done(function(response) { - if(response.id !== undefined) { - this.showTemplateSelection(response.id); + if(response.result && response.newsletter.id) { + this.showTemplateSelection(response.newsletter.id); } else { - response.map(function(error) { - MailPoet.Notice.error(error); - }); + if(response.errors.length > 0) { + response.errors.map(function(error) { + MailPoet.Notice.error(error); + }); + } } }.bind(this)); }, diff --git a/assets/js/src/newsletters/types/standard.jsx b/assets/js/src/newsletters/types/standard.jsx index 34edc7d60b..5efc7fb217 100644 --- a/assets/js/src/newsletters/types/standard.jsx +++ b/assets/js/src/newsletters/types/standard.jsx @@ -32,12 +32,15 @@ define( type: 'standard', } }).done(function(response) { - if(response.id !== undefined) { - this.showTemplateSelection(response.id); + console.log(response); + if(response.result && response.newsletter.id) { + this.showTemplateSelection(response.newsletter.id); } else { - response.map(function(error) { - MailPoet.Notice.error(error); - }); + if(response.errors.length > 0) { + response.errors.map(function(error) { + MailPoet.Notice.error(error); + }); + } } }.bind(this)); }, diff --git a/assets/js/src/newsletters/types/welcome.jsx b/assets/js/src/newsletters/types/welcome.jsx index c216e21546..87ba3a5afd 100644 --- a/assets/js/src/newsletters/types/welcome.jsx +++ b/assets/js/src/newsletters/types/welcome.jsx @@ -111,12 +111,14 @@ define( options: this.state, }, }).done(function(response) { - if(response.id !== undefined) { - this.showTemplateSelection(response.id); + if(response.result && response.newsletter.id) { + this.showTemplateSelection(response.newsletter.id); } else { - response.map(function(error) { - MailPoet.Notice.error(error); - }); + if(response.errors.length > 0) { + response.errors.map(function(error) { + MailPoet.Notice.error(error); + }); + } } }.bind(this)); }, diff --git a/lib/Models/CustomField.php b/lib/Models/CustomField.php index d49fe6dd2d..683a10dc4c 100644 --- a/lib/Models/CustomField.php +++ b/lib/Models/CustomField.php @@ -19,20 +19,24 @@ class CustomField extends Model { function asArray() { $model = parent::asArray(); - $model['params'] = ( - is_serialized($this->params) - ? unserialize($this->params) - : $this->params - ); - + if(isset($model['params'])) { + $model['params'] = ( + is_array($this->params) + ? $this->params + : unserialize($this->params) + ); + } return $model; } function save() { + if(is_null($this->params)) { + $this->params = array(); + } $this->set('params', ( - is_serialized($this->params) - ? $this->params - : serialize($this->params) + is_array($this->params) + ? serialize($this->params) + : $this->params )); return parent::save(); } @@ -66,12 +70,6 @@ class CustomField extends Model { $custom_field->set($data); } - try { - $custom_field->save(); - return $custom_field; - } catch(Exception $e) { - return $custom_field->getValidationErrors(); - } - return false; + return $custom_field->save(); } } \ No newline at end of file diff --git a/lib/Models/Newsletter.php b/lib/Models/Newsletter.php index 02135b6adb..610d4a1d60 100644 --- a/lib/Models/Newsletter.php +++ b/lib/Models/Newsletter.php @@ -8,6 +8,10 @@ class Newsletter extends Model { function __construct() { parent::__construct(); + + $this->addValidations('type', array( + 'required' => __('You need to specify a type.') + )); } function save() { @@ -15,9 +19,23 @@ class Newsletter extends Model { $this->set_expr('deleted_at', 'NULL'); } + $this->set('body', + is_array($this->body) + ? json_encode($this->body) + : $this->body + ); return parent::save(); } + function asArray() { + $model = parent::asArray(); + + if(isset($model['body'])) { + $model['body'] = json_decode($model['body'], true); + } + return $model; + } + function delete() { // delete all relations to segments NewsletterSegment::where('newsletter_id', $this->id)->deleteMany(); diff --git a/lib/Router/CustomFields.php b/lib/Router/CustomFields.php index 17146d1bac..7041fb0310 100644 --- a/lib/Router/CustomFields.php +++ b/lib/Router/CustomFields.php @@ -33,30 +33,19 @@ class CustomFields { function save($data = array()) { $custom_field = CustomField::createOrUpdate($data); + $errors = $custom_field->getErrors(); - if($custom_field === false) { - $result = array( + if(!empty($errors)) { + return array( 'result' => false, - 'errors' => array( - __('The custom field could not be created.') - ) + 'errors' => $errors ); } else { - $errors = $custom_field->getValidationErrors(); - if(!empty($errors)) { - $result = array( - 'result' => false, - 'errors' => $errors - ); - } else { - $result = array( - 'result' => true, - 'field' => $custom_field->asArray() - ); - } + return array( + 'result' => true, + 'field' => $custom_field->asArray() + ); } - - return $result; } function get($id) { diff --git a/lib/Router/Forms.php b/lib/Router/Forms.php index c266de15ba..c47869864a 100644 --- a/lib/Router/Forms.php +++ b/lib/Router/Forms.php @@ -47,10 +47,6 @@ class Forms { return $listing_data; } - function getAll() { - return Form::findArray(); - } - function create() { // create new form $form_data = array( @@ -89,16 +85,17 @@ class Forms { function save($data = array()) { $form = Form::createOrUpdate($data); + $errors = $form->getErrors(); - if($form !== false && $form->id()) { + if(!empty($errors)) { return array( - 'result' => true, - 'form_id' => $form->id() + 'result' => false, + 'errors' => $errors ); } else { return array( - 'result' => false, - 'errors' => $form->getValidationErrors() + 'result' => true, + 'form_id' => $form->id() ); } } diff --git a/lib/Router/NewsletterTemplates.php b/lib/Router/NewsletterTemplates.php index c10474c937..4b9acbdd0d 100644 --- a/lib/Router/NewsletterTemplates.php +++ b/lib/Router/NewsletterTemplates.php @@ -26,21 +26,16 @@ class NewsletterTemplates { } function save($data = array()) { - $result = NewsletterTemplate::createOrUpdate($data); - if($result !== true) { - return $result; - } else { - return true; - } + $template = NewsletterTemplate::createOrUpdate($data); + return ($template->getErrors() === false && $template->id() > 0); } function delete($id) { $template = NewsletterTemplate::findOne($id); if($template !== false) { - $result = $template->delete(); + return $template->delete(); } else { - $result = false; + return false; } - return $result; } } diff --git a/lib/Router/Newsletters.php b/lib/Router/Newsletters.php index 003886f064..72d410fbff 100644 --- a/lib/Router/Newsletters.php +++ b/lib/Router/Newsletters.php @@ -33,42 +33,32 @@ class Newsletters { return $segment['id']; }, $segments); $newsletter['options'] = $options; - $newsletter['body'] = json_decode($newsletter['body']); - return $newsletter; } } - function getAll() { - $collection = Newsletter::findArray(); - $collection = array_map(function($item) { - $item['body'] = json_decode($item['body']); - return $item; - }, $collection); - wp_send_json($collection); - } - function save($data = array()) { + $segment_ids = array(); if(isset($data['segments'])) { $segment_ids = $data['segments']; unset($data['segments']); } + $options = array(); if(isset($data['options'])) { $options = $data['options']; unset($data['options']); } - $errors = array(); - $result = false; - $newsletter = Newsletter::createOrUpdate($data); + $errors = $newsletter->getErrors(); - if($newsletter !== false && !$newsletter->id()) { - $errors = $newsletter->getValidationErrors(); + if(!empty($errors)) { + return array( + 'result' => false, + 'errors' => $errors + ); } else { - $result = true; - if(!empty($segment_ids)) { NewsletterSegment::where('newsletter_id', $newsletter->id) ->deleteMany(); @@ -100,117 +90,51 @@ class Newsletters { } } } + + return array( + 'result' => true + ); } - wp_send_json(array( - 'result' => $result, - 'errors' => $errors - )); } function restore($id) { - $result = false; - $newsletter = Newsletter::findOne($id); if($newsletter !== false) { - $result = $newsletter->restore(); + $newsletter->restore(); } - - wp_send_json($result); + return ($newsletter->getErrors() === false); } function trash($id) { - $result = false; - $newsletter = Newsletter::findOne($id); if($newsletter !== false) { - $result = $newsletter->trash(); + $newsletter->trash(); } - - wp_send_json($result); + return ($newsletter->getErrors() === false); } function delete($id) { - $result = false; - $newsletter = Newsletter::findOne($id); if($newsletter !== false) { $newsletter->delete(); - $result = 1; + return 1; } - - wp_send_json($result); + return false; } - function duplicate($id) { - $result = false; - + function duplicate($id = false) { $newsletter = Newsletter::findOne($id); if($newsletter !== false) { - $data = array( + return $newsletter->duplicate(array( 'subject' => sprintf(__('Copy of %s'), $newsletter->subject) - ); - $result = $newsletter->duplicate($data)->asArray(); + ))->asArray(); } - - wp_send_json($result); - } - - function send($data = array()) { - $newsletter = Newsletter::findOne($data['id'])->asArray(); - - if(empty($data['segments'])) { - return wp_send_json(array( - 'errors' => array( - __("You need to select a list.") - ) - )); - } - - $segments = Segment::whereIdIn($data['segments'])->findMany(); - $subscribers = array(); - foreach($segments as $segment) { - $segment_subscribers = $segment->subscribers()->findMany(); - foreach($segment_subscribers as $segment_subscriber) { - $subscribers[$segment_subscriber->email] = $segment_subscriber - ->asArray(); - } - } - - if(empty($subscribers)) { - return wp_send_json(array( - 'errors' => array( - __("No subscribers found.") - ) - )); - } - - // TODO: TO REMOVE once we add the columns from/reply_to - $newsletter = array_merge($newsletter, $data['newsletter']); - // END - TO REMOVE - - $renderer = new Renderer(json_decode($newsletter['body'], true)); - $newsletter['body'] = $renderer->render(); - - $subscribers = Subscriber::find_array(); - $fromEmail = Setting::where('name', 'from_address')->findOne()->value; - $fromName = Setting::where('name', 'from_name')->findOne()->value; - $apiKey = Setting::where('name', 'api_key')->findOne()->value; - $mailer = new MailPoet($apiKey, $fromEmail, $fromName); - - foreach ($subscribers as $subscriber) { - $result = $mailer->send( - $newsletter, - sprintf('%s %s <%s>', $subscriber['first_name'], $subscriber['last_name'], $subscriber['email']) - ); - if ($result !== true) wp_send_json(false); - } - - wp_send_json(true); + return false; } function render($data = array()) { if(!isset($data['body'])) { - wp_send_json(false); + return false; } $renderer = new Renderer($data); $rendered_newsletter = $renderer->render(); @@ -219,7 +143,7 @@ class Newsletters { $data ); $rendered_newsletter = $shortcodes->replace(); - wp_send_json(array('rendered_body' => $rendered_newsletter)); + return array('rendered_body' => $rendered_newsletter); } function sendPreview($data = array()) { @@ -227,15 +151,15 @@ class Newsletters { $newsletter = Newsletter::findOne($id); if($newsletter === false) { - wp_send_json(array( + return array( 'result' => false - )); + ); } if(empty($data['subscriber'])) { - wp_send_json(array( + return array( 'result' => false, - 'errors' => array(__('Please specify receiver information')), - )); + 'errors' => array(__('Please specify receiver information')) + ); } $newsletter = $newsletter->asArray(); @@ -263,7 +187,7 @@ class Newsletters { $sender = false, $reply_to = false ); - $result = $mailer->send($newsletter, $data['subscriber']) + $result = $mailer->send($newsletter, $data['subscriber']); return array('result' => $result); } catch(\Exception $e) { @@ -310,27 +234,30 @@ class Newsletters { } function create($data = array()) { - $newsletter = Newsletter::create(); - $newsletter->type = $data['type']; - $newsletter->subject = $data['subject']; - $newsletter->body = '{}'; - - // try to load template data - $template_id = (!empty($data['template']) ? (int)$data['template'] : 0); - $template = NewsletterTemplate::findOne($template_id); - if($template !== false) { - $newsletter->body = $template->body; - } - + $options = array(); if(isset($data['options'])) { $options = $data['options']; unset($data['options']); } + $newsletter = Newsletter::createOrUpdate($data); + + // try to load template data + $template_id = (!empty($data['template']) ? (int)$data['template'] : false); + $template = NewsletterTemplate::findOne($template_id); + if($template !== false) { + $newsletter->body = $template->body; + } else { + $newsletter->body = array(); + } + $newsletter->save(); $errors = $newsletter->getErrors(); if(!empty($errors)) { - return $errors; + return array( + 'result' => false, + 'errors' =>$errors + ); } else { if(!empty($options)) { $option_fields = NewsletterOptionField::where( @@ -347,8 +274,10 @@ class Newsletters { } } } - $newsletter->body = json_decode($newsletter->body); - return $newsletter->asArray(); + return array( + 'result' => true, + 'newsletter' => $newsletter->asArray() + ); } } } \ No newline at end of file diff --git a/lib/Router/Segments.php b/lib/Router/Segments.php index d3930171a5..2272c47fbd 100644 --- a/lib/Router/Segments.php +++ b/lib/Router/Segments.php @@ -65,10 +65,6 @@ class Segments { return $listing_data; } - function getAll() { - return Segment::findArray(); - } - function save($data = array()) { $errors = array(); $result = false; diff --git a/lib/Router/Subscribers.php b/lib/Router/Subscribers.php index 35177c4ad3..ab6686a745 100644 --- a/lib/Router/Subscribers.php +++ b/lib/Router/Subscribers.php @@ -56,35 +56,30 @@ class Subscribers { return $listing_data; } - function getAll() { - return Subscriber::findArray(); - } - function save($data = array()) { - $errors = array(); - $result = false; $segment_ids = array(); - if(array_key_exists('segments', $data)) { + if(isset($data['segments'])) { $segment_ids = (array)$data['segments']; unset($data['segments']); } $subscriber = Subscriber::createOrUpdate($data); + $errors = $subscriber->getErrors(); - if($subscriber !== false && !$subscriber->id()) { - $errors = $subscriber->getValidationErrors(); + if(!empty($errors)) { + return array( + 'result' => false, + 'errors' => $errors + ); } else { - $result = true; - if(!empty($segment_ids)) { $subscriber->addToSegments($segment_ids); } + return array( + 'result' => true + ); } - return array( - 'result' => $result, - 'errors' => $errors - ); } function subscribe($data = array()) { diff --git a/tests/unit/Models/CustomFieldCest.php b/tests/unit/Models/CustomFieldCest.php index ff9a02a336..8dbc311bd6 100644 --- a/tests/unit/Models/CustomFieldCest.php +++ b/tests/unit/Models/CustomFieldCest.php @@ -43,7 +43,7 @@ class CustomFieldCest { } function itCanHaveParams() { - expect(unserialize($this->customField->params))->equals($this->data['params']); + expect($this->customField->params)->equals($this->data['params']); } function itHasToBeValid() { diff --git a/tests/unit/Models/NewsletterCest.php b/tests/unit/Models/NewsletterCest.php index 835f99bc2d..4ce0cc38c8 100644 --- a/tests/unit/Models/NewsletterCest.php +++ b/tests/unit/Models/NewsletterCest.php @@ -11,8 +11,8 @@ class NewsletterCest { $this->before_time = time(); $this->data = array( 'subject' => 'new newsletter', - 'body' => 'body', 'type' => 'standard', + 'body' => 'body', 'preheader' => 'preheader' ); @@ -78,10 +78,11 @@ class NewsletterCest { $is_created = Newsletter::createOrUpdate( array( 'subject' => 'new newsletter', + 'type' => 'standard', 'body' => 'body' )); - expect($is_created)->notEquals(false); - expect($is_created->getValidationErrors())->isEmpty(); + expect($is_created->id() > 0)->true(); + expect($is_created->getErrors())->false(); $newsletter = Newsletter::where('subject', 'new newsletter') ->findOne(); @@ -90,8 +91,7 @@ class NewsletterCest { $is_updated = Newsletter::createOrUpdate( array( 'id' => $newsletter->id, - 'subject' => 'updated newsletter', - 'body' => 'body' + 'subject' => 'updated newsletter' )); $newsletter = Newsletter::findOne($newsletter->id); expect($newsletter->subject)->equals('updated newsletter'); @@ -101,6 +101,7 @@ class NewsletterCest { Newsletter::createOrUpdate( array( 'subject' => 'search for "pineapple"', + 'type' => 'standard', 'body' => 'body' )); $newsletter = Newsletter::filter('search', 'pineapple') diff --git a/tests/unit/Models/NewsletterOptionFieldCest.php b/tests/unit/Models/NewsletterOptionFieldCest.php index ceb0508d3d..b1dbd9b4b5 100644 --- a/tests/unit/Models/NewsletterOptionFieldCest.php +++ b/tests/unit/Models/NewsletterOptionFieldCest.php @@ -9,19 +9,21 @@ class NewsletterOptionFieldCest { $this->before_time = time(); $this->data = array( 'name' => 'Event', - 'newsletter_type' => 'welcome', + 'newsletter_type' => 'welcome' ); - $this->optionField = NewsletterOptionField::create(); - $this->optionField->hydrate($this->data); - $this->saved = $this->optionField->save(); - $this->newslettersData = array( + $this->option_field = NewsletterOptionField::create(); + $this->option_field->hydrate($this->data); + $this->saved = $this->option_field->save(); + $this->newsletter_data = array( array( 'subject' => 'Test newsletter 1', + 'type' => 'standard', 'preheader' => '', 'body' => '{}' ), array( 'subject' => 'Test newsletter 2', + 'type' => 'standard', 'preheader' => 'A newsletter', 'body' => '{}' ) @@ -34,15 +36,15 @@ class NewsletterOptionFieldCest { } function itHasName() { - $optionField = NewsletterOptionField::where('name', $this->data['name']) + $option_field = NewsletterOptionField::where('name', $this->data['name']) ->findOne(); - expect($optionField->name)->equals($this->data['name']); + expect($option_field->name)->equals($this->data['name']); } function itHasNewsletterType() { - $optionField = NewsletterOptionField::where('name', $this->data['name']) + $option_field = NewsletterOptionField::where('name', $this->data['name']) ->findOne(); - expect($optionField->newsletter_type)->equals($this->data['newsletter_type']); + expect($option_field->newsletter_type)->equals($this->data['newsletter_type']); } function itHasToBeValid() { @@ -56,65 +58,65 @@ class NewsletterOptionFieldCest { } function itHasACreatedAtOnCreation() { - $optionField = NewsletterOptionField::where('name', $this->data['name']) + $option_field = NewsletterOptionField::where('name', $this->data['name']) ->findOne(); - $time_difference = strtotime($optionField->created_at) >= $this->before_time; + $time_difference = strtotime($option_field->created_at) >= $this->before_time; expect($time_difference)->equals(true); } function itHasAnUpdatedAtOnCreation() { - $optionField = NewsletterOptionField::where('name', $this->data['name']) + $option_field = NewsletterOptionField::where('name', $this->data['name']) ->findOne(); - $time_difference = strtotime($optionField->updated_at) >= $this->before_time; + $time_difference = strtotime($option_field->updated_at) >= $this->before_time; expect($time_difference)->equals(true); } function itKeepsTheCreatedAtOnUpdate() { - $optionField = NewsletterOptionField::where('name', $this->data['name']) + $option_field = NewsletterOptionField::where('name', $this->data['name']) ->findOne(); - $old_created_at = $optionField->created_at; - $optionField->name = 'new name'; - $optionField->save(); - expect($old_created_at)->equals($optionField->created_at); + $old_created_at = $option_field->created_at; + $option_field->name = 'new name'; + $option_field->save(); + expect($old_created_at)->equals($option_field->created_at); } function itUpdatesTheUpdatedAtOnUpdate() { - $optionField = NewsletterOptionField::where('name', $this->data['name']) + $option_field = NewsletterOptionField::where('name', $this->data['name']) ->findOne(); $update_time = time(); - $optionField->name = 'new name'; - $optionField->save(); - $time_difference = strtotime($optionField->updated_at) >= $update_time; + $option_field->name = 'new name'; + $option_field->save(); + $time_difference = strtotime($option_field->updated_at) >= $update_time; expect($time_difference)->equals(true); } function itCanHaveManyNewsletters() { - foreach ($this->newslettersData as $data) { + foreach($this->newsletter_data as $data) { $newsletter = Newsletter::create(); $newsletter->hydrate($data); $newsletter->save(); $association = NewsletterOption::create(); $association->newsletter_id = $newsletter->id; - $association->option_field_id = $this->optionField->id; + $association->option_field_id = $this->option_field->id; $association->save(); } - $optionField = NewsletterOptionField::findOne($this->optionField->id); - $newsletters = $optionField->newsletters() + $option_field = NewsletterOptionField::findOne($this->option_field->id); + $newsletters = $option_field->newsletters() ->findArray(); expect(count($newsletters))->equals(2); } function itCanStoreOptionValue() { $newsletter = Newsletter::create(); - $newsletter->hydrate($this->newslettersData[0]); + $newsletter->hydrate($this->newsletter_data[0]); $newsletter->save(); $association = NewsletterOption::create(); $association->newsletter_id = $newsletter->id; - $association->option_field_id = $this->optionField->id; + $association->option_field_id = $this->option_field->id; $association->value = 'list'; $association->save(); - $optionField = NewsletterOptionField::findOne($this->optionField->id); - $newsletter = $optionField->newsletters() + $option_field = NewsletterOptionField::findOne($this->option_field->id); + $newsletter = $option_field->newsletters() ->findOne(); expect($newsletter->value)->equals($association->value); } diff --git a/tests/unit/Models/SegmentCest.php b/tests/unit/Models/SegmentCest.php index ee150db381..21788f2785 100644 --- a/tests/unit/Models/SegmentCest.php +++ b/tests/unit/Models/SegmentCest.php @@ -13,7 +13,7 @@ class SegmentCest { 'name' => 'some name', 'description' => 'some description' ); - $this->subscribersData = array( + $this->subscribers_data = array( array( 'first_name' => 'John', 'last_name' => 'Mailer', @@ -27,22 +27,22 @@ class SegmentCest { 'email' => 'mike@maipoet.com' ) ); - $this->newslettersData = array( + $this->newsletters_data = array( array( - 'subject' => 'My first newsletter' + 'subject' => 'My first newsletter', + 'type' => 'standard' ), array( - 'subject' => 'My second newsletter' + 'subject' => 'My second newsletter', + 'type' => 'standard' ) ); - $this->segment = Segment::create(); - $this->segment->hydrate($this->data); - $this->saved = $this->segment->save(); + $this->segment = Segment::createOrUpdate($this->data); } function itCanBeCreated() { - expect($this->saved->id() > 0)->true(); - expect($this->saved->getErrors())->false(); + expect($this->segment->id() > 0)->true(); + expect($this->segment->getErrors())->false(); } function itCanHaveName() { @@ -108,10 +108,10 @@ class SegmentCest { function itCanCreateOrUpdate() { $is_created = Segment::createOrUpdate(array( - 'name' => 'new list' - )); - expect($is_created)->notEquals(false); - expect($is_created->getValidationErrors())->isEmpty(); + 'name' => 'new list' + )); + expect($is_created->id() > 0)->true(); + expect($is_created->getErrors())->false(); $segment = Segment::where('name', 'new list') ->findOne(); @@ -128,9 +128,9 @@ class SegmentCest { } function itCanHaveManySubscribers() { - foreach ($this->subscribersData as $subscriberData) { + foreach($this->subscribers_data as $subscriber_data) { $subscriber = Subscriber::create(); - $subscriber->hydrate($subscriberData); + $subscriber->hydrate($subscriber_data); $subscriber->save(); $association = SubscriberSegment::create(); $association->subscriber_id = $subscriber->id; @@ -145,9 +145,9 @@ class SegmentCest { } function itCanHaveManyNewsletters() { - foreach ($this->newslettersData as $newsletterData) { + foreach($this->newsletters_data as $newsletter_data) { $newsletter = Newsletter::create(); - $newsletter->hydrate($newsletterData); + $newsletter->hydrate($newsletter_data); $newsletter->save(); $association = NewsletterSegment::create(); $association->newsletter_id = $newsletter->id; @@ -162,9 +162,9 @@ class SegmentCest { } function itCanGetSegmentsWithSubscriberCount() { - foreach ($this->subscribersData as $subscriberData) { + foreach($this->subscribers_data as $subscriber_data) { $subscriber = Subscriber::create(); - $subscriber->hydrate($subscriberData); + $subscriber->hydrate($subscriber_data); $subscriber->save(); $association = SubscriberSegment::create(); $association->subscriber_id = $subscriber->id; @@ -176,9 +176,9 @@ class SegmentCest { } function itCanGetSegmentsForExport() { - foreach ($this->subscribersData as $index => $subscriberData) { + foreach($this->subscribers_data as $index => $subscriber_data) { $subscriber = Subscriber::create(); - $subscriber->hydrate($subscriberData); + $subscriber->hydrate($subscriber_data); $subscriber->save(); if(!$index) { $association = SubscriberSegment::create(); diff --git a/tests/unit/Models/SubscriberCest.php b/tests/unit/Models/SubscriberCest.php index c372d9630e..816d708998 100644 --- a/tests/unit/Models/SubscriberCest.php +++ b/tests/unit/Models/SubscriberCest.php @@ -105,75 +105,62 @@ class SubscriberCest { } function itCanHaveSegment() { - $segmentData = array( + $segment = Segment::createOrUpdate(array( 'name' => 'some name' - ); - $segment = Segment::create(); - $segment->hydrate($segmentData); - $segment->save(); + )); + expect($segment->getErrors())->false(); + $association = SubscriberSegment::create(); $association->subscriber_id = $this->subscriber->id; $association->segment_id = $segment->id; $association->save(); + $subscriber = Subscriber::findOne($this->subscriber->id); - $subscriberSegment = $subscriber->segments() - ->findOne(); - expect($subscriberSegment->id)->equals($segment->id); + + $subscriber_segment = $subscriber->segments()->findOne(); + expect($subscriber_segment->id)->equals($segment->id); } function itCanHaveCustomFields() { - $customFieldData = array( + $custom_field = CustomField::createOrUpdate(array( 'name' => 'DOB', 'type' => 'date', - ); - $customField = CustomField::create(); - $customField->hydrate($customFieldData); - $customField->save(); + )); + $association = SubscriberCustomField::create(); $association->subscriber_id = $this->subscriber->id; - $association->custom_field_id = $customField->id; + $association->custom_field_id = $custom_field->id; $association->value = '12/12/2012'; $association->save(); + $subscriber = Subscriber::filter('filterWithCustomFields') ->findOne($this->subscriber->id); expect($subscriber->DOB)->equals($association->value); } function itCanFilterCustomFields() { - $customFieldData = array( - array( - 'name' => 'City', - 'type' => 'text', - ), - array( - 'name' => 'Country', - 'type' => 'text', - ) - ); - foreach($customFieldData as $data) { - $customField = CustomField::create(); - $customField->hydrate($data); - $customField->save(); - $createdCustomFields[] = $customField->asArray(); - } - $subscriberCustomFieldData = array( - array( - 'subscriber_id' => $this->subscriber->id, - 'custom_field_id' => $createdCustomFields[0]['id'], - 'value' => 'Paris' - ), - array( - 'subscriber_id' => $this->subscriber->id, - 'custom_field_id' => $createdCustomFields[1]['id'], - 'value' => 'France' - ) - ); - foreach($subscriberCustomFieldData as $data) { - $association = SubscriberCustomField::create(); - $association->hydrate($data); - $association->save(); - $createdAssociations[] = $association->asArray(); - } + $cf_city = CustomField::createOrUpdate(array( + 'name' => 'City', + 'type' => 'text' + )); + + SubscriberCustomField::createOrUpdate(array( + 'subscriber_id' => $this->subscriber->id, + 'custom_field_id' => $cf_city->id, + 'value' => 'Paris' + )); + + $cf_country = CustomField::createOrUpdate(array( + 'name' => 'Country', + 'type' => 'text' + )); + + SubscriberCustomField::createOrUpdate(array( + 'subscriber_id' => $this->subscriber->id, + 'custom_field_id' => $cf_country->id, + 'value' => 'France' + )); + $subscriber = Subscriber::filter('filterWithCustomFields') ->filter('filterSearchCustomFields', array( array( @@ -196,6 +183,7 @@ class SubscriberCest { )) ->findArray(); expect(empty($subscriber))->false(); + $subscriber = Subscriber::filter('filterWithCustomFields') ->filter('filterSearchCustomFields', array( array( @@ -209,6 +197,7 @@ class SubscriberCest { ), 'OR') ->findArray(); expect(empty($subscriber))->false(); + $subscriber = Subscriber::filter('filterWithCustomFields') ->filter('filterSearchCustomFields', array( array( @@ -218,6 +207,7 @@ class SubscriberCest { ), 'AND', 'LIKE') ->findArray(); expect(empty($subscriber))->false(); + $subscriber = Subscriber::filter('filterWithCustomFields') ->filter('filterSearchCustomFields', array( array( @@ -227,6 +217,7 @@ class SubscriberCest { )) ->findArray(); expect(empty($subscriber))->true(); + $subscriber = Subscriber::filter('filterWithCustomFields') ->filter('filterSearchCustomFields', array( array( @@ -240,6 +231,7 @@ class SubscriberCest { )) ->findArray(); expect(empty($subscriber))->true(); + $subscriber = Subscriber::filter('filterWithCustomFields') ->filter('filterSearchCustomFields', array( array( @@ -253,6 +245,7 @@ class SubscriberCest { ), 'OR') ->findArray(); expect(empty($subscriber))->true(); + $subscriber = Subscriber::filter('filterWithCustomFields') ->filter('filterSearchCustomFields', array( array( @@ -271,8 +264,8 @@ class SubscriberCest { 'last_name' => 'Doe' ); $result = Subscriber::createOrUpdate($data); - expect($result)->notEquals(false); - expect($result->getValidationErrors())->isEmpty(); + expect($result->id() > 0)->true(); + expect($result->getErrors())->false(); $record = Subscriber::where('email', $data['email']) ->findOne(); diff --git a/tests/unit/Router/FormsCest.php b/tests/unit/Router/FormsCest.php index e02709844b..ef1661a634 100644 --- a/tests/unit/Router/FormsCest.php +++ b/tests/unit/Router/FormsCest.php @@ -40,16 +40,6 @@ class FormsCest { expect($response['items'][2]['name'])->equals('Form 3'); } - function itCanGetAllForms() { - $forms = Form::findArray(); - - $router = new Forms(); - $response = $router->getAll(); - - expect($response)->count(3); - expect($response)->equals($forms); - } - function itCanCreateANewForm() { $router = new Forms(); $response = $router->create(); diff --git a/tests/unit/Router/NewsletterTemplatesCest.php b/tests/unit/Router/NewsletterTemplatesCest.php index 73d0103864..6a25f87c94 100644 --- a/tests/unit/Router/NewsletterTemplatesCest.php +++ b/tests/unit/Router/NewsletterTemplatesCest.php @@ -56,8 +56,7 @@ class NewsletterTemplatesCest { $router = new NewsletterTemplates(); $response = $router->save($template_data); - - expect($response->id() > 0)->true(); + expect($response)->true(); $template = NewsletterTemplate::where('name', 'Template #3')->findOne(); expect($template->name)->equals('Template #3'); diff --git a/tests/unit/Router/NewslettersCest.php b/tests/unit/Router/NewslettersCest.php new file mode 100644 index 0000000000..d6f511f0e7 --- /dev/null +++ b/tests/unit/Router/NewslettersCest.php @@ -0,0 +1,208 @@ + 'My First Newsletter', + 'type' => 'standard' + )); + expect($newsletter->id() > 0)->true(); + + $router = new Newsletters(); + + $response = $router->get($newsletter->id()); + + expect($response['id'])->equals($newsletter->id()); + + $response = $router->get('not_an_id'); + expect($response)->false(); + + $response = $router->get(/* missing argument */); + expect($response)->false(); + } + + function itCanSaveANewNewsletter() { + $valid_data = array( + 'subject' => 'My First Newsletter', + 'type' => 'standard' + ); + + $router = new Newsletters(); + $response = $router->save($valid_data); + expect($response['result'])->true(); + expect($response)->hasntKey('errors'); + + $invalid_data = array( + 'subject' => 'Missing newsletter type' + ); + + $response = $router->save($invalid_data); + expect($response['result'])->false(); + expect($response['errors'][0])->equals('You need to specify a type.'); + } + + function itCanSaveAnExistingNewsletter() { + $newsletter = Newsletter::createOrUpdate(array( + 'subject' => 'My First Newsletter', + 'type' => 'standard' + )); + expect($newsletter->id() > 0)->true(); + + $router = new Newsletters(); + $newsletter_data = $newsletter->asArray(); + $newsletter_data['subject'] = 'My Updated Newsletter'; + + $response = $router->save($newsletter_data); + expect($response['result'])->true(); + + $updated_newsletter = Newsletter::findOne($newsletter->id()); + expect($updated_newsletter->subject)->equals('My Updated Newsletter'); + } + + function itCanRestoreANewsletter() { + $newsletter = Newsletter::createOrUpdate(array( + 'subject' => 'My First Newsletter', + 'type' => 'standard' + )); + expect($newsletter->id() > 0)->true(); + + $newsletter->trash(); + + expect($newsletter->deleted_at)->notNull(); + + $router = new Newsletters(); + $router->restore($newsletter->id()); + + $restored_subscriber = Newsletter::findOne($newsletter->id()); + expect($restored_subscriber->deleted_at)->null(); + } + + function itCanTrashANewsletter() { + $newsletter = Newsletter::createOrUpdate(array( + 'subject' => 'My First Newsletter', + 'type' => 'standard' + )); + expect($newsletter->id() > 0)->true(); + + $router = new Newsletters(); + $response = $router->trash($newsletter->id()); + expect($response)->true(); + + $trashed_subscriber = Newsletter::findOne($newsletter->id()); + expect($trashed_subscriber->deleted_at)->notNull(); + } + + function itCanDeleteANewsletter() { + $newsletter = Newsletter::createOrUpdate(array( + 'subject' => 'My First Newsletter', + 'type' => 'standard' + )); + expect($newsletter->id() > 0)->true(); + + $router = new Newsletters(); + $response = $router->delete($newsletter->id()); + expect($response)->equals(1); + + expect(Newsletter::findOne($newsletter->id()))->false(); + } + + function itCanDuplicateANewsletter() { + $newsletter = Newsletter::createOrUpdate(array( + 'subject' => 'My First Newsletter', + 'type' => 'standard' + )); + expect($newsletter->id() > 0)->true(); + + $router = new Newsletters(); + $response = $router->duplicate($newsletter->id()); + expect($response['subject'])->equals('Copy of My First Newsletter'); + expect($response['type'])->equals('standard'); + expect($response['body'])->equals($newsletter->body); + } + + function itCanCreateANewsletter() { + $data = array( + 'subject' => 'My New Newsletter', + 'type' => 'standard' + ); + $router = new Newsletters(); + $response = $router->create($data); + expect($response['result'])->true(); + expect($response['newsletter']['id'] > 0)->true(); + expect($response['newsletter']['subject'])->equals('My New Newsletter'); + expect($response['newsletter']['type'])->equals('standard'); + expect($response['newsletter']['body'])->equals(array()); + expect($response)->hasntKey('errors'); + + $response = $router->create(); + expect($response['result'])->false(); + expect($response['errors'][0])->equals('You need to specify a type.'); + } + + function itCanGetListingData() { + $segment_1 = Segment::createOrUpdate(array('name' => 'Segment 1')); + $segment_2 = Segment::createOrUpdate(array('name' => 'Segment 2')); + + $newsletter_1 = Newsletter::createOrUpdate(array( + 'subject' => 'My First Newsletter', + 'type' => 'standard' + )); + $newsletter_2 = Newsletter::createOrUpdate(array( + 'subject' => 'My Second Newsletter', + 'type' => 'standard' + )); + + $newsletter_segment = NewsletterSegment::create(); + $newsletter_segment->hydrate(array( + 'newsletter_id' => $newsletter_1->id(), + 'segment_id' => $segment_1->id() + )); + $newsletter_segment->save(); + + $newsletter_segment = NewsletterSegment::create(); + $newsletter_segment->hydrate(array( + 'newsletter_id' => $newsletter_1->id(), + 'segment_id' => $segment_2->id() + )); + $newsletter_segment->save(); + + $newsletter_segment = NewsletterSegment::create(); + $newsletter_segment->hydrate(array( + 'newsletter_id' => $newsletter_2->id(), + 'segment_id' => $segment_2->id() + )); + $newsletter_segment->save(); + + $router = new Newsletters(); + $response = $router->listing(array('sort')); + + expect($response)->hasKey('filters'); + expect($response)->hasKey('groups'); + + expect($response['count'])->equals(2); + expect($response['items'])->count(2); + + expect($response['items'][0]['subject'])->equals('My First Newsletter'); + expect($response['items'][1]['subject'])->equals('My Second Newsletter'); + expect($response['items'][0]['segments'])->equals(array( + $segment_1->id(), + $segment_2->id() + )); + expect($response['items'][1]['segments'])->equals(array( + $segment_2->id() + )); + } + + function _after() { + Newsletter::deleteMany(); + Segment::deleteMany(); + } +} \ No newline at end of file diff --git a/tests/unit/Router/SegmentsCest.php b/tests/unit/Router/SegmentsCest.php index 1822ffdcfa..25d078a7fc 100644 --- a/tests/unit/Router/SegmentsCest.php +++ b/tests/unit/Router/SegmentsCest.php @@ -38,15 +38,6 @@ class SegmentsCest { expect($response['items'][2]['name'])->equals('Segment 3'); } - function itCanGetAllSegments() { - $router = new Segments(); - $segments = Segment::findArray(); - - $response = $router->getAll(); - expect($response)->count(3); - expect($response)->equals($segments); - } - function itCanSaveASegment() { $segment_data = array( 'name' => 'New Segment' diff --git a/tests/unit/Router/SubscribersCest.php b/tests/unit/Router/SubscribersCest.php index 5f711cb61c..fb68df245b 100644 --- a/tests/unit/Router/SubscribersCest.php +++ b/tests/unit/Router/SubscribersCest.php @@ -6,7 +6,6 @@ use \MailPoet\Models\Segment; class SubscribersCest { function _before() { - } function itCanGetASubscriber() { @@ -27,21 +26,6 @@ class SubscribersCest { expect($response)->false(); } - function itCanGetAllSubscribers(UnitTester $I) { - $I->generateSubscribers(10); - - $router = new Subscribers(); - $result = $router->getAll(); - - expect($result)->count(10); - - $model = Subscriber::create(); - foreach($result as $subscriber) { - expect($subscriber['id'] > 0)->true(); - expect($subscriber['email'])->notEmpty(); - } - } - function itCanSaveANewSubscriber() { $valid_data = array( 'email' => 'john.doe@mailpoet.com', @@ -50,9 +34,13 @@ class SubscribersCest { ); $router = new Subscribers(); - $response = $router->save($valid_data); expect($response['result'])->true(); + expect($response)->hasntKey('errors'); + + $response = $router->save(/* missing data */); + expect($response['result'])->false(); + expect($response['errors'][0])->equals('You need to enter your email address.'); $invalid_data = array( 'email' => 'john.doe@invalid', diff --git a/tests/unit/Subscribers/ImportExport/BootStrapMenuCest.php b/tests/unit/Subscribers/ImportExport/BootStrapMenuCest.php index 79f99debd0..f52ab91f68 100644 --- a/tests/unit/Subscribers/ImportExport/BootStrapMenuCest.php +++ b/tests/unit/Subscribers/ImportExport/BootStrapMenuCest.php @@ -8,67 +8,76 @@ use MailPoet\Subscribers\ImportExport\BootStrapMenu; class BootStrapMenuCest { function _before() { - $this->segmentsData = array( - array( - 'name' => 'first', - 'description' => 'some description' - ), - array( - 'name' => 'second', - 'description' => 'some description' - ) - ); - $this->subscribersData = array( - array( - 'first_name' => 'John', - 'last_name' => 'Mailer', - 'status' => 'unconfirmed', - 'email' => 'john@mailpoet.com' - ), - array( - 'first_name' => 'Mike', - 'last_name' => 'Smith', - 'status' => 'subscribed', - 'email' => 'mike@maipoet.com' - ) - ); - $this->customFieldsData = array( - 'name' => 'DOB', - 'type' => 'date', - ); - $customField = CustomField::create(); - $customField->hydrate($this->customFieldsData); - $customField->save(); + $segment_1 = Segment::createOrUpdate(array('name' => 'Unconfirmed Segment')); + $segment_2 = Segment::createOrUpdate(array('name' => 'Confirmed Segment')); + + $subscriber_1 = Subscriber::createOrUpdate(array( + 'first_name' => 'John', + 'last_name' => 'Mailer', + 'status' => 'unconfirmed', + 'email' => 'john@mailpoet.com' + )); + + $subscriber_2 = Subscriber::createOrUpdate(array( + 'first_name' => 'Mike', + 'last_name' => 'Smith', + 'status' => 'subscribed', + 'email' => 'mike@maipoet.com' + )); + + $association = SubscriberSegment::create(); + $association->subscriber_id = $subscriber_1->id; + $association->segment_id = $segment_1->id; + $association->save(); + + $association = SubscriberSegment::create(); + $association->subscriber_id = $subscriber_2->id; + $association->segment_id = $segment_2->id; + $association->save(); + + CustomField::createOrUpdate(array( + 'name' => 'Birthday', + 'type' => 'date' + )); + $this->bootStrapImportMenu = new BootStrapMenu('import'); $this->bootStrapExportMenu = new BootStrapMenu('export'); } function itCanGetSegmentsWithSubscriberCount() { - // TOFIX. - /*$this->_createSegmentsAndSubscribers(); $segments = $this->bootStrapImportMenu->getSegments(); expect(count($segments))->equals(2); - expect($segments[0]['name'])->equals($this->segmentsData[0]['name']); + expect($segments[0]['name'])->equals('Unconfirmed Segment'); expect($segments[0]['subscriberCount'])->equals(1); - expect($segments[1]['subscriberCount'])->equals(1);*/ + expect($segments[1]['name'])->equals('Confirmed Segment'); + expect($segments[1]['subscriberCount'])->equals(1); } - function itCanGetSegmentsForImportWithoutTrashedSubscribers() { - $this->_createSegmentsAndSubscribers(); + function itCanGetPublicSegmentsForImport() { + $segments = $this->bootStrapImportMenu->getSegments(); expect(count($segments))->equals(2); - $subscriber = Subscriber::findOne(1); - $subscriber->deleted_at = date('Y-m-d H:i:s'); - $subscriber->save(); + + $subscriber = Subscriber::where( + 'email', 'john@mailpoet.com' + )->findOne(); + expect($subscriber->deleted_at)->null(); + $subscriber->trash(); + + $subscriber = Subscriber::where( + 'email', 'john@mailpoet.com' + )->whereNull('deleted_at')->findOne(); + expect($subscriber)->false(); + $segments = $this->bootStrapImportMenu->getSegments(); expect(count($segments))->equals(1); } - function itCanGetSegmentsForExportWithoutTrashedSubscribers() { - $this->_createSegmentsAndSubscribers(); + function itCanGetPublicSegmentsForExport() { $segments = $this->bootStrapExportMenu->getSegments(); expect(count($segments))->equals(2); - $subscriber = Subscriber::findOne(1); + $subscriber = Subscriber::where('email', 'john@mailpoet.com') + ->findOne(); $subscriber->deleted_at = date('Y-m-d H:i:s'); $subscriber->save(); $segments = $this->bootStrapExportMenu->getSegments(); @@ -76,21 +85,21 @@ class BootStrapMenuCest { } function itCanGetSegmentsForExport() { - $this->_createSegmentsAndSubscribers(); $segments = $this->bootStrapExportMenu->getSegments(); expect(count($segments))->equals(2); - expect($segments[0]['name'])->equals($this->segmentsData[0]['name']); + + expect($segments[0]['name'])->equals('Confirmed Segment'); expect($segments[0]['subscriberCount'])->equals(1); + expect($segments[1]['name'])->equals('Unconfirmed Segment'); expect($segments[1]['subscriberCount'])->equals(1); } function itCanGetSegmentsWithConfirmedSubscribersForExport() { - $this->_createSegmentsAndSubscribers(); $segments = $this->bootStrapExportMenu->getSegments( $withConfirmedSubscribers = true ); expect(count($segments))->equals(1); - expect($segments[0]['name'])->equals($this->segmentsData[1]['name']); + expect($segments[0]['name'])->equals('Confirmed Segment'); } function itCanGetSubscriberFields() { @@ -101,7 +110,7 @@ class BootStrapMenuCest { 'last_name', 'status' ); - foreach ($fields as $field) { + foreach($fields as $field) { expect(in_array($field, array_keys($subsriberFields)))->true(); } } @@ -117,7 +126,7 @@ class BootStrapMenuCest { 'type', 'custom' ); - foreach ($fields as $field) { + foreach($fields as $field) { expect(in_array($field, array_keys($formattedSubscriberFields[0]))) ->true(); } @@ -129,7 +138,7 @@ class BootStrapMenuCest { $this->bootStrapImportMenu ->getSubscriberCustomFields(); expect($subscriberCustomFields[0]['type']) - ->equals($this->customFieldsData['type']); + ->equals('date'); } function itCanFormatSubsciberCustomFields() { @@ -143,7 +152,7 @@ class BootStrapMenuCest { 'type', 'custom' ); - foreach ($fields as $field) { + foreach($fields as $field) { expect(in_array($field, array_keys($formattedSubscriberCustomFields[0]))) ->true(); } @@ -241,10 +250,6 @@ class BootStrapMenuCest { } function itCanBootStrapImport() { - $customField = CustomField::create(); - $customField->hydrate($this->customFieldsData); - $customField->save(); - $this->_createSegmentsAndSubscribers(); $import = clone($this->bootStrapImportMenu); $importMenu = $import->bootstrap(); expect(count(json_decode($importMenu['segments'], true))) @@ -257,15 +262,11 @@ class BootStrapMenuCest { ->equals(3); expect($importMenu['maxPostSize'])->equals(ini_get('post_max_size')); expect($importMenu['maxPostSizeBytes'])->equals( - (int) ini_get('post_max_size') * 1048576 + (int)ini_get('post_max_size') * 1048576 ); } function itCanBootStrapExport() { - $customField = CustomField::create(); - $customField->hydrate($this->customFieldsData); - $customField->save(); - $this->_createSegmentsAndSubscribers(); $export = clone($this->bootStrapImportMenu); $exportMenu = $export->bootstrap(); expect(count(json_decode($exportMenu['segments'], true))) @@ -275,27 +276,10 @@ class BootStrapMenuCest { ->equals(3); } - function _createSegmentsAndSubscribers() { - foreach ($this->segmentsData as $segmentData) { - $segment = Segment::create(); - $segment->hydrate($segmentData); - $segment->save(); - } - foreach ($this->subscribersData as $subscriberData) { - $subscriber = Subscriber::create(); - $subscriber->hydrate($subscriberData); - $subscriber->save(); - $association = SubscriberSegment::create(); - $association->subscriber_id = $subscriber->id; - $association->segment_id = $subscriber->id; - $association->save(); - }; - } - function _after() { - ORM::raw_execute('TRUNCATE ' . Subscriber::$_table); - ORM::raw_execute('TRUNCATE ' . Segment::$_table); - ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table); - ORM::raw_execute('TRUNCATE ' . CustomField::$_table); + Subscriber::deleteMany(); + Segment::deleteMany(); + SubscriberSegment::deleteMany(); + CustomField::deleteMany(); } } \ No newline at end of file diff --git a/tests/unit/Subscribers/ImportExport/Export/ExportCest.php b/tests/unit/Subscribers/ImportExport/Export/ExportCest.php index 0d21ea836a..5db81bc9b8 100644 --- a/tests/unit/Subscribers/ImportExport/Export/ExportCest.php +++ b/tests/unit/Subscribers/ImportExport/Export/ExportCest.php @@ -146,7 +146,7 @@ class ExportCest { expect($target)->equals(array($source->id => $source->name)); } - function itCanFormatsubscriber_fields() { + function itCanFormatSubscriberFields() { $formatted_subscriber_fields = $this->export->formatSubscriberFields( array_keys($this->subscriber_fields), $this->export->getSubscriberCustomFields()