Add acceptance tests

This commit is contained in:
Amine Ben hammou
2019-05-25 10:45:57 +00:00
committed by M. Shull
parent efd8fe124e
commit 2e9c673da0
6 changed files with 105 additions and 6 deletions

View File

@@ -86,7 +86,7 @@ const QueueMixin = {
if (newsletter.queue.status === 'completed') {
label = (
<Link to={`/sending-status/${newsletter.id}`}>
<Link to={`/sending-status/${newsletter.id}`} data-automation-id={`sending_status_${newsletter.id}`}>
<span>
{
MailPoet.I18n.t('newsletterQueueCompleted')

View File

@@ -215,7 +215,12 @@ const NewsletterListWelcome = createReactClass({ // eslint-disable-line react/pr
</select>
</p>
<p>
<Link to={`/sending-status/${newsletter.id}`}>{ totalSentMessage }</Link>
<Link
to={`/sending-status/${newsletter.id}`}
data-automation-id={`sending_status_${newsletter.id}`}
>
{ totalSentMessage }
</Link>
{' '}
<br />
{ totalScheduledMessage }

View File

@@ -145,7 +145,7 @@ const ListingItem = ({
}
return (
<>
<td className={rowClasses}>
<td data-automation-id={`name_${taskId}_${subscriberId}`} className={rowClasses}>
<strong>
<a
className="row-title"
@@ -158,10 +158,10 @@ const ListingItem = ({
{ `${firstName} ${lastName}` }
</p>
</td>
<td className="column" data-colname={MailPoet.I18n.t('sendingStatus')}>
<td className="column" data-automation-id={`status_${taskId}_${subscriberId}`} data-colname={MailPoet.I18n.t('sendingStatus')}>
{ status }
</td>
<td className="column" data-colname={MailPoet.I18n.t('failureReason')}>
<td className="column" data-automation-id={`error_${taskId}_${subscriberId}`} data-colname={MailPoet.I18n.t('failureReason')}>
{ error }
</td>
</>

View File

@@ -2,10 +2,12 @@
namespace MailPoet\Test\DataFactories;
use Carbon\Carbon;
use MailPoet\Models\NewsletterSegment;
use MailPoet\Models\Subscriber;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\NewsletterSegment;
use MailPoet\Settings\SettingsController;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\Models\ScheduledTaskSubscriber;
class Newsletter {
@@ -18,6 +20,9 @@ class Newsletter {
/** @var array */
private $segments;
/** @var array */
private $task_subscribers;
public function __construct() {
$this->data = [
'subject' => 'Some subject',
@@ -29,6 +34,7 @@ class Newsletter {
$this->options = [];
$this->segments = [];
$this->queue_options = [];
$this->task_subscribers = [];
$this->loadBodyFrom('newsletterWithALC.json');
SettingsController::resetCache(); // Newsletter model reads settings so we need to ensure it use fresh data
}
@@ -219,6 +225,16 @@ class Newsletter {
return $this;
}
public function beingSentToSubscriber($subscriber, array $data = []) {
$this->task_subscribers[] = array_merge([
'subscriber_id' => $subscriber->id,
'processed' => 1,
'failed' => 0,
'error' => '',
], $data);
return $this;
}
/**
* @return \MailPoet\Models\Newsletter
*/
@@ -250,6 +266,16 @@ class Newsletter {
$sending_task->count_processed = $this->queue_options['count_processed'];
$sending_task->count_total = $this->queue_options['count_total'];
$sending_task->save();
foreach ($this->task_subscribers as $data) {
$task_subscriber = ScheduledTaskSubscriber::createOrUpdate([
'subscriber_id' => $data['subscriber_id'],
'task_id' => $sending_task->task_id,
'error' => $data['error'],
'failed' => $data['failed'],
'processed' => $data['processed'],
]);
}
}
return $newsletter;
}

View File

@@ -302,6 +302,8 @@ CREATE TABLE `mp_mailpoet_scheduled_task_subscribers` (
`task_id` int(11) unsigned NOT NULL,
`subscriber_id` int(11) unsigned NOT NULL,
`processed` int(1) NOT NULL,
`failed` smallint(1) NOT NULL DEFAULT 0,
`error` text NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`task_id`,`subscriber_id`),
KEY subscriber_id (subscriber_id)

View File

@@ -0,0 +1,66 @@
<?php
namespace MailPoet\Test\Acceptance;
require_once __DIR__ . '/../DataFactories/Settings.php';
require_once __DIR__ . '/../DataFactories/Newsletter.php';
require_once __DIR__ . '/../DataFactories/Subscriber.php';
use Codeception\Util\Locator;
use MailPoet\Test\DataFactories\Settings;
use MailPoet\Test\DataFactories\Newsletter;
use MailPoet\Test\DataFactories\Subscriber;
class SendingStatusCest {
function newsletterSendingStatus(\AcceptanceTester $I) {
$I->wantTo('Check the sending status page for a standard newsletter');
// Having a standard newsletter sent to 2 subscribers
$lucky_subscriber = (new Subscriber)
->withFirstName('Lucky')
->withLastName('Luke')
->create();
$unlucky_subscriber = (new Subscriber)
->withFirstName('Unlucky')
->withLastName('John')
->create();
$newsletter = (new Newsletter)
->withSubject('Testing newsletter sending status')
->withSentStatus()
->withSendingQueue([
'count_processed' => 2,
'count_total' => 2,
])
->beingSentToSubscriber($lucky_subscriber)
->beingSentToSubscriber($unlucky_subscriber, [
'failed' => 1,
'error' => 'Oh no!',
])
->create();
// When I visit the newsletters page
$I->login();
$I->amOnMailPoetPage('Emails');
$I->waitForText($newsletter->subject);
// I click on the "Sent to 3 of 3" link
$I->click('[data-automation-id="sending_status_' . $newsletter->id . '"]');
// Check I am on the sending status page
$I->seeInCurrentUrl('?page=mailpoet-newsletters#/sending-status/' . $newsletter->id);
$I->waitForText('Sending status');
// I see the subscribers with related statuses
$task_id = $newsletter->getQueue()->task_id;
$this->checkSubscriber($I, $task_id, $lucky_subscriber, 'Sent');
$this->checkSubscriber($I, $task_id, $unlucky_subscriber, 'Failed', 'Oh no!');
}
private function checkSubscriber($I, $task_id, $subscriber, $status, $error = false) {
$name_selector = '[data-automation-id="name_' . $task_id . '_' . $subscriber->id . '"]';
$status_selector = '[data-automation-id="status_' . $task_id . '_' . $subscriber->id . '"]';
$full_name = $subscriber->first_name . ' ' . $subscriber->last_name;
$I->waitForText($subscriber->email, 10, $name_selector);
$I->waitForText($full_name, 10, $name_selector);
$I->waitForText($status, 10, $status_selector);
if ($error) {
$error_selector = '[data-automation-id="error_' . $task_id . '_' . $subscriber->id . '"]';
$I->waitForText($error, 10, $error_selector);
}
}
}