Add acceptance tests
This commit is contained in:
committed by
M. Shull
parent
efd8fe124e
commit
2e9c673da0
@@ -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')
|
||||
|
@@ -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 }
|
||||
|
@@ -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>
|
||||
</>
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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)
|
||||
|
66
tests/acceptance/SendingStatusCest.php
Normal file
66
tests/acceptance/SendingStatusCest.php
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user