- Rebases master

- Adds tests for all Export class methods
Closes #221
This commit is contained in:
MrCasual
2015-11-18 22:14:09 -05:00
parent 82cf4a28fd
commit aa93c7349f
4 changed files with 138 additions and 53 deletions

View File

@ -153,7 +153,7 @@ class Export {
}
if($this->exportConfirmedOption) {
$subscribers =
$subscribers->where(Subscriber::$_table . '.status', 'confirmed');
$subscribers->where(Subscriber::$_table . '.status', 'subscribed');
}
return $subscribers->findArray();
}

View File

@ -9,19 +9,27 @@ use MailPoet\Models\SubscriberSegment;
use MailPoet\Subscribers\ImportExport\Export\Export;
class ExportCest {
function __construct() {
function _before() {
$this->JSONdata = json_decode(file_get_contents(dirname(__FILE__) . '/ExportTestData.json'), true);
$this->subscriberFields = array(
'first_name' => 'First name',
'last_name' => 'Last name',
'email' => 'Email',
1 => 'Country'
);
$this->subscribersData = array(
array(
'first_name' => 'Adam',
'last_name' => 'Smith',
'email' => 'adam@smith.com',
1 => 'Brazil'
'email' => 'adam@smith.com'
),
array(
'first_name' => 'Mary',
'last_name' => 'Jane',
'email' => 'mary@jane.com'
'email' => 'mary@jane.com',
'status' => 'subscribed',
1 => 'Brazil'
),
array(
'first_name' => 'John',
@ -49,6 +57,9 @@ class ExportCest {
)
);
foreach ($this->subscribersData as $subscriber) {
if(isset($subscriber[1])) {
unset($subscriber[1]);
}
$entity = Subscriber::create();
$entity->hydrate($subscriber);
$entity->save();
@ -63,26 +74,42 @@ class ExportCest {
$entity->hydrate($customField);
$entity->save();
}
$entity = SubscriberCustomField::create();
$entity->subscriber_id = 2;
$entity->custom_field_id = 1;
$entity->value = $this->subscribersData[1][1];
$entity->save();
$entity = SubscriberSegment::create();
$entity->subscriber_id = 1;
$entity->segment_id = 1;
$entity->save();
$entity = SubscriberSegment::create();
$entity->subscriber_id = 1;
$entity->segment_id = 2;
$entity->save();
$entity = SubscriberSegment::create();
$entity->subscriber_id = 2;
$entity->segment_id = 1;
$entity->save();
$entity = SubscriberSegment::create();
$entity->subscriber_id = 3;
$entity->segment_id = 2;
$entity->save();
$this->export = new Export($this->JSONdata);
}
/* function _before() {
}*/
function itCanConstruct() {
expect($this->export->exportConfirmedOption)
->equals(false);
expect($this->export->exportFormatOption)
->equals('csv');
expect($this->export->groupBySegmentOption)
->equals(true);
->equals(false);
expect($this->export->segments)
->equals(
array(
0,
1
1,
2
)
);
expect($this->export->subscribersWithoutSegment)
@ -113,41 +140,98 @@ class ExportCest {
)->equals(1);
}
function itCanGetSubscribers() {
}
function itCanGetSubscriberCustomFields() {
$customFields = $this->export->getSubscriberCustomFields();
expect($customFields)->equals(
array(
1 => $this->customFieldsData[0]['name']
)
);
$source = CustomField::where('name', $this->customFieldsData[0]['name'])
->findOne();
$target = $this->export->getSubscriberCustomFields();
expect($target)->equals(array($source->id => $source->name));
}
function itCanFormatSubscriberFields() {
$formattedSubscriberFields = $this->export->formatSubscriberFields(
$this->subscriberFields,
array_keys($this->subscriberFields),
$this->export->getSubscriberCustomFields()
);
expect($formattedSubscriberFields)
->equals(array_values($this->subscriberFields));
}
!d($formattedSubscriberFields);exit;
function itProperlyReturnsSubscriberCustomFields() {
$subscribers = $this->export->getSubscribers();
foreach ($subscribers as $subscriber) {
if($subscriber['email'] === $this->subscribersData[1]) {
expect($subscriber['Country'])
->equals($this->subscribersData[1][1]);
}
}
}
function itCanGetSubscribers() {
$this->export->segments = array(1);
$subscribers = $this->export->getSubscribers();
expect(count($subscribers))->equals(2);
$this->export->segments = array(2);
$subscribers = $this->export->getSubscribers();
expect(count($subscribers))->equals(2);
$this->export->segments = array(
1,
2
);
$subscribers = $this->export->getSubscribers();
expect(count($subscribers))->equals(3);
}
function itCanGroupSubscribersBySegments() {
$this->export->groupBySegmentOption = true;
$this->export->subscribersWithoutSegment = true;
$subscribers = $this->export->getSubscribers();
expect(count($subscribers))->equals(5);
}
function itCanGetSubscribersOnlyWithoutSegments() {
$this->export->segments = array(0);
$this->export->subscribersWithoutSegment = true;
$subscribers = $this->export->getSubscribers();
expect(count($subscribers))->equals(1);
expect($subscribers[0]['segment_name'])->equals('Not In List');
}
function itCanGetOnlyConfirmedSubscribers() {
$this->export->exportConfirmedOption = true;
$subscribers = $this->export->getSubscribers();
expect(count($subscribers))->equals(1);
expect($subscribers[0]['email'])
->equals($this->subscribersData[1]['email']);
}
function itCanGetSubscribersOnlyInSegments() {
SubscriberSegment::where('subscriber_id', 3)
->findOne()
->delete();
$subscribers = $this->export->getSubscribers();
expect(count($subscribers))->equals(2);
}
function itCanProcess() {
$this->export->exportFile = $this->export->getExportFile('csv');
$this->export->exportFormatOption = 'csv';
$this->export->process();
$CSVFileSize = filesize($this->export->exportFile);
$this->export->exportFile = $this->export->getExportFile('xls');
$this->export->exportFormatOption = 'xls';
$this->export->process();
$XLSFileSize = filesize($this->export->exportFile);
expect($CSVFileSize)->greaterThan(0);
expect($XLSFileSize)->greaterThan(0);
expect($XLSFileSize)->greaterThan($CSVFileSize);
}
function _after() {
ORM::forTable(Subscriber::$_table)
->deleteMany();
ORM::forTable(SubscriberCustomField::$_table)
->deleteMany();
ORM::forTable(SubscriberSegment::$_table)
->deleteMany();
ORM::forTable(Segment::$_table)
->deleteMany();
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
ORM::raw_execute('TRUNCATE ' . Segment::$_table);
ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
ORM::raw_execute('TRUNCATE ' . CustomField::$_table);
ORM::raw_execute('TRUNCATE ' . SubscriberCustomField::$_table);
}
}

View File

@ -1,10 +1,10 @@
{
"exportConfirmedOption": false,
"exportFormatOption": "csv",
"groupBySegmentOption": true,
"groupBySegmentOption": false,
"segments": [
"0",
"1"
"1",
"2"
],
"subscriberFields": [
"email",

View File

@ -1,9 +1,9 @@
<?php
use MailPoet\Subscribers\ImportExport\Import\Import;
use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberCustomField;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Subscribers\ImportExport\Import\Import;
use MailPoet\Util\Helpers;
class ImportCest {
@ -108,38 +108,39 @@ class ImportCest {
function itCanFilterSubscriberState() {
$data = array(
'status' => array(
'confirmed',
'subscribed',
//subscribed
'subscribed',
'confirmed',
1,
'1',
'true',
//unconfirmed
'unconfirmed',
0,
"0",
//unsubscribed
'unsubscribed',
-1,
'-1',
'false',
'something',
'else'
'false'
),
);
$statuses = $this->import->filterSubscriberStatus($data);
expect($statuses)->equals(
array(
'status' => array(
'confirmed',
'confirmed',
'confirmed',
'confirmed',
'confirmed',
'confirmed',
'confirmed',
'subscribed',
'subscribed',
'subscribed',
'subscribed',
'subscribed',
'unconfirmed',
'unconfirmed',
'unconfirmed',
'unsubscribed',
'unsubscribed',
'unsubscribed',
'unsubscribed',
'confirmed',
'confirmed'
'unsubscribed'
)
)
);