simplenews-3.0.0-alpha1/tests/src/Functional/SimplenewsPersonalizationFormsTest.php

tests/src/Functional/SimplenewsPersonalizationFormsTest.php
<?php

namespace Drupal\Tests\simplenews\Functional;

use Drupal\user\Entity\Role;
use Drupal\user\Entity\User;

/**
 * Tests crucial aspects of Subscriber fieldability and User field sync.
 *
 * @group simplenews
 */
class SimplenewsPersonalizationFormsTest extends SimplenewsTestBase {
  /**
   * A user with administrative permissions.
   *
   * @var \Drupal\user\UserInterface
   */
  protected $admin;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $this->addField('string', 'field_shared', 'user');
    $this->addField('string', 'field_shared', 'simplenews_subscriber');

    Role::load('anonymous')
      ->grantPermission('subscribe to newsletters')
      ->grantPermission('access user profiles')
      ->save();
    Role::load('authenticated')
      ->grantPermission('subscribe to newsletters')
      ->save();

    $this->admin = $this->drupalCreateUser([
      'administer users',
    ]);
  }

  /**
   * Subscribe then register: fields updated, subscription remains unconfirmed.
   */
  public function testSynchronizeSubscribeRegister() {
    $email = $this->randomEmail();

    // Subscribe.
    $this->subscribe('default', $email, ['field_shared[0][value]' => $this->randomString(10)]);

    // Register.
    $new_value = $this->randomString(20);
    $uid = $this->registerUser($email, ['field_shared[0][value]' => $new_value]);

    // Assert fields are updated.
    $this->drupalGet("user/$uid");
    $this->assertSession()->pageTextContains($new_value);

    // Assert subscription remains unconfirmed.
    $subscriber = $this->getLatestSubscriber();
    $this->assertFalse($subscriber->isConfirmed());
  }

  /**
   * Register then subscribe: fields updated.
   */
  public function testSynchronizeRegisterSubscribe() {
    $email = $this->randomEmail();

    // Register.
    $uid = $this->registerUser($email, ['field_shared[0][value]' => $this->randomString(10)]);
    $user = User::load($uid);

    // Subscribe anonymous, not yet confirmed.
    $new_value = $this->randomString(20);
    $this->subscribe('default', $email, ['field_shared[0][value]' => $new_value]);

    // Assert fields are not updated.
    $this->resetPassLogin($user);
    $this->drupalGet("user/$uid");
    $this->assertSession()->pageTextNotContains($new_value);

    // Confirm.
    $mails = $this->getMails();
    $confirm_url = $this->extractConfirmationLink($this->getMail());
    $this->drupalGet($confirm_url);
    $this->submitForm([], 'Confirm');

    // Assert fields are updated.
    $this->drupalGet("user/$uid");
    $this->assertSession()->pageTextContains($new_value);
  }

  /**
   * Subscribe, check no user is created.
   */
  public function testSubscribeRequestPassword() {
    $email = $this->randomEmail();
    $this->subscribe([], $email);
    $this->assertFalse(user_load_by_mail($email));
  }

  /**
   * Disable account, subscriptions inactive.
   */
  public function testDisableAccount() {
    $email = $this->randomEmail();

    // Register account.
    $uid = $this->registerUser($email);

    // Subscribe.
    $this->resetPassLogin(User::load($uid));
    $this->subscribe('default', NULL, [], $uid);
    $this->drupalLogout();

    // Disable account.
    $this->drupalLogin($this->admin);
    $this->drupalGet("user/$uid/cancel");
    // @todo Remove version_compare() condition when Drupal 9.3.0 becomes the
    // lowest-supported version of core.
    if (version_compare(\Drupal::VERSION, '9.3', '>=')) {
      $this->submitForm([], 'Confirm');
    }
    else {
      $this->submitForm([], 'Cancel account');
    }

    // Assert subscriber is inactive.
    $subscriber = $this->getLatestSubscriber();
    $this->assertFalse($subscriber->isActive());
  }

  /**
   * Delete account, subscriptions deleted.
   */
  public function testDeleteAccount() {
    $this->config('simplenews.settings')
      ->set('subscription.skip_verification', TRUE)
      ->save();
    $email = $this->randomEmail();

    // Register account.
    $uid = $this->registerUser($email);

    // Subscribe.
    $this->subscribe('default', $email);

    // Delete account.
    $this->drupalLogin($this->admin);
    $this->drupalGet("user/$uid/cancel");
    $this->submitForm(['user_cancel_method' => 'user_cancel_reassign'], 'Confirm');

    // Assert subscriptions are deleted.
    $subscriber = $this->getLatestSubscriber();
    $this->assertNull($subscriber, 'No subscriber found');
  }

  /**
   * Blocked account subscribes, display message.
   */
  public function testBlockedSubscribe() {
    $email = $this->randomEmail();

    // Register account.
    $uid = $this->registerUser($email);

    // Block account.
    $this->drupalLogin($this->admin);
    $this->drupalGet("user/$uid/edit");
    $this->submitForm(['status' => '0'], 'Save');
    $this->drupalLogout();

    // Attempt subscribe and assert "blocked" message.
    $this->subscribe('default', $email);
    $this->assertSession()->responseContains("The email address <em class=\"placeholder\">$email</em> belongs to a blocked user.");
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc