Major update of unit tests / updated routers + models + react

This commit is contained in:
Jonathan Labreuille
2016-02-04 19:04:52 +01:00
parent 233020ca20
commit 55f851208b
25 changed files with 523 additions and 441 deletions

View File

@ -29,7 +29,7 @@ define(
action: 'save', action: 'save',
data: template data: template
}).done(function(response) { }).done(function(response) {
if(response === true) { if(response.result === true) {
this.props.onImport(template); this.props.onImport(template);
} else { } else {
response.map(function(error) { response.map(function(error) {

View File

@ -29,12 +29,14 @@ define(
subject: 'Draft newsletter', subject: 'Draft newsletter',
} }
}).done(function(response) { }).done(function(response) {
if(response.id !== undefined) { if(response.result && response.newsletter.id) {
this.history.pushState(null, `/template/${response.id}`); this.history.pushState(null, `/template/${response.newsletter.id}`);
} else { } else {
response.map(function(error) { if(response.errors.length > 0) {
MailPoet.Notice.error(error); response.errors.map(function(error) {
}); MailPoet.Notice.error(error);
});
}
} }
}.bind(this)); }.bind(this));
}, },

View File

@ -138,12 +138,14 @@ define(
options: this.state, options: this.state,
}, },
}).done(function(response) { }).done(function(response) {
if(response.id !== undefined) { if(response.result && response.newsletter.id) {
this.showTemplateSelection(response.id); this.showTemplateSelection(response.newsletter.id);
} else { } else {
response.map(function(error) { if(response.errors.length > 0) {
MailPoet.Notice.error(error); response.errors.map(function(error) {
}); MailPoet.Notice.error(error);
});
}
} }
}.bind(this)); }.bind(this));
}, },

View File

@ -32,12 +32,15 @@ define(
type: 'standard', type: 'standard',
} }
}).done(function(response) { }).done(function(response) {
if(response.id !== undefined) { console.log(response);
this.showTemplateSelection(response.id); if(response.result && response.newsletter.id) {
this.showTemplateSelection(response.newsletter.id);
} else { } else {
response.map(function(error) { if(response.errors.length > 0) {
MailPoet.Notice.error(error); response.errors.map(function(error) {
}); MailPoet.Notice.error(error);
});
}
} }
}.bind(this)); }.bind(this));
}, },

View File

@ -111,12 +111,14 @@ define(
options: this.state, options: this.state,
}, },
}).done(function(response) { }).done(function(response) {
if(response.id !== undefined) { if(response.result && response.newsletter.id) {
this.showTemplateSelection(response.id); this.showTemplateSelection(response.newsletter.id);
} else { } else {
response.map(function(error) { if(response.errors.length > 0) {
MailPoet.Notice.error(error); response.errors.map(function(error) {
}); MailPoet.Notice.error(error);
});
}
} }
}.bind(this)); }.bind(this));
}, },

View File

@ -19,20 +19,24 @@ class CustomField extends Model {
function asArray() { function asArray() {
$model = parent::asArray(); $model = parent::asArray();
$model['params'] = ( if(isset($model['params'])) {
is_serialized($this->params) $model['params'] = (
? unserialize($this->params) is_array($this->params)
: $this->params ? $this->params
); : unserialize($this->params)
);
}
return $model; return $model;
} }
function save() { function save() {
if(is_null($this->params)) {
$this->params = array();
}
$this->set('params', ( $this->set('params', (
is_serialized($this->params) is_array($this->params)
? $this->params ? serialize($this->params)
: serialize($this->params) : $this->params
)); ));
return parent::save(); return parent::save();
} }
@ -66,12 +70,6 @@ class CustomField extends Model {
$custom_field->set($data); $custom_field->set($data);
} }
try { return $custom_field->save();
$custom_field->save();
return $custom_field;
} catch(Exception $e) {
return $custom_field->getValidationErrors();
}
return false;
} }
} }

View File

@ -8,6 +8,10 @@ class Newsletter extends Model {
function __construct() { function __construct() {
parent::__construct(); parent::__construct();
$this->addValidations('type', array(
'required' => __('You need to specify a type.')
));
} }
function save() { function save() {
@ -15,9 +19,23 @@ class Newsletter extends Model {
$this->set_expr('deleted_at', 'NULL'); $this->set_expr('deleted_at', 'NULL');
} }
$this->set('body',
is_array($this->body)
? json_encode($this->body)
: $this->body
);
return parent::save(); return parent::save();
} }
function asArray() {
$model = parent::asArray();
if(isset($model['body'])) {
$model['body'] = json_decode($model['body'], true);
}
return $model;
}
function delete() { function delete() {
// delete all relations to segments // delete all relations to segments
NewsletterSegment::where('newsletter_id', $this->id)->deleteMany(); NewsletterSegment::where('newsletter_id', $this->id)->deleteMany();

View File

@ -33,30 +33,19 @@ class CustomFields {
function save($data = array()) { function save($data = array()) {
$custom_field = CustomField::createOrUpdate($data); $custom_field = CustomField::createOrUpdate($data);
$errors = $custom_field->getErrors();
if($custom_field === false) { if(!empty($errors)) {
$result = array( return array(
'result' => false, 'result' => false,
'errors' => array( 'errors' => $errors
__('The custom field could not be created.')
)
); );
} else { } else {
$errors = $custom_field->getValidationErrors(); return array(
if(!empty($errors)) { 'result' => true,
$result = array( 'field' => $custom_field->asArray()
'result' => false, );
'errors' => $errors
);
} else {
$result = array(
'result' => true,
'field' => $custom_field->asArray()
);
}
} }
return $result;
} }
function get($id) { function get($id) {

View File

@ -47,10 +47,6 @@ class Forms {
return $listing_data; return $listing_data;
} }
function getAll() {
return Form::findArray();
}
function create() { function create() {
// create new form // create new form
$form_data = array( $form_data = array(
@ -89,16 +85,17 @@ class Forms {
function save($data = array()) { function save($data = array()) {
$form = Form::createOrUpdate($data); $form = Form::createOrUpdate($data);
$errors = $form->getErrors();
if($form !== false && $form->id()) { if(!empty($errors)) {
return array( return array(
'result' => true, 'result' => false,
'form_id' => $form->id() 'errors' => $errors
); );
} else { } else {
return array( return array(
'result' => false, 'result' => true,
'errors' => $form->getValidationErrors() 'form_id' => $form->id()
); );
} }
} }

View File

@ -26,21 +26,16 @@ class NewsletterTemplates {
} }
function save($data = array()) { function save($data = array()) {
$result = NewsletterTemplate::createOrUpdate($data); $template = NewsletterTemplate::createOrUpdate($data);
if($result !== true) { return ($template->getErrors() === false && $template->id() > 0);
return $result;
} else {
return true;
}
} }
function delete($id) { function delete($id) {
$template = NewsletterTemplate::findOne($id); $template = NewsletterTemplate::findOne($id);
if($template !== false) { if($template !== false) {
$result = $template->delete(); return $template->delete();
} else { } else {
$result = false; return false;
} }
return $result;
} }
} }

View File

@ -33,42 +33,32 @@ class Newsletters {
return $segment['id']; return $segment['id'];
}, $segments); }, $segments);
$newsletter['options'] = $options; $newsletter['options'] = $options;
$newsletter['body'] = json_decode($newsletter['body']);
return $newsletter; 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()) { function save($data = array()) {
$segment_ids = array();
if(isset($data['segments'])) { if(isset($data['segments'])) {
$segment_ids = $data['segments']; $segment_ids = $data['segments'];
unset($data['segments']); unset($data['segments']);
} }
$options = array();
if(isset($data['options'])) { if(isset($data['options'])) {
$options = $data['options']; $options = $data['options'];
unset($data['options']); unset($data['options']);
} }
$errors = array();
$result = false;
$newsletter = Newsletter::createOrUpdate($data); $newsletter = Newsletter::createOrUpdate($data);
$errors = $newsletter->getErrors();
if($newsletter !== false && !$newsletter->id()) { if(!empty($errors)) {
$errors = $newsletter->getValidationErrors(); return array(
'result' => false,
'errors' => $errors
);
} else { } else {
$result = true;
if(!empty($segment_ids)) { if(!empty($segment_ids)) {
NewsletterSegment::where('newsletter_id', $newsletter->id) NewsletterSegment::where('newsletter_id', $newsletter->id)
->deleteMany(); ->deleteMany();
@ -100,117 +90,51 @@ class Newsletters {
} }
} }
} }
return array(
'result' => true
);
} }
wp_send_json(array(
'result' => $result,
'errors' => $errors
));
} }
function restore($id) { function restore($id) {
$result = false;
$newsletter = Newsletter::findOne($id); $newsletter = Newsletter::findOne($id);
if($newsletter !== false) { if($newsletter !== false) {
$result = $newsletter->restore(); $newsletter->restore();
} }
return ($newsletter->getErrors() === false);
wp_send_json($result);
} }
function trash($id) { function trash($id) {
$result = false;
$newsletter = Newsletter::findOne($id); $newsletter = Newsletter::findOne($id);
if($newsletter !== false) { if($newsletter !== false) {
$result = $newsletter->trash(); $newsletter->trash();
} }
return ($newsletter->getErrors() === false);
wp_send_json($result);
} }
function delete($id) { function delete($id) {
$result = false;
$newsletter = Newsletter::findOne($id); $newsletter = Newsletter::findOne($id);
if($newsletter !== false) { if($newsletter !== false) {
$newsletter->delete(); $newsletter->delete();
$result = 1; return 1;
} }
return false;
wp_send_json($result);
} }
function duplicate($id) { function duplicate($id = false) {
$result = false;
$newsletter = Newsletter::findOne($id); $newsletter = Newsletter::findOne($id);
if($newsletter !== false) { if($newsletter !== false) {
$data = array( return $newsletter->duplicate(array(
'subject' => sprintf(__('Copy of %s'), $newsletter->subject) 'subject' => sprintf(__('Copy of %s'), $newsletter->subject)
); ))->asArray();
$result = $newsletter->duplicate($data)->asArray();
} }
return false;
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);
} }
function render($data = array()) { function render($data = array()) {
if(!isset($data['body'])) { if(!isset($data['body'])) {
wp_send_json(false); return false;
} }
$renderer = new Renderer($data); $renderer = new Renderer($data);
$rendered_newsletter = $renderer->render(); $rendered_newsletter = $renderer->render();
@ -219,7 +143,7 @@ class Newsletters {
$data $data
); );
$rendered_newsletter = $shortcodes->replace(); $rendered_newsletter = $shortcodes->replace();
wp_send_json(array('rendered_body' => $rendered_newsletter)); return array('rendered_body' => $rendered_newsletter);
} }
function sendPreview($data = array()) { function sendPreview($data = array()) {
@ -227,15 +151,15 @@ class Newsletters {
$newsletter = Newsletter::findOne($id); $newsletter = Newsletter::findOne($id);
if($newsletter === false) { if($newsletter === false) {
wp_send_json(array( return array(
'result' => false 'result' => false
)); );
} }
if(empty($data['subscriber'])) { if(empty($data['subscriber'])) {
wp_send_json(array( return array(
'result' => false, 'result' => false,
'errors' => array(__('Please specify receiver information')), 'errors' => array(__('Please specify receiver information'))
)); );
} }
$newsletter = $newsletter->asArray(); $newsletter = $newsletter->asArray();
@ -263,7 +187,7 @@ class Newsletters {
$sender = false, $sender = false,
$reply_to = false $reply_to = false
); );
$result = $mailer->send($newsletter, $data['subscriber']) $result = $mailer->send($newsletter, $data['subscriber']);
return array('result' => $result); return array('result' => $result);
} catch(\Exception $e) { } catch(\Exception $e) {
@ -310,27 +234,30 @@ class Newsletters {
} }
function create($data = array()) { function create($data = array()) {
$newsletter = Newsletter::create(); $options = array();
$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;
}
if(isset($data['options'])) { if(isset($data['options'])) {
$options = $data['options']; $options = $data['options'];
unset($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(); $newsletter->save();
$errors = $newsletter->getErrors(); $errors = $newsletter->getErrors();
if(!empty($errors)) { if(!empty($errors)) {
return $errors; return array(
'result' => false,
'errors' =>$errors
);
} else { } else {
if(!empty($options)) { if(!empty($options)) {
$option_fields = NewsletterOptionField::where( $option_fields = NewsletterOptionField::where(
@ -347,8 +274,10 @@ class Newsletters {
} }
} }
} }
$newsletter->body = json_decode($newsletter->body); return array(
return $newsletter->asArray(); 'result' => true,
'newsletter' => $newsletter->asArray()
);
} }
} }
} }

View File

@ -65,10 +65,6 @@ class Segments {
return $listing_data; return $listing_data;
} }
function getAll() {
return Segment::findArray();
}
function save($data = array()) { function save($data = array()) {
$errors = array(); $errors = array();
$result = false; $result = false;

View File

@ -56,35 +56,30 @@ class Subscribers {
return $listing_data; return $listing_data;
} }
function getAll() {
return Subscriber::findArray();
}
function save($data = array()) { function save($data = array()) {
$errors = array();
$result = false;
$segment_ids = array(); $segment_ids = array();
if(array_key_exists('segments', $data)) { if(isset($data['segments'])) {
$segment_ids = (array)$data['segments']; $segment_ids = (array)$data['segments'];
unset($data['segments']); unset($data['segments']);
} }
$subscriber = Subscriber::createOrUpdate($data); $subscriber = Subscriber::createOrUpdate($data);
$errors = $subscriber->getErrors();
if($subscriber !== false && !$subscriber->id()) { if(!empty($errors)) {
$errors = $subscriber->getValidationErrors(); return array(
'result' => false,
'errors' => $errors
);
} else { } else {
$result = true;
if(!empty($segment_ids)) { if(!empty($segment_ids)) {
$subscriber->addToSegments($segment_ids); $subscriber->addToSegments($segment_ids);
} }
return array(
'result' => true
);
} }
return array(
'result' => $result,
'errors' => $errors
);
} }
function subscribe($data = array()) { function subscribe($data = array()) {

View File

@ -43,7 +43,7 @@ class CustomFieldCest {
} }
function itCanHaveParams() { function itCanHaveParams() {
expect(unserialize($this->customField->params))->equals($this->data['params']); expect($this->customField->params)->equals($this->data['params']);
} }
function itHasToBeValid() { function itHasToBeValid() {

View File

@ -11,8 +11,8 @@ class NewsletterCest {
$this->before_time = time(); $this->before_time = time();
$this->data = array( $this->data = array(
'subject' => 'new newsletter', 'subject' => 'new newsletter',
'body' => 'body',
'type' => 'standard', 'type' => 'standard',
'body' => 'body',
'preheader' => 'preheader' 'preheader' => 'preheader'
); );
@ -78,10 +78,11 @@ class NewsletterCest {
$is_created = Newsletter::createOrUpdate( $is_created = Newsletter::createOrUpdate(
array( array(
'subject' => 'new newsletter', 'subject' => 'new newsletter',
'type' => 'standard',
'body' => 'body' 'body' => 'body'
)); ));
expect($is_created)->notEquals(false); expect($is_created->id() > 0)->true();
expect($is_created->getValidationErrors())->isEmpty(); expect($is_created->getErrors())->false();
$newsletter = Newsletter::where('subject', 'new newsletter') $newsletter = Newsletter::where('subject', 'new newsletter')
->findOne(); ->findOne();
@ -90,8 +91,7 @@ class NewsletterCest {
$is_updated = Newsletter::createOrUpdate( $is_updated = Newsletter::createOrUpdate(
array( array(
'id' => $newsletter->id, 'id' => $newsletter->id,
'subject' => 'updated newsletter', 'subject' => 'updated newsletter'
'body' => 'body'
)); ));
$newsletter = Newsletter::findOne($newsletter->id); $newsletter = Newsletter::findOne($newsletter->id);
expect($newsletter->subject)->equals('updated newsletter'); expect($newsletter->subject)->equals('updated newsletter');
@ -101,6 +101,7 @@ class NewsletterCest {
Newsletter::createOrUpdate( Newsletter::createOrUpdate(
array( array(
'subject' => 'search for "pineapple"', 'subject' => 'search for "pineapple"',
'type' => 'standard',
'body' => 'body' 'body' => 'body'
)); ));
$newsletter = Newsletter::filter('search', 'pineapple') $newsletter = Newsletter::filter('search', 'pineapple')

View File

@ -9,19 +9,21 @@ class NewsletterOptionFieldCest {
$this->before_time = time(); $this->before_time = time();
$this->data = array( $this->data = array(
'name' => 'Event', 'name' => 'Event',
'newsletter_type' => 'welcome', 'newsletter_type' => 'welcome'
); );
$this->optionField = NewsletterOptionField::create(); $this->option_field = NewsletterOptionField::create();
$this->optionField->hydrate($this->data); $this->option_field->hydrate($this->data);
$this->saved = $this->optionField->save(); $this->saved = $this->option_field->save();
$this->newslettersData = array( $this->newsletter_data = array(
array( array(
'subject' => 'Test newsletter 1', 'subject' => 'Test newsletter 1',
'type' => 'standard',
'preheader' => '', 'preheader' => '',
'body' => '{}' 'body' => '{}'
), ),
array( array(
'subject' => 'Test newsletter 2', 'subject' => 'Test newsletter 2',
'type' => 'standard',
'preheader' => 'A newsletter', 'preheader' => 'A newsletter',
'body' => '{}' 'body' => '{}'
) )
@ -34,15 +36,15 @@ class NewsletterOptionFieldCest {
} }
function itHasName() { function itHasName() {
$optionField = NewsletterOptionField::where('name', $this->data['name']) $option_field = NewsletterOptionField::where('name', $this->data['name'])
->findOne(); ->findOne();
expect($optionField->name)->equals($this->data['name']); expect($option_field->name)->equals($this->data['name']);
} }
function itHasNewsletterType() { function itHasNewsletterType() {
$optionField = NewsletterOptionField::where('name', $this->data['name']) $option_field = NewsletterOptionField::where('name', $this->data['name'])
->findOne(); ->findOne();
expect($optionField->newsletter_type)->equals($this->data['newsletter_type']); expect($option_field->newsletter_type)->equals($this->data['newsletter_type']);
} }
function itHasToBeValid() { function itHasToBeValid() {
@ -56,65 +58,65 @@ class NewsletterOptionFieldCest {
} }
function itHasACreatedAtOnCreation() { function itHasACreatedAtOnCreation() {
$optionField = NewsletterOptionField::where('name', $this->data['name']) $option_field = NewsletterOptionField::where('name', $this->data['name'])
->findOne(); ->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); expect($time_difference)->equals(true);
} }
function itHasAnUpdatedAtOnCreation() { function itHasAnUpdatedAtOnCreation() {
$optionField = NewsletterOptionField::where('name', $this->data['name']) $option_field = NewsletterOptionField::where('name', $this->data['name'])
->findOne(); ->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); expect($time_difference)->equals(true);
} }
function itKeepsTheCreatedAtOnUpdate() { function itKeepsTheCreatedAtOnUpdate() {
$optionField = NewsletterOptionField::where('name', $this->data['name']) $option_field = NewsletterOptionField::where('name', $this->data['name'])
->findOne(); ->findOne();
$old_created_at = $optionField->created_at; $old_created_at = $option_field->created_at;
$optionField->name = 'new name'; $option_field->name = 'new name';
$optionField->save(); $option_field->save();
expect($old_created_at)->equals($optionField->created_at); expect($old_created_at)->equals($option_field->created_at);
} }
function itUpdatesTheUpdatedAtOnUpdate() { function itUpdatesTheUpdatedAtOnUpdate() {
$optionField = NewsletterOptionField::where('name', $this->data['name']) $option_field = NewsletterOptionField::where('name', $this->data['name'])
->findOne(); ->findOne();
$update_time = time(); $update_time = time();
$optionField->name = 'new name'; $option_field->name = 'new name';
$optionField->save(); $option_field->save();
$time_difference = strtotime($optionField->updated_at) >= $update_time; $time_difference = strtotime($option_field->updated_at) >= $update_time;
expect($time_difference)->equals(true); expect($time_difference)->equals(true);
} }
function itCanHaveManyNewsletters() { function itCanHaveManyNewsletters() {
foreach ($this->newslettersData as $data) { foreach($this->newsletter_data as $data) {
$newsletter = Newsletter::create(); $newsletter = Newsletter::create();
$newsletter->hydrate($data); $newsletter->hydrate($data);
$newsletter->save(); $newsletter->save();
$association = NewsletterOption::create(); $association = NewsletterOption::create();
$association->newsletter_id = $newsletter->id; $association->newsletter_id = $newsletter->id;
$association->option_field_id = $this->optionField->id; $association->option_field_id = $this->option_field->id;
$association->save(); $association->save();
} }
$optionField = NewsletterOptionField::findOne($this->optionField->id); $option_field = NewsletterOptionField::findOne($this->option_field->id);
$newsletters = $optionField->newsletters() $newsletters = $option_field->newsletters()
->findArray(); ->findArray();
expect(count($newsletters))->equals(2); expect(count($newsletters))->equals(2);
} }
function itCanStoreOptionValue() { function itCanStoreOptionValue() {
$newsletter = Newsletter::create(); $newsletter = Newsletter::create();
$newsletter->hydrate($this->newslettersData[0]); $newsletter->hydrate($this->newsletter_data[0]);
$newsletter->save(); $newsletter->save();
$association = NewsletterOption::create(); $association = NewsletterOption::create();
$association->newsletter_id = $newsletter->id; $association->newsletter_id = $newsletter->id;
$association->option_field_id = $this->optionField->id; $association->option_field_id = $this->option_field->id;
$association->value = 'list'; $association->value = 'list';
$association->save(); $association->save();
$optionField = NewsletterOptionField::findOne($this->optionField->id); $option_field = NewsletterOptionField::findOne($this->option_field->id);
$newsletter = $optionField->newsletters() $newsletter = $option_field->newsletters()
->findOne(); ->findOne();
expect($newsletter->value)->equals($association->value); expect($newsletter->value)->equals($association->value);
} }

View File

@ -13,7 +13,7 @@ class SegmentCest {
'name' => 'some name', 'name' => 'some name',
'description' => 'some description' 'description' => 'some description'
); );
$this->subscribersData = array( $this->subscribers_data = array(
array( array(
'first_name' => 'John', 'first_name' => 'John',
'last_name' => 'Mailer', 'last_name' => 'Mailer',
@ -27,22 +27,22 @@ class SegmentCest {
'email' => 'mike@maipoet.com' 'email' => 'mike@maipoet.com'
) )
); );
$this->newslettersData = array( $this->newsletters_data = array(
array( array(
'subject' => 'My first newsletter' 'subject' => 'My first newsletter',
'type' => 'standard'
), ),
array( array(
'subject' => 'My second newsletter' 'subject' => 'My second newsletter',
'type' => 'standard'
) )
); );
$this->segment = Segment::create(); $this->segment = Segment::createOrUpdate($this->data);
$this->segment->hydrate($this->data);
$this->saved = $this->segment->save();
} }
function itCanBeCreated() { function itCanBeCreated() {
expect($this->saved->id() > 0)->true(); expect($this->segment->id() > 0)->true();
expect($this->saved->getErrors())->false(); expect($this->segment->getErrors())->false();
} }
function itCanHaveName() { function itCanHaveName() {
@ -108,10 +108,10 @@ class SegmentCest {
function itCanCreateOrUpdate() { function itCanCreateOrUpdate() {
$is_created = Segment::createOrUpdate(array( $is_created = Segment::createOrUpdate(array(
'name' => 'new list' 'name' => 'new list'
)); ));
expect($is_created)->notEquals(false); expect($is_created->id() > 0)->true();
expect($is_created->getValidationErrors())->isEmpty(); expect($is_created->getErrors())->false();
$segment = Segment::where('name', 'new list') $segment = Segment::where('name', 'new list')
->findOne(); ->findOne();
@ -128,9 +128,9 @@ class SegmentCest {
} }
function itCanHaveManySubscribers() { function itCanHaveManySubscribers() {
foreach ($this->subscribersData as $subscriberData) { foreach($this->subscribers_data as $subscriber_data) {
$subscriber = Subscriber::create(); $subscriber = Subscriber::create();
$subscriber->hydrate($subscriberData); $subscriber->hydrate($subscriber_data);
$subscriber->save(); $subscriber->save();
$association = SubscriberSegment::create(); $association = SubscriberSegment::create();
$association->subscriber_id = $subscriber->id; $association->subscriber_id = $subscriber->id;
@ -145,9 +145,9 @@ class SegmentCest {
} }
function itCanHaveManyNewsletters() { function itCanHaveManyNewsletters() {
foreach ($this->newslettersData as $newsletterData) { foreach($this->newsletters_data as $newsletter_data) {
$newsletter = Newsletter::create(); $newsletter = Newsletter::create();
$newsletter->hydrate($newsletterData); $newsletter->hydrate($newsletter_data);
$newsletter->save(); $newsletter->save();
$association = NewsletterSegment::create(); $association = NewsletterSegment::create();
$association->newsletter_id = $newsletter->id; $association->newsletter_id = $newsletter->id;
@ -162,9 +162,9 @@ class SegmentCest {
} }
function itCanGetSegmentsWithSubscriberCount() { function itCanGetSegmentsWithSubscriberCount() {
foreach ($this->subscribersData as $subscriberData) { foreach($this->subscribers_data as $subscriber_data) {
$subscriber = Subscriber::create(); $subscriber = Subscriber::create();
$subscriber->hydrate($subscriberData); $subscriber->hydrate($subscriber_data);
$subscriber->save(); $subscriber->save();
$association = SubscriberSegment::create(); $association = SubscriberSegment::create();
$association->subscriber_id = $subscriber->id; $association->subscriber_id = $subscriber->id;
@ -176,9 +176,9 @@ class SegmentCest {
} }
function itCanGetSegmentsForExport() { function itCanGetSegmentsForExport() {
foreach ($this->subscribersData as $index => $subscriberData) { foreach($this->subscribers_data as $index => $subscriber_data) {
$subscriber = Subscriber::create(); $subscriber = Subscriber::create();
$subscriber->hydrate($subscriberData); $subscriber->hydrate($subscriber_data);
$subscriber->save(); $subscriber->save();
if(!$index) { if(!$index) {
$association = SubscriberSegment::create(); $association = SubscriberSegment::create();

View File

@ -105,75 +105,62 @@ class SubscriberCest {
} }
function itCanHaveSegment() { function itCanHaveSegment() {
$segmentData = array( $segment = Segment::createOrUpdate(array(
'name' => 'some name' 'name' => 'some name'
); ));
$segment = Segment::create(); expect($segment->getErrors())->false();
$segment->hydrate($segmentData);
$segment->save();
$association = SubscriberSegment::create(); $association = SubscriberSegment::create();
$association->subscriber_id = $this->subscriber->id; $association->subscriber_id = $this->subscriber->id;
$association->segment_id = $segment->id; $association->segment_id = $segment->id;
$association->save(); $association->save();
$subscriber = Subscriber::findOne($this->subscriber->id); $subscriber = Subscriber::findOne($this->subscriber->id);
$subscriberSegment = $subscriber->segments()
->findOne(); $subscriber_segment = $subscriber->segments()->findOne();
expect($subscriberSegment->id)->equals($segment->id); expect($subscriber_segment->id)->equals($segment->id);
} }
function itCanHaveCustomFields() { function itCanHaveCustomFields() {
$customFieldData = array( $custom_field = CustomField::createOrUpdate(array(
'name' => 'DOB', 'name' => 'DOB',
'type' => 'date', 'type' => 'date',
); ));
$customField = CustomField::create();
$customField->hydrate($customFieldData);
$customField->save();
$association = SubscriberCustomField::create(); $association = SubscriberCustomField::create();
$association->subscriber_id = $this->subscriber->id; $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->value = '12/12/2012';
$association->save(); $association->save();
$subscriber = Subscriber::filter('filterWithCustomFields') $subscriber = Subscriber::filter('filterWithCustomFields')
->findOne($this->subscriber->id); ->findOne($this->subscriber->id);
expect($subscriber->DOB)->equals($association->value); expect($subscriber->DOB)->equals($association->value);
} }
function itCanFilterCustomFields() { function itCanFilterCustomFields() {
$customFieldData = array( $cf_city = CustomField::createOrUpdate(array(
array( 'name' => 'City',
'name' => 'City', 'type' => 'text'
'type' => 'text', ));
),
array( SubscriberCustomField::createOrUpdate(array(
'name' => 'Country', 'subscriber_id' => $this->subscriber->id,
'type' => 'text', 'custom_field_id' => $cf_city->id,
) 'value' => 'Paris'
); ));
foreach($customFieldData as $data) {
$customField = CustomField::create(); $cf_country = CustomField::createOrUpdate(array(
$customField->hydrate($data); 'name' => 'Country',
$customField->save(); 'type' => 'text'
$createdCustomFields[] = $customField->asArray(); ));
}
$subscriberCustomFieldData = array( SubscriberCustomField::createOrUpdate(array(
array( 'subscriber_id' => $this->subscriber->id,
'subscriber_id' => $this->subscriber->id, 'custom_field_id' => $cf_country->id,
'custom_field_id' => $createdCustomFields[0]['id'], 'value' => 'France'
'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();
}
$subscriber = Subscriber::filter('filterWithCustomFields') $subscriber = Subscriber::filter('filterWithCustomFields')
->filter('filterSearchCustomFields', array( ->filter('filterSearchCustomFields', array(
array( array(
@ -196,6 +183,7 @@ class SubscriberCest {
)) ))
->findArray(); ->findArray();
expect(empty($subscriber))->false(); expect(empty($subscriber))->false();
$subscriber = Subscriber::filter('filterWithCustomFields') $subscriber = Subscriber::filter('filterWithCustomFields')
->filter('filterSearchCustomFields', array( ->filter('filterSearchCustomFields', array(
array( array(
@ -209,6 +197,7 @@ class SubscriberCest {
), 'OR') ), 'OR')
->findArray(); ->findArray();
expect(empty($subscriber))->false(); expect(empty($subscriber))->false();
$subscriber = Subscriber::filter('filterWithCustomFields') $subscriber = Subscriber::filter('filterWithCustomFields')
->filter('filterSearchCustomFields', array( ->filter('filterSearchCustomFields', array(
array( array(
@ -218,6 +207,7 @@ class SubscriberCest {
), 'AND', 'LIKE') ), 'AND', 'LIKE')
->findArray(); ->findArray();
expect(empty($subscriber))->false(); expect(empty($subscriber))->false();
$subscriber = Subscriber::filter('filterWithCustomFields') $subscriber = Subscriber::filter('filterWithCustomFields')
->filter('filterSearchCustomFields', array( ->filter('filterSearchCustomFields', array(
array( array(
@ -227,6 +217,7 @@ class SubscriberCest {
)) ))
->findArray(); ->findArray();
expect(empty($subscriber))->true(); expect(empty($subscriber))->true();
$subscriber = Subscriber::filter('filterWithCustomFields') $subscriber = Subscriber::filter('filterWithCustomFields')
->filter('filterSearchCustomFields', array( ->filter('filterSearchCustomFields', array(
array( array(
@ -240,6 +231,7 @@ class SubscriberCest {
)) ))
->findArray(); ->findArray();
expect(empty($subscriber))->true(); expect(empty($subscriber))->true();
$subscriber = Subscriber::filter('filterWithCustomFields') $subscriber = Subscriber::filter('filterWithCustomFields')
->filter('filterSearchCustomFields', array( ->filter('filterSearchCustomFields', array(
array( array(
@ -253,6 +245,7 @@ class SubscriberCest {
), 'OR') ), 'OR')
->findArray(); ->findArray();
expect(empty($subscriber))->true(); expect(empty($subscriber))->true();
$subscriber = Subscriber::filter('filterWithCustomFields') $subscriber = Subscriber::filter('filterWithCustomFields')
->filter('filterSearchCustomFields', array( ->filter('filterSearchCustomFields', array(
array( array(
@ -271,8 +264,8 @@ class SubscriberCest {
'last_name' => 'Doe' 'last_name' => 'Doe'
); );
$result = Subscriber::createOrUpdate($data); $result = Subscriber::createOrUpdate($data);
expect($result)->notEquals(false); expect($result->id() > 0)->true();
expect($result->getValidationErrors())->isEmpty(); expect($result->getErrors())->false();
$record = Subscriber::where('email', $data['email']) $record = Subscriber::where('email', $data['email'])
->findOne(); ->findOne();

View File

@ -40,16 +40,6 @@ class FormsCest {
expect($response['items'][2]['name'])->equals('Form 3'); 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() { function itCanCreateANewForm() {
$router = new Forms(); $router = new Forms();
$response = $router->create(); $response = $router->create();

View File

@ -56,8 +56,7 @@ class NewsletterTemplatesCest {
$router = new NewsletterTemplates(); $router = new NewsletterTemplates();
$response = $router->save($template_data); $response = $router->save($template_data);
expect($response)->true();
expect($response->id() > 0)->true();
$template = NewsletterTemplate::where('name', 'Template #3')->findOne(); $template = NewsletterTemplate::where('name', 'Template #3')->findOne();
expect($template->name)->equals('Template #3'); expect($template->name)->equals('Template #3');

View File

@ -0,0 +1,208 @@
<?php
use \MailPoet\Router\Newsletters;
use \MailPoet\Models\Newsletter;
use \MailPoet\Models\NewsletterSegment;
use \MailPoet\Models\NewsletterTemplate;
use \MailPoet\Models\Segment;
class NewslettersCest {
function _before() {
}
function itCanGetANewsletter() {
$newsletter = Newsletter::createOrUpdate(array(
'subject' => '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();
}
}

View File

@ -38,15 +38,6 @@ class SegmentsCest {
expect($response['items'][2]['name'])->equals('Segment 3'); 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() { function itCanSaveASegment() {
$segment_data = array( $segment_data = array(
'name' => 'New Segment' 'name' => 'New Segment'

View File

@ -6,7 +6,6 @@ use \MailPoet\Models\Segment;
class SubscribersCest { class SubscribersCest {
function _before() { function _before() {
} }
function itCanGetASubscriber() { function itCanGetASubscriber() {
@ -27,21 +26,6 @@ class SubscribersCest {
expect($response)->false(); 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() { function itCanSaveANewSubscriber() {
$valid_data = array( $valid_data = array(
'email' => 'john.doe@mailpoet.com', 'email' => 'john.doe@mailpoet.com',
@ -50,9 +34,13 @@ class SubscribersCest {
); );
$router = new Subscribers(); $router = new Subscribers();
$response = $router->save($valid_data); $response = $router->save($valid_data);
expect($response['result'])->true(); 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( $invalid_data = array(
'email' => 'john.doe@invalid', 'email' => 'john.doe@invalid',

View File

@ -8,67 +8,76 @@ use MailPoet\Subscribers\ImportExport\BootStrapMenu;
class BootStrapMenuCest { class BootStrapMenuCest {
function _before() { function _before() {
$this->segmentsData = array( $segment_1 = Segment::createOrUpdate(array('name' => 'Unconfirmed Segment'));
array( $segment_2 = Segment::createOrUpdate(array('name' => 'Confirmed Segment'));
'name' => 'first',
'description' => 'some description' $subscriber_1 = Subscriber::createOrUpdate(array(
), 'first_name' => 'John',
array( 'last_name' => 'Mailer',
'name' => 'second', 'status' => 'unconfirmed',
'description' => 'some description' 'email' => 'john@mailpoet.com'
) ));
);
$this->subscribersData = array( $subscriber_2 = Subscriber::createOrUpdate(array(
array( 'first_name' => 'Mike',
'first_name' => 'John', 'last_name' => 'Smith',
'last_name' => 'Mailer', 'status' => 'subscribed',
'status' => 'unconfirmed', 'email' => 'mike@maipoet.com'
'email' => 'john@mailpoet.com' ));
),
array( $association = SubscriberSegment::create();
'first_name' => 'Mike', $association->subscriber_id = $subscriber_1->id;
'last_name' => 'Smith', $association->segment_id = $segment_1->id;
'status' => 'subscribed', $association->save();
'email' => 'mike@maipoet.com'
) $association = SubscriberSegment::create();
); $association->subscriber_id = $subscriber_2->id;
$this->customFieldsData = array( $association->segment_id = $segment_2->id;
'name' => 'DOB', $association->save();
'type' => 'date',
); CustomField::createOrUpdate(array(
$customField = CustomField::create(); 'name' => 'Birthday',
$customField->hydrate($this->customFieldsData); 'type' => 'date'
$customField->save(); ));
$this->bootStrapImportMenu = new BootStrapMenu('import'); $this->bootStrapImportMenu = new BootStrapMenu('import');
$this->bootStrapExportMenu = new BootStrapMenu('export'); $this->bootStrapExportMenu = new BootStrapMenu('export');
} }
function itCanGetSegmentsWithSubscriberCount() { function itCanGetSegmentsWithSubscriberCount() {
// TOFIX.
/*$this->_createSegmentsAndSubscribers();
$segments = $this->bootStrapImportMenu->getSegments(); $segments = $this->bootStrapImportMenu->getSegments();
expect(count($segments))->equals(2); 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[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() { function itCanGetPublicSegmentsForImport() {
$this->_createSegmentsAndSubscribers();
$segments = $this->bootStrapImportMenu->getSegments(); $segments = $this->bootStrapImportMenu->getSegments();
expect(count($segments))->equals(2); expect(count($segments))->equals(2);
$subscriber = Subscriber::findOne(1);
$subscriber->deleted_at = date('Y-m-d H:i:s'); $subscriber = Subscriber::where(
$subscriber->save(); '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(); $segments = $this->bootStrapImportMenu->getSegments();
expect(count($segments))->equals(1); expect(count($segments))->equals(1);
} }
function itCanGetSegmentsForExportWithoutTrashedSubscribers() { function itCanGetPublicSegmentsForExport() {
$this->_createSegmentsAndSubscribers();
$segments = $this->bootStrapExportMenu->getSegments(); $segments = $this->bootStrapExportMenu->getSegments();
expect(count($segments))->equals(2); 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->deleted_at = date('Y-m-d H:i:s');
$subscriber->save(); $subscriber->save();
$segments = $this->bootStrapExportMenu->getSegments(); $segments = $this->bootStrapExportMenu->getSegments();
@ -76,21 +85,21 @@ class BootStrapMenuCest {
} }
function itCanGetSegmentsForExport() { function itCanGetSegmentsForExport() {
$this->_createSegmentsAndSubscribers();
$segments = $this->bootStrapExportMenu->getSegments(); $segments = $this->bootStrapExportMenu->getSegments();
expect(count($segments))->equals(2); 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[0]['subscriberCount'])->equals(1);
expect($segments[1]['name'])->equals('Unconfirmed Segment');
expect($segments[1]['subscriberCount'])->equals(1); expect($segments[1]['subscriberCount'])->equals(1);
} }
function itCanGetSegmentsWithConfirmedSubscribersForExport() { function itCanGetSegmentsWithConfirmedSubscribersForExport() {
$this->_createSegmentsAndSubscribers();
$segments = $this->bootStrapExportMenu->getSegments( $segments = $this->bootStrapExportMenu->getSegments(
$withConfirmedSubscribers = true $withConfirmedSubscribers = true
); );
expect(count($segments))->equals(1); expect(count($segments))->equals(1);
expect($segments[0]['name'])->equals($this->segmentsData[1]['name']); expect($segments[0]['name'])->equals('Confirmed Segment');
} }
function itCanGetSubscriberFields() { function itCanGetSubscriberFields() {
@ -101,7 +110,7 @@ class BootStrapMenuCest {
'last_name', 'last_name',
'status' 'status'
); );
foreach ($fields as $field) { foreach($fields as $field) {
expect(in_array($field, array_keys($subsriberFields)))->true(); expect(in_array($field, array_keys($subsriberFields)))->true();
} }
} }
@ -117,7 +126,7 @@ class BootStrapMenuCest {
'type', 'type',
'custom' 'custom'
); );
foreach ($fields as $field) { foreach($fields as $field) {
expect(in_array($field, array_keys($formattedSubscriberFields[0]))) expect(in_array($field, array_keys($formattedSubscriberFields[0])))
->true(); ->true();
} }
@ -129,7 +138,7 @@ class BootStrapMenuCest {
$this->bootStrapImportMenu $this->bootStrapImportMenu
->getSubscriberCustomFields(); ->getSubscriberCustomFields();
expect($subscriberCustomFields[0]['type']) expect($subscriberCustomFields[0]['type'])
->equals($this->customFieldsData['type']); ->equals('date');
} }
function itCanFormatSubsciberCustomFields() { function itCanFormatSubsciberCustomFields() {
@ -143,7 +152,7 @@ class BootStrapMenuCest {
'type', 'type',
'custom' 'custom'
); );
foreach ($fields as $field) { foreach($fields as $field) {
expect(in_array($field, array_keys($formattedSubscriberCustomFields[0]))) expect(in_array($field, array_keys($formattedSubscriberCustomFields[0])))
->true(); ->true();
} }
@ -241,10 +250,6 @@ class BootStrapMenuCest {
} }
function itCanBootStrapImport() { function itCanBootStrapImport() {
$customField = CustomField::create();
$customField->hydrate($this->customFieldsData);
$customField->save();
$this->_createSegmentsAndSubscribers();
$import = clone($this->bootStrapImportMenu); $import = clone($this->bootStrapImportMenu);
$importMenu = $import->bootstrap(); $importMenu = $import->bootstrap();
expect(count(json_decode($importMenu['segments'], true))) expect(count(json_decode($importMenu['segments'], true)))
@ -257,15 +262,11 @@ class BootStrapMenuCest {
->equals(3); ->equals(3);
expect($importMenu['maxPostSize'])->equals(ini_get('post_max_size')); expect($importMenu['maxPostSize'])->equals(ini_get('post_max_size'));
expect($importMenu['maxPostSizeBytes'])->equals( expect($importMenu['maxPostSizeBytes'])->equals(
(int) ini_get('post_max_size') * 1048576 (int)ini_get('post_max_size') * 1048576
); );
} }
function itCanBootStrapExport() { function itCanBootStrapExport() {
$customField = CustomField::create();
$customField->hydrate($this->customFieldsData);
$customField->save();
$this->_createSegmentsAndSubscribers();
$export = clone($this->bootStrapImportMenu); $export = clone($this->bootStrapImportMenu);
$exportMenu = $export->bootstrap(); $exportMenu = $export->bootstrap();
expect(count(json_decode($exportMenu['segments'], true))) expect(count(json_decode($exportMenu['segments'], true)))
@ -275,27 +276,10 @@ class BootStrapMenuCest {
->equals(3); ->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() { function _after() {
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table); Subscriber::deleteMany();
ORM::raw_execute('TRUNCATE ' . Segment::$_table); Segment::deleteMany();
ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table); SubscriberSegment::deleteMany();
ORM::raw_execute('TRUNCATE ' . CustomField::$_table); CustomField::deleteMany();
} }
} }

View File

@ -146,7 +146,7 @@ class ExportCest {
expect($target)->equals(array($source->id => $source->name)); expect($target)->equals(array($source->id => $source->name));
} }
function itCanFormatsubscriber_fields() { function itCanFormatSubscriberFields() {
$formatted_subscriber_fields = $this->export->formatSubscriberFields( $formatted_subscriber_fields = $this->export->formatSubscriberFields(
array_keys($this->subscriber_fields), array_keys($this->subscriber_fields),
$this->export->getSubscriberCustomFields() $this->export->getSubscriberCustomFields()