View source
<?php
namespace Drupal\Tests\simplenews\Functional;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Url;
use Drupal\simplenews\Entity\Newsletter;
use Drupal\simplenews\Entity\Subscriber;
class SimplenewsSubscribeTest extends SimplenewsTestBase {
public function testSubscribeMultiple() {
$admin_user = $this
->drupalCreateUser([
'administer blocks',
'administer content types',
'administer nodes',
'access administration pages',
'administer permissions',
'administer newsletters',
'administer simplenews subscriptions',
]);
$this
->drupalLogin($admin_user);
$this
->drupalGet('admin/config/services/simplenews');
for ($i = 0; $i < 5; $i++) {
$this
->clickLink(t('Add newsletter'));
$name = $this
->randomMachineName();
$edit = [
'name' => $name,
'id' => strtolower($name),
'description' => $this
->randomString(20),
'access' => 'default',
];
$this
->submitForm($edit, 'Save');
}
$newsletters = simplenews_newsletter_get_all();
$this
->drupalLogout();
$enable = array_rand($newsletters, 3);
$mail = $this
->randomEmail(8);
$this
->subscribe($enable, $mail);
$this
->assertText(t('You will receive a confirmation e-mail shortly containing further instructions on how to complete your subscription.'));
$this
->assertMailText(t('We have received a request to subscribe @user', [
'@user' => $mail,
]));
$mails = $this
->getMails();
$this
->assertEqual($mails[0]['from'], 'simpletest@example.com');
$this
->assertEqual($mails[0]['headers']['From'], '"Drupal" <simpletest@example.com>');
$confirm_url = $this
->extractConfirmationLink($this
->getMail(0));
$this
->drupalGet($confirm_url);
$this
->assertRaw(t('Are you sure you want to confirm your subscription for %user?', [
'%user' => simplenews_mask_mail($mail),
]));
$this
->submitForm([], 'Confirm');
$this
->assertRaw(t('Subscription changes confirmed for %user.', [
'%user' => $mail,
]));
$subscription_manager = \Drupal::service('simplenews.subscription_manager');
$subscription_manager
->reset();
$subscriber_storage = \Drupal::entityTypeManager()
->getStorage('simplenews_subscriber');
$subscriber_storage
->resetCache();
foreach ($newsletters as $newsletter_id => $newsletter) {
$is_subscribed = $subscription_manager
->isSubscribed($mail, $newsletter_id);
$subscription_newsletter = $subscriber_storage
->getSubscriptionsByNewsletter($newsletter_id);
if (in_array($newsletter_id, $enable)) {
$this
->assertTrue($is_subscribed);
$this
->assertEquals(1, count($subscription_newsletter));
}
else {
$this
->assertFalse($is_subscribed);
$this
->assertEquals(0, count($subscription_newsletter));
}
}
$subscriber = Subscriber::loadByMail($mail);
$hash = simplenews_generate_hash($subscriber
->getMail(), 'manage');
$this
->drupalGet('newsletter/subscriptions/' . $subscriber
->id() . '/' . REQUEST_TIME . '/' . $hash);
$this
->submitForm([], 'Update');
$this
->assertText(t('Your newsletter subscriptions have been updated.'));
$this
->assertEquals(1, count($this
->getMails()), t('No confirmation mails have been sent.'));
$disable = array_rand(array_flip($enable), 2);
$edit = [
'mail[0][value]' => $mail,
];
foreach ($disable as $newsletter_id) {
$edit['subscriptions[' . $newsletter_id . ']'] = FALSE;
}
$this
->drupalGet('newsletter/subscriptions/' . $subscriber
->id() . '/' . REQUEST_TIME . '/' . $hash);
$this
->submitForm($edit, t('Update'));
$subscriber_storage
->resetCache();
$subscription_manager
->reset();
$still_enabled = array_diff($enable, $disable);
foreach ($newsletters as $newsletter_id => $newsletter) {
$is_subscribed = $subscription_manager
->isSubscribed($mail, $newsletter_id);
if (in_array($newsletter_id, $still_enabled)) {
$this
->assertTrue($is_subscribed);
}
else {
$this
->assertFalse($is_subscribed);
}
}
$subscription_manager = \Drupal::service('simplenews.subscription_manager');
try {
$subscription_manager
->unsubscribe('new@email.com', $newsletter_id, FALSE);
$this
->fail('Exception not thrown.');
} catch (\Exception $e) {
$this
->assertEqual($e
->getMessage(), 'The subscriber does not exist.');
}
$enable = array_rand($newsletters, 3);
$mail = $this
->randomEmail(8);
foreach ($enable as $newsletter_id) {
$edit['subscriptions[' . $newsletter_id . ']'] = TRUE;
}
$this
->subscribe($enable, $mail);
$subscriber = Subscriber::loadByMail($mail);
$expired_timestamp = REQUEST_TIME - 86401;
$hash = simplenews_generate_hash($subscriber
->getMail(), 'combined' . serialize($subscriber
->getChanges()), $expired_timestamp);
$url = 'newsletter/confirm/combined/' . $subscriber
->id() . '/' . $expired_timestamp . '/' . $hash;
$this
->drupalGet($url);
$this
->assertText(t('This link has expired.'));
$this
->submitForm([], 'Request new confirmation mail');
$confirm_url = $this
->extractConfirmationLink($this
->getMail());
$this
->assertMailText(t('We have received a request to subscribe @user', [
'@user' => $mail,
]));
$this
->drupalGet($confirm_url);
$this
->assertRaw(t('Are you sure you want to confirm your subscription for %user?', [
'%user' => simplenews_mask_mail($mail),
]));
$this
->drupalGet($confirm_url);
$this
->submitForm([], 'Confirm');
$this
->assertRaw(t('Subscription changes confirmed for %user.', [
'%user' => $mail,
]));
}
protected function extractConfirmationLink($body) {
$pattern = '@newsletter/confirm/.+/.+/.+/.{20,}@';
$found = preg_match($pattern, $body, $match);
if (!$found) {
$this
->fail(t('No confirmation URL found in "@body".', [
'@body' => $body,
]));
return FALSE;
}
$confirm_url = $match[0];
$this
->pass(t('Confirmation URL found: @url', [
'@url' => $confirm_url,
]));
return $confirm_url;
}
protected function extractValidationLink($body) {
$pattern = '@newsletter/subscriptions/.+/.+/.{20,}@';
$found = preg_match($pattern, $body, $match);
if (!$found) {
$this
->fail(t('No validation URL found in "@body".', [
'@body' => $body,
]));
return FALSE;
}
$validate_url = $match[0];
$this
->pass(t('Validation URL found: @url', [
'@url' => $validate_url,
]));
return $validate_url;
}
public function testSubscribeAnonymous() {
$admin_user = $this
->drupalCreateUser([
'administer blocks',
'administer content types',
'administer nodes',
'access administration pages',
'administer newsletters',
'administer permissions',
]);
$this
->drupalLogin($admin_user);
$this
->drupalGet('admin/config/services/simplenews');
for ($i = 0; $i < 5; $i++) {
$this
->clickLink(t('Add newsletter'));
$name = $this
->randomMachineName();
$edit = [
'name' => $name,
'id' => strtolower($name),
'description' => $this
->randomString(20),
'access' => 'default',
];
$this
->submitForm($edit, 'Save');
}
$newsletter_id = $this
->getRandomNewsletter();
$this
->drupalLogout();
$block_settings = [
'newsletters' => [
$newsletter_id,
],
'message' => $this
->randomMachineName(4),
];
$single_block = $this
->setupSubscriptionBlock($block_settings);
$mail = '@example.com';
$edit = [
'mail[0][value]' => $mail,
];
$this
->drupalGet('');
$this
->submitForm($edit, 'Subscribe');
$this
->assertText(t('The email address @mail is not valid', [
'@mail' => $mail,
]));
$mail = $this
->randomEmail(8);
$edit = [
'mail[0][value]' => $mail,
];
$this
->drupalGet('');
$this
->submitForm($edit, 'Subscribe');
$this
->assertText(t('You will receive a confirmation e-mail shortly containing further instructions on how to complete your subscription.'));
$subscriber = Subscriber::loadByMail($mail);
$this
->assertNotNull($subscriber, 'New subscriber entity successfully loaded.');
$subscription = $subscriber
->getSubscription($newsletter_id);
$this
->assertEquals(SIMPLENEWS_SUBSCRIPTION_STATUS_UNCONFIRMED, $subscription->status, t('Subscription is unconfirmed'));
$confirm_url = $this
->extractConfirmationLink($this
->getMail(0));
$this
->drupalGet($confirm_url);
$newsletter = Newsletter::load($newsletter_id);
$this
->assertRaw(t('Are you sure you want to confirm your subscription for %user?', [
'%user' => simplenews_mask_mail($mail),
]));
$this
->submitForm([], 'Confirm');
$this
->assertRaw(t('Subscription changes confirmed for %user.', [
'%user' => $mail,
]));
$this
->assertUrl(new Url('<front>'));
$site_config = $this
->config('user.settings');
$site_config
->set('register', 'visitors');
$site_config
->set('verify_mail', FALSE);
$site_config
->save();
$pass = $this
->randomMachineName();
$edit = [
'name' => $this
->randomMachineName(),
'mail' => $mail,
'pass[pass1]' => $pass,
'pass[pass2]' => $pass,
];
$this
->drupalGet('user/register');
$this
->submitForm($edit, 'Create new account');
$this
->assertText(t('Registration successful. You are now logged in.'));
\Drupal::entityTypeManager()
->getStorage('simplenews_subscriber')
->resetCache();
$subscriber = Subscriber::loadByMail($mail);
$account = user_load_by_mail($mail);
$this
->assertEqual($subscriber
->getUserId(), $account
->id());
$this
->assertEqual($account
->getDisplayName(), $edit['name']);
$this
->drupalLogout();
$single_block
->delete();
$mail = $this
->randomEmail(8);
$this
->subscribe([], $mail);
$this
->assertText(t('You must select at least one newsletter.'));
$this
->subscribe($newsletter_id, $mail);
$this
->assertText(t('You will receive a confirmation e-mail shortly containing further instructions on how to complete your subscription.'));
$confirm_url = $this
->extractConfirmationLink($this
->getMail());
$this
->drupalGet($confirm_url);
$newsletter = Newsletter::load($newsletter_id);
$this
->assertRaw(t('Are you sure you want to confirm your subscription for %user?', [
'%user' => simplenews_mask_mail($mail),
]));
$this
->submitForm([], 'Confirm');
$this
->assertRaw(t('Subscription changes confirmed for %user.', [
'%user' => $mail,
]));
$this
->subscribe($newsletter_id, $mail);
$this
->assertText(t('You will receive a confirmation e-mail shortly containing further instructions on how to complete your subscription.'));
$subscriber = Subscriber::loadByMail($mail);
$this
->assertNotEqual($subscriber, FALSE, 'New subscriber entity successfully loaded.');
$subscription = $subscriber
->getSubscription($newsletter_id);
$this
->assertEquals(SIMPLENEWS_SUBSCRIPTION_STATUS_SUBSCRIBED, $subscription->status);
$subscriber = Subscriber::loadByMail($mail);
$hash = simplenews_generate_hash($subscriber
->getMail(), 'manage');
$this
->drupalGet('newsletter/subscriptions/' . $subscriber
->id() . '/' . REQUEST_TIME . '/' . $hash);
$this
->assertText(t('Subscriptions for @mail', [
'@mail' => $mail,
]));
$edit = [
'subscriptions[' . $newsletter_id . ']' => TRUE,
];
$this
->submitForm($edit, 'Update');
$this
->assertText(t('Your newsletter subscriptions have been updated.'));
\Drupal::entityTypeManager()
->getStorage('simplenews_subscriber')
->resetCache();
$subscriber = Subscriber::loadByMail($mail);
$this
->assertTrue($subscriber
->isSubscribed($newsletter_id));
$subscription = $subscriber
->getSubscription($newsletter_id);
$this
->assertEquals(SIMPLENEWS_SUBSCRIPTION_STATUS_SUBSCRIBED, $subscription->status);
$hash = simplenews_generate_hash($subscriber
->getMail() . 'a', 'manage');
$this
->drupalGet('newsletter/subscriptions/' . $subscriber
->id() . '/' . REQUEST_TIME . '/' . $hash);
$this
->assertResponse(404);
$mail = $this
->randomEmail();
$this
->subscribe($newsletter_id, $mail);
$subscriber = Subscriber::loadByMail($mail);
$expired_timestamp = REQUEST_TIME - 86401;
$hash = simplenews_generate_hash($subscriber
->getMail(), 'add', $expired_timestamp);
$url = 'newsletter/confirm/add/' . $subscriber
->id() . '/' . $newsletter_id . '/' . $expired_timestamp . '/' . $hash;
$this
->drupalGet($url);
$this
->assertText(t('This link has expired.'));
$this
->submitForm([], 'Request new confirmation mail');
$confirm_url = $this
->extractConfirmationLink($this
->getMail());
$this
->drupalGet($confirm_url);
$newsletter = Newsletter::load($newsletter_id);
$this
->assertRaw(t('Are you sure you want to confirm your subscription for %user?', [
'%user' => simplenews_mask_mail($mail),
]));
$this
->submitForm([], 'Confirm');
$this
->assertRaw(t('Subscription changes confirmed for %user.', [
'%user' => $mail,
]));
\Drupal::entityTypeManager()
->getStorage('simplenews_subscriber')
->resetCache();
$subscriber = Subscriber::loadByMail($mail);
$this
->assertTrue($subscriber
->isSubscribed($newsletter_id));
$subscription = $subscriber
->getSubscription($newsletter_id);
$this
->assertEquals(SIMPLENEWS_SUBSCRIPTION_STATUS_SUBSCRIBED, $subscription->status);
}
public function testSubscribeAnonymousSingle() {
$config = $this
->config('simplenews.settings');
$config
->set('subscription.skip_verification', TRUE);
$config
->save();
$admin_user = $this
->drupalCreateUser([
'administer blocks',
'administer content types',
'administer nodes',
'access administration pages',
'administer permissions',
'administer newsletters',
]);
$this
->drupalLogin($admin_user);
$this
->drupalGet('admin/config/services/simplenews');
$this
->clickLink(t('Add newsletter'));
$name = $this
->randomMachineName();
$edit = [
'name' => $name,
'id' => strtolower($name),
'description' => $this
->randomString(20),
'access' => 'default',
];
$this
->submitForm($edit, 'Save');
$this
->drupalLogout();
$newsletter_id = $edit['id'];
$block_settings = [
'newsletters' => [
$newsletter_id,
],
'message' => $this
->randomMachineName(4),
];
$this
->setupSubscriptionBlock($block_settings);
$mail = $this
->randomEmail(8);
$edit = [
'mail[0][value]' => $mail,
];
$this
->drupalGet('');
$this
->submitForm($edit, 'Subscribe');
$this
->assertText(t('You have been subscribed.'));
$subscriber = Subscriber::loadByMail($mail);
$subscription = $subscriber
->getSubscription($newsletter_id);
$this
->assertEquals(SIMPLENEWS_SUBSCRIPTION_STATUS_SUBSCRIBED, $subscription->status);
}
public function testSubscribeAuthenticated() {
$admin_user = $this
->drupalCreateUser([
'administer blocks',
'administer content types',
'administer nodes',
'access administration pages',
'administer permissions',
'administer newsletters',
]);
$this
->drupalLogin($admin_user);
$this
->drupalGet('admin/config/services/simplenews');
for ($i = 0; $i < 5; $i++) {
$this
->clickLink(t('Add newsletter'));
$name = $this
->randomMachineName();
$edit = [
'name' => $name,
'id' => strtolower($name),
'description' => $this
->randomString(20),
'access' => 'default',
];
$this
->submitForm($edit, 'Save');
}
$newsletter_id = $this
->getRandomNewsletter();
$this
->drupalLogout();
$block_settings = [
'newsletters' => [
$newsletter_id,
],
'message' => $this
->randomMachineName(4),
];
$single_block = $this
->setupSubscriptionBlock($block_settings);
$subscriber_user = $this
->drupalCreateUser([
'subscribe to newsletters',
]);
$this
->drupalLogin($subscriber_user);
$this
->assertEqual($this
->countSubscribers(), 0);
$this
->submitForm([], 'Subscribe');
$this
->assertText(t('You have been subscribed.'));
$this
->assertEqual($this
->countSubscribers(), 1);
$single_block
->delete();
$this
->resetSubscribers();
$edit = [
"subscriptions[{$newsletter_id}]" => '1',
];
$url = 'user/' . $subscriber_user
->id() . '/simplenews';
$this
->drupalGet('newsletter/subscriptions');
$this
->assertSession()
->addressEquals($url);
$this
->submitForm($edit, 'Save');
$this
->assertRaw(t('Your newsletter subscriptions have been updated.'));
$this
->assertEqual($this
->countSubscribers(), 1);
$edit = [
"subscriptions[{$newsletter_id}]" => FALSE,
];
$this
->drupalGet($url);
$this
->submitForm($edit, 'Save');
$this
->assertRaw(t('Your newsletter subscriptions have been updated.'));
$subscriber = Subscriber::loadByMail($subscriber_user
->getEmail());
$subscription = $subscriber
->getSubscription($newsletter_id);
$this
->assertEquals(SIMPLENEWS_SUBSCRIPTION_STATUS_UNSUBSCRIBED, $subscription->status, t('Subscription is unsubscribed'));
$this
->resetSubscribers();
$edit = [
"subscriptions[{$newsletter_id}]" => '1',
];
$url = 'user/' . $subscriber_user
->id() . '/simplenews';
$this
->drupalGet($url);
$this
->submitForm($edit, 'Save');
$this
->assertRaw(t('Your newsletter subscriptions have been updated.'));
$count = 1;
$this
->assertEqual($this
->countSubscribers(), $count);
$subscriber_user2 = $this
->drupalCreateUser([
'subscribe to newsletters',
]);
$this
->drupalLogin($subscriber_user2);
$this
->drupalGet('user/' . $subscriber_user
->id() . '/simplenews');
$this
->assertResponse(403);
$this
->drupalGet('user/' . $subscriber_user2
->id() . '/simplenews');
$this
->assertResponse(200);
$this
->assertNoField('mail[0][value]');
$this
->submitForm([], 'Save');
$this
->assertText(t('Your newsletter subscriptions have been updated.'));
$this
->drupalGet('user/' . $subscriber_user2
->id() . '/simplenews');
$this
->assertNoFieldChecked('edit-subscriptions-' . $newsletter_id);
$count++;
$this
->assertEqual($this
->countSubscribers(), $count);
$edit = [
'subscriptions[' . $newsletter_id . ']' => TRUE,
];
$this
->submitForm($edit, 'Save');
$this
->assertText(t('Your newsletter subscriptions have been updated.'));
$this
->assertEqual($this
->countSubscribers(), $count);
$this
->drupalGet('user/' . $subscriber_user2
->id() . '/simplenews');
$this
->assertFieldChecked('edit-subscriptions-' . $newsletter_id);
$edit = [
'subscriptions[' . $newsletter_id . ']' => FALSE,
];
$this
->submitForm($edit, 'Save');
$this
->assertText(t('Your newsletter subscriptions have been updated.'));
$this
->drupalGet('user/' . $subscriber_user2
->id() . '/simplenews');
$this
->assertNoFieldChecked('edit-subscriptions-' . $newsletter_id);
}
public function testSimplenewsSubscriptionBlock() {
$admin_user = $this
->drupalCreateUser([
'administer blocks',
]);
$this
->drupalLogin($admin_user);
$this
->drupalGet('/admin/structure/block/add/simplenews_subscription_block/classy');
$this
->assertText('Unique ID');
$edit = [
'settings[unique_id]' => 'test_simplenews_123',
'settings[newsletters][default]' => TRUE,
'region' => 'header',
];
$this
->submitForm($edit, 'Save block');
$this
->drupalGet('');
$this
->assertFieldByXPath("//*[@id=\"simplenews-subscriptions-block-test-simplenews-123\"]", NULL, 'Form ID found and contains expected value.');
}
public function testAdminCreate() {
$admin_user = $this
->drupalCreateUser([
'administer simplenews subscriptions',
]);
$this
->drupalLogin($admin_user);
$newsletter_id = $this
->getRandomNewsletter();
$mail = $this
->randomEmail();
$this
->drupalGet('admin/people/simplenews/create');
$this
->assertText('Add subscriber');
$edit = [
"subscriptions[{$newsletter_id}]" => TRUE,
'mail[0][value]' => $mail,
];
$this
->submitForm($edit, 'Save');
$this
->assertText(t('Subscriber @mail has been added.', [
'@mail' => $mail,
]));
$subscriber = Subscriber::loadByMail($mail);
$subscription = $subscriber
->getSubscription($newsletter_id);
$this
->assertEquals(SIMPLENEWS_SUBSCRIPTION_STATUS_SUBSCRIBED, $subscription->status);
$this
->drupalLogout();
user_role_revoke_permissions(AccountInterface::ANONYMOUS_ROLE, [
'subscribe to newsletters',
]);
$node = $this
->drupalCreateNode([
'type' => 'simplenews_issue',
'simplenews_issue[target_id]' => [
'target_id' => $newsletter_id,
],
]);
\Drupal::service('simplenews.spool_storage')
->addIssue($node);
\Drupal::service('simplenews.mailer')
->sendSpool();
$unsubscribe_url = $this
->extractConfirmationLink($this
->getMail(0));
$this
->drupalGet($unsubscribe_url);
$this
->assertText('Confirm remove subscription');
$this
->submitForm([], 'Unsubscribe');
$this
->assertText('was unsubscribed from the Default newsletter mailing list.');
}
public function testHashAuth() {
$user = $this
->drupalCreateUser([
'subscribe to newsletters',
]);
$mail = $user
->getEmail();
$subscriber = Subscriber::loadByMail($mail, 'create');
$subscriber
->save();
$this
->drupalGet('newsletter/subscriptions');
$this
->assertSession()
->addressEquals('/newsletter/validate');
$this
->submitForm([
'mail' => $mail,
], 'Submit');
$this
->assertSession()
->pageTextContains("If {$mail} is subscribed, an email will be sent with a link to manage your subscriptions.");
$this
->assertSession()
->addressEquals('');
$validate_url = $this
->extractValidationLink($this
->getMail(0));
$this
->drupalGet($validate_url);
$this
->assertSession()
->pageTextContains("Subscriptions for {$mail}");
$this
->submitForm([], 'Update');
$this
->assertText(t('Your newsletter subscriptions have been updated.'));
}
public function testFormatting() {
$this
->config('simplenews.settings')
->set('subscription.confirm_combined_subject', 'Please <join> us & enjoy')
->set('subscription.confirm_combined_body', "Hello & welcome,\n\nclick to join us <[simplenews-subscriber:combined-url]>")
->save();
$newsletter_id = $this
->getRandomNewsletter();
$newsletter = Newsletter::load($newsletter_id);
$newsletter->name = 'Rise & <shine>';
$newsletter
->save();
$mail = $this
->randomEmail(8);
$this
->subscribe([], $mail);
$captured_emails = $this->container
->get('state')
->get('system.test_mail_collector') ?: [];
$email = end($captured_emails);
$this
->assertEquals('Please <join> us & enjoy', $email['subject']);
$this
->assertStringContainsString("Hello & welcome,\n\nclick to join us\n<http", $email['body']);
}
public function testDuplicate() {
foreach ([
'a',
'b',
'c',
'd',
] as $i) {
$edit = [
'name' => "news_{$i}",
'id' => $i,
'access' => 'default',
];
Newsletter::create($edit)
->save();
}
$this
->config('simplenews.settings')
->set('subscription.skip_verification', TRUE)
->save();
$mail_a = $this
->randomEmail();
$this
->subscribe('a', $mail_a);
$sub_a = $this
->getLatestSubscriber();
$mail_b = $this
->randomEmail();
$this
->subscribe('b', $mail_b);
$sub_b = $this
->getLatestSubscriber();
$this
->assertEquals(2, $this
->countSubscribers());
$admin_user = $this
->drupalCreateUser([
'administer simplenews subscriptions',
'administer users',
]);
$this
->drupalLogin($admin_user);
$this
->drupalGet('admin/people/simplenews/edit/' . $sub_a
->id());
$this
->submitForm([
'mail[0][value]' => $mail_b,
], 'Save');
$this
->assertSession()
->pageTextContains("A simplenews subscriber with email {$mail_b} already exists.");
$this
->assertEquals(2, $this
->countSubscribers());
$user_c = $this
->drupalCreateUser([
'subscribe to newsletters',
]);
$this
->submitForm([
'mail[0][value]' => $user_c
->getEmail(),
], 'Save');
$sub_c = Subscriber::loadByUid($user_c
->id());
$this
->assertEquals($sub_a
->id(), $sub_c
->id());
$this
->assertEquals([
'a',
], $sub_c
->getSubscribedNewsletterIds());
$this
->assertEquals(2, $this
->countSubscribers());
$user_d = $this
->drupalCreateUser([
'subscribe to newsletters',
]);
$this
->subscribe('d', NULL, [], $user_d
->id());
$this
->assertEquals(3, $this
->countSubscribers());
$this
->drupalGet('user/' . $user_d
->id() . '/edit');
$this
->submitForm([
'mail' => $mail_b,
], 'Save');
$this
->assertEquals(2, $this
->countSubscribers());
$sub_d = Subscriber::loadByUid($user_d
->id());
$this
->assertEquals([
'd',
], $sub_d
->getSubscribedNewsletterIds());
}
protected function countSubscribers() {
return \Drupal::entityQuery('simplenews_subscriber')
->count()
->execute();
}
protected function resetSubscribers() {
$storage = \Drupal::entityTypeManager()
->getStorage('simplenews_subscriber');
$storage
->delete($storage
->loadMultiple());
}
}