class CartCheckoutTest in Ubercart 8.4
Tests the cart and checkout functionality.
@group ubercart
Hierarchy
- class \Drupal\Tests\BrowserTestBase extends \PHPUnit\Framework\TestCase uses FunctionalTestSetupTrait, TestSetupTrait, AssertLegacyTrait, BlockCreationTrait, ConfigTestTrait, ContentTypeCreationTrait, NodeCreationTrait, PhpunitCompatibilityTrait, RandomGeneratorTrait, TestRequirementsTrait, UiHelperTrait, UserCreationTrait, XdebugRequestTrait
- class \Drupal\Tests\uc_store\Functional\UbercartBrowserTestBase uses AssertMailTrait, AttributeTestTrait, OrderTestTrait
- class \Drupal\Tests\uc_cart\Functional\CartCheckoutTest
- class \Drupal\Tests\uc_store\Functional\UbercartBrowserTestBase uses AssertMailTrait, AttributeTestTrait, OrderTestTrait
Expanded class hierarchy of CartCheckoutTest
File
- uc_cart/
tests/ src/ Functional/ CartCheckoutTest.php, line 13
Namespace
Drupal\Tests\uc_cart\FunctionalView source
class CartCheckoutTest extends UbercartBrowserTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = [
'uc_payment',
'uc_payment_pack',
];
/**
* Authenticated but unprivileged user.
*
* @var \Drupal\user\UserInterface
*/
protected $customer;
/**
* The cart manager.
*
* @var \Drupal\uc_cart\CartManagerInterface
*/
protected $cartManager;
/**
* The test user's cart.
*
* @var \Drupal\uc_cart\CartInterface
*/
protected $cart;
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
// Need page_title_block because we test page titles.
$this
->drupalPlaceBlock('page_title_block');
// Get a reference to the cart.
$this->cartManager = \Drupal::service('uc_cart.manager');
$this->cart = $this->cartManager
->get();
// Create a simple customer user account.
$this->customer = $this
->drupalCreateUser();
// Create a payment method.
$this
->createPaymentMethod('check');
// Ensure test mails are logged.
\Drupal::configFactory()
->getEditable('system.mail')
->set('interface.uc_order', 'test_mail_collector')
->save();
}
/**
* Tests cart API.
*/
public function testCartApi() {
// Test the empty cart.
$items = $this->cart
->getContents();
$this
->assertEquals([], $items, 'Cart is an empty array.');
// Add an item to the cart.
$this->cart
->addItem($this->product
->id());
$items = $this->cart
->getContents();
$this
->assertCount(1, $items, 'Cart contains one item.');
$item = reset($items);
$this
->assertEquals($this->product
->id(), $item->nid->target_id, 'Cart item nid is correct.');
$this
->assertEquals(1, $item->qty->value, 'Cart item quantity is correct.');
// Add more of the same item.
$qty = mt_rand(1, 100);
$this->cart
->addItem($this->product
->id(), $qty);
$items = $this->cart
->getContents();
$this
->assertCount(1, $items, 'Updated cart contains one item.');
$item = reset($items);
$this
->assertEquals($qty + 1, $item->qty->value, 'Updated cart item quantity is correct.');
// Set the quantity and data.
$qty = mt_rand(1, 100);
$item->qty->value = $qty;
$item->data->updated = TRUE;
$item
->save();
$items = $this->cart
->getContents();
$item = reset($items);
$this
->assertEquals($qty, $item->qty->value, 'Set cart item quantity is correct.');
$this
->assertTrue($item->data->updated, 'Set cart item data is correct.');
// Add an item with different data to the cart.
$this->cart
->addItem($this->product
->id(), 1, [
'test' => TRUE,
]);
$items = $this->cart
->getContents();
$this
->assertCount(2, $items, 'Updated cart contains two items.');
// Remove the items.
foreach ($items as $item) {
$item
->delete();
}
$items = $this->cart
->getContents();
$this
->assertCount(0, $items, 'Cart is empty after removal.');
// Empty the cart.
$this->cart
->addItem($this->product
->id());
$this->cart
->emptyCart();
$items = $this->cart
->getContents();
$this
->assertEquals([], $items, 'Cart is emptied correctly.');
}
/**
* Tests basic cart page functionality.
*/
public function testCartPage() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
\Drupal::service('module_installer')
->install([
'uc_cart_entity_test',
], FALSE);
// Test the empty cart.
$this
->drupalGet('cart');
$assert
->pageTextContains('There are no products in your shopping cart.');
// Add an item to the cart.
$this
->addToCart($this->product);
$assert
->pageTextContains($this->product
->label() . ' added to your shopping cart.');
$assert
->pageTextContains('hook_uc_cart_item_insert fired');
// Test that the item shows up in the cart.
$this
->drupalGet('cart');
$assert
->pageTextContains($this->product
->label(), 'The product is in the cart.');
// Verify the product quantity is 1.
$assert
->fieldValueEquals('items[0][qty]', 1);
// Add the item again.
$this
->addToCart($this->product);
$assert
->pageTextContains('Your item(s) have been updated.');
$assert
->pageTextContains('hook_uc_cart_item_update fired');
// Test that there are now two of the item in the cart.
$this
->drupalGet('cart');
// Verify the product quantity is 2.
$assert
->fieldValueEquals('items[0][qty]', 2);
// Update the quantity.
$qty = mt_rand(3, 100);
$this
->drupalGet('cart');
$this
->submitForm([
'items[0][qty]' => $qty,
], 'Update cart');
$assert
->pageTextContains('Your cart has been updated.');
// Verify the product quantity was updated.
$assert
->fieldValueEquals('items[0][qty]', $qty);
$assert
->pageTextContains('hook_uc_cart_item_update fired');
// Update the quantity to zero.
$this
->drupalGet('cart');
$this
->submitForm([
'items[0][qty]' => 0,
], 'Update cart');
$assert
->pageTextContains('Your cart has been updated.');
$assert
->pageTextContains('There are no products in your shopping cart.');
$assert
->pageTextContains('hook_uc_cart_item_delete fired');
// Test the remove item button.
$this
->addToCart($this->product);
$this
->drupalGet('cart');
$this
->submitForm([], 'Remove');
$assert
->pageTextContains($this->product
->label() . ' removed from your shopping cart.');
$assert
->pageTextContains('There are no products in your shopping cart.');
$assert
->pageTextContains('hook_uc_cart_item_delete fired');
// Test the empty cart button.
$this
->addToCart($this->product);
$this
->drupalGet('cart');
// Test that the empty cart button is not shown by default.
$assert
->pageTextNotContains('Empty cart');
// Enable the empty cart button.
\Drupal::configFactory()
->getEditable('uc_cart.settings')
->set('empty_button', TRUE)
->save();
$this
->drupalGet('cart');
$this
->submitForm([], 'Empty cart');
// Verify that we get a confirmation page.
$assert
->pageTextContains('Are you sure you want to empty your shopping cart?');
$this
->submitForm([], 'Confirm');
// Verify that the cart is now empty.
$assert
->pageTextContains('There are no products in your shopping cart.');
$assert
->pageTextContains('hook_uc_cart_item_delete fired');
}
/**
* Tests that anonymous cart is merged into authenticated cart upon login.
*/
public function testCartMerge() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
// Add an item to the cart as an anonymous user.
$this
->drupalLogin($this->customer);
$this
->addToCart($this->product);
$assert
->pageTextContains($this->product
->label() . ' added to your shopping cart.');
$this
->drupalLogout();
// Add an item to the cart as an anonymous user.
$this
->addToCart($this->product);
$assert
->pageTextContains($this->product
->label() . ' added to your shopping cart.');
// Log in and check the items are merged.
$this
->drupalLogin($this->customer);
$this
->drupalGet('cart');
$assert
->pageTextContains($this->product
->label(), 'The product remains in the cart after logging in.');
// Verify the product quantity is 2.
$assert
->fieldValueEquals('items[0][qty]', 2);
}
/**
* Tests that cart automatically removes products that have been deleted.
*/
public function testDeletedCartItem() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
// Add a product to the cart, then delete the node.
$this
->addToCart($this->product);
$this->product
->delete();
// Test that the cart is empty.
$this
->drupalGet('cart');
$assert
->pageTextContains('There are no products in your shopping cart.');
$this
->assertSame([], $this->cart
->getContents(), 'There are no items in the cart.');
}
/**
* Tests cart pane on checkout page.
*/
public function testCheckoutCartPane() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
// Add a product to the cart.
$this
->addToCart($this->product);
$this
->drupalGet('cart');
// Verify the product quantity is 1.
$assert
->fieldValueEquals('items[0][qty]', 1);
// Test the checkout pane.
$this
->submitForm([], 'Checkout');
$assert
->pageTextContains($this->product
->label(), 'The product title is displayed.');
$assert
->pageTextContains('1 ×', 'The product quantity is displayed.');
$assert
->pageTextContains(uc_currency_format($this->product->price->value), 'The product price is displayed.');
// Change the quantity.
$qty = mt_rand(3, 100);
$this
->drupalGet('cart');
$this
->submitForm([
'items[0][qty]' => $qty,
], 'Checkout');
// Test the checkout pane.
$assert
->pageTextContains($this->product
->label(), 'The product title is displayed.');
$assert
->pageTextContains($qty . ' ×', 'The updated product quantity is displayed.');
$assert
->pageTextContains(uc_currency_format($qty * $this->product->price->value), 'The updated product price is displayed.');
}
/**
* Tests Rule integration for uc_cart_maximum_product_qty reaction rule.
*/
// public function testMaximumQuantityRule() {
// /** @var \Drupal\Tests\WebAssert $assert */
// $assert = $this->assertSession();
//
// // Enable the example maximum quantity rule.
// $rule = rules_config_load('uc_cart_maximum_product_qty');
// $rule->active = TRUE;
// $rule->save();
// // Try to add more items than allowed to the cart.
// $this->addToCart($this->product);
// $this->drupalGet('cart');
// $this->submitForm(['items[0][qty]' => 11], 'Update cart');
// // Test the restriction was applied.
// $assert->pageTextContains('You are only allowed to order a maximum of 10 of '. $this->product->label());
// $assert->fieldValueEquals('items[0][qty]', 10);
// }
/**
* Tests authenticated user checkout.
*/
public function testAuthenticatedCheckout() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
$this
->drupalLogin($this->customer);
$this
->addToCart($this->product);
$order = $this
->checkout();
$assert
->responseContains('Your order is complete!');
$assert
->responseContains('While logged in');
$this
->assertEquals($this->customer
->id(), $order
->getOwnerId(), 'Order has the correct user ID.');
$this
->assertEquals($this->customer
->getEmail(), $order
->getEmail(), 'Order has the correct email address.');
// Check that cart is now empty.
$this
->drupalGet('cart');
$assert
->pageTextContains('There are no products in your shopping cart.');
}
/**
* Tests generating a user account upon anonymous checkout.
*/
public function testAnonymousCheckoutAccountGenerated() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
$this
->addToCart($this->product);
$this
->checkout();
$assert
->responseContains('Your order is complete!');
// Test new account email.
$mails = $this
->getMails([
'id' => 'user_register_no_approval_required',
]);
$mail = array_pop($mails);
$account = $mail['params']['account'];
$this
->assertNotEmpty($account->name->value, 'New username is not empty.');
$this
->assertNotEmpty($account->password, 'New password is not empty.');
$this
->assertNotSame(FALSE, strpos($mail['body'], $account->name->value), 'Mail body contains username.');
// Test invoice email.
$mails = $this
->getMails([
'subject' => 'Your Order at Ubercart',
]);
$mail = array_pop($mails);
$this
->assertNotSame(FALSE, strpos($mail['body'], $account->name->value), 'Invoice body contains username.');
$this
->assertNotSame(FALSE, strpos($mail['body'], $account->password), 'Invoice body contains password.');
// We can check the password now we know it.
$assert
->pageTextContains($account->name->value, 'Username is shown on screen.');
$assert
->pageTextContains($account->password, 'Password is shown on screen.');
// Check that cart is now empty.
$this
->drupalGet('cart');
$assert
->pageTextContains('There are no products in your shopping cart.');
// Check that the password works.
$edit = [
'name' => $account->name->value,
'pass' => $account->password,
];
$this
->drupalGet('user');
$this
->submitForm($edit, 'Log in');
}
/**
* Tests anonymous checkout with an existing account.
*/
public function testAnonymousCheckoutAccountProvided() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
$settings = [
// Allow customer to specify username and password.
'uc_cart_new_account_name' => TRUE,
'uc_cart_new_account_password' => TRUE,
];
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('admin/store/config/checkout');
$this
->submitForm($settings, 'Save configuration');
$this
->drupalLogout();
$username = $this
->randomMachineName(20);
$password = $this
->randomMachineName(20);
$this
->addToCart($this->product);
$this
->checkout([
'panes[customer][new_account][name]' => $username,
'panes[customer][new_account][pass]' => $password,
'panes[customer][new_account][pass_confirm]' => $password,
]);
$assert
->responseContains('Your order is complete!');
$assert
->pageTextContains($username, 'Username is shown on screen.');
$assert
->pageTextNotContains($password, 'Password is not shown on screen.');
// Test new account email.
$mails = $this
->getMails([
'id' => 'user_register_no_approval_required',
]);
$mail = array_pop($mails);
$this
->assertNotSame(FALSE, strpos($mail['body'], $username), 'Mail body contains username.');
// Test invoice email.
$mails = $this
->getMails([
'subject' => 'Your Order at Ubercart',
]);
$mail = array_pop($mails);
$this
->assertNotSame(FALSE, strpos($mail['body'], $username), 'Invoice body contains username.');
$this
->assertSame(FALSE, strpos($mail['body'], $password), 'Invoice body does not contain password.');
// Check that cart is now empty.
$this
->drupalGet('cart');
$assert
->pageTextContains('There are no products in your shopping cart.');
// Check that the password works.
$edit = [
'name' => $username,
'pass' => $password,
];
$this
->drupalGet('user');
$this
->submitForm($edit, 'Log in');
}
/**
* Tests associating an anonymous order with an existing account.
*/
public function testAnonymousCheckoutAccountExists() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
$this
->addToCart($this->product);
$this
->checkout([
'panes[customer][primary_email]' => $this->customer
->getEmail(),
]);
$assert
->responseContains('Your order is complete!');
$assert
->responseContains('order has been attached to the account we found');
// Check that cart is now empty.
$this
->drupalGet('cart');
$assert
->pageTextContains('There are no products in your shopping cart.');
}
/**
* Tests generating a new account at checkout.
*/
public function testCheckoutNewUsername() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
// Configure the checkout for this test.
$this
->drupalLogin($this->adminUser);
$settings = [
// Allow customer to specify username.
'uc_cart_new_account_name' => TRUE,
// Disable address panes.
'panes[delivery][status]' => FALSE,
'panes[billing][status]' => FALSE,
];
$this
->drupalGet('admin/store/config/checkout');
$this
->submitForm($settings, 'Save configuration');
$this
->drupalLogout();
// Test with an account that already exists.
$this
->addToCart($this->product);
$edit = [
'panes[customer][primary_email]' => $this
->randomMachineName(8) . '@example.com',
'panes[customer][new_account][name]' => $this->adminUser->name->value,
];
$this
->drupalGet('cart/checkout');
$this
->submitForm($edit, 'Review order');
$assert
->pageTextContains('The username ' . $this->adminUser->name->value . ' is already taken.');
// Let the account be automatically created instead.
$edit = [
'panes[customer][primary_email]' => $this
->randomMachineName(8) . '@example.com',
'panes[customer][new_account][name]' => '',
];
$this
->drupalGet('cart/checkout');
$this
->submitForm($edit, 'Review order');
$this
->submitForm([], 'Submit order');
$assert
->pageTextContains('Your order is complete!');
$assert
->pageTextContains('A new account has been created');
}
/**
* Tests blocked user checkout.
*/
public function testCheckoutBlockedUser() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
// Block user after checkout.
$settings = [
'uc_new_customer_status_active' => FALSE,
];
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('admin/store/config/checkout');
$this
->submitForm($settings, 'Save configuration');
$this
->drupalLogout();
// Test as anonymous user.
$this
->addToCart($this->product);
$this
->checkout();
$assert
->responseContains('Your order is complete!');
// Test new account email.
$mails = $this
->getMails([
'id' => 'user_register_pending_approval',
]);
$this
->assertNotEmpty($mails, 'Blocked user email found.');
$mails = $this
->getMails([
'id' => 'user_register_no_approval_required',
]);
$this
->assertEmpty($mails, 'No unblocked user email found.');
}
/**
* Tests logging in the customer after checkout.
*/
public function testCheckoutLogin() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
// Log in after checkout.
$settings = [
'uc_new_customer_login' => TRUE,
];
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('admin/store/config/checkout');
$this
->submitForm($settings, 'Save configuration');
$this
->drupalLogout();
// Test checkout.
$this
->addToCart($this->product);
$this
->checkout();
$assert
->responseContains('Your order is complete!');
$assert
->responseContains('you are already logged in');
// Confirm login.
$this
->drupalGet('<front>');
$assert
->pageTextContains('Member for ', 'User is logged in.');
// Check that cart is now empty.
$this
->drupalGet('cart');
$assert
->pageTextContains('There are no products in your shopping cart.');
}
/**
* Tests checkout complete functioning.
*/
public function testCheckoutComplete() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
// Payment notification is received first.
$order_data = [
'uid' => 0,
'primary_email' => 'simpletest@example.com',
];
$order = $this
->createOrder($order_data);
uc_payment_enter($order
->id(), 'other', $order
->getTotal());
$output = $this->cartManager
->completeSale($order);
// Check that a new account was created.
$this
->assertNotSame(FALSE, strpos($output['#message']['#markup'], 'new account has been created'), 'Checkout message mentions new account.');
// 3 e-mails: new account, customer invoice, admin invoice.
$this
->assertMailString('subject', 'Account details', 3, 'New account email was sent');
$this
->assertMailString('subject', 'Your Order at Ubercart', 3, 'Customer invoice was sent');
$this
->assertMailString('subject', 'New Order at Ubercart', 3, 'Admin notification was sent');
$mails = $this
->getMails();
$password = $mails[0]['params']['account']->password;
$this
->assertNotEmpty($password, 'New password is not empty.');
// Clear contents of mail collector.
\Drupal::state()
->set('system.test_mail_collector', []);
// Different user, sees the checkout page first.
$order_data = [
'uid' => 0,
'primary_email' => 'simpletest2@example.com',
];
$order = $this
->createOrder($order_data);
$output = $this->cartManager
->completeSale($order);
uc_payment_enter($order
->id(), 'other', $order
->getTotal());
// 3 e-mails: new account, customer invoice, admin invoice.
$this
->assertMailString('subject', 'Account details', 3, 'New account email was sent');
$this
->assertMailString('subject', 'Your Order at Ubercart', 3, 'Customer invoice was sent');
$this
->assertMailString('subject', 'New Order at Ubercart', 3, 'Admin notification was sent');
$mails = $this
->getMails();
$password = $mails[0]['params']['account']->password;
$this
->assertNotEmpty($password, 'New password is not empty.');
// Clear contents of mail collector.
\Drupal::state()
->set('system.test_mail_collector', []);
// Same user, new order.
$order = $this
->createOrder($order_data);
$output = $this->cartManager
->completeSale($order);
uc_payment_enter($order
->id(), 'other', $order
->getTotal());
// Check that no new account was created.
$this
->assertNotSame(FALSE, strpos($output['#message']['#markup'], 'order has been attached to the account'), 'Checkout message mentions existing account.');
// 2 e-mails: customer invoice, admin invoice.
$this
->assertNoMailString('subject', 'Account details', 3, 'New account email was sent');
$this
->assertMailString('subject', 'Your Order at Ubercart', 3, 'Customer invoice was sent');
$this
->assertMailString('subject', 'New Order at Ubercart', 3, 'Admin notification was sent');
}
/**
* Tests that cart orders are marked abandoned after a timeout.
*/
public function testCartOrderTimeout() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
$this
->addToCart($this->product);
$this
->drupalGet('cart');
$this
->submitForm([], 'Checkout');
$assert
->pageTextContains('Enter your billing address and information here.', 'Viewed cart page: Billing pane has been displayed.');
// Submit the checkout page.
$edit = $this
->populateCheckoutForm();
$oldname = $edit['panes[delivery][first_name]'];
$this
->drupalGet('cart/checkout');
$this
->submitForm($edit, 'Review order');
$order_ids = \Drupal::entityQuery('uc_order')
->condition('delivery_first_name', $oldname)
->execute();
$order_id = reset($order_ids);
if ($order_id) {
// Go to a different page, then back to order to make sure
// order_id is the same.
$this
->drupalGet('<front>');
$this
->addToCart($this->product);
$this
->drupalGet('cart');
$this
->submitForm([], 'Checkout');
// Check that customer name was unchanged.
$assert
->responseContains($oldname);
$this
->drupalGet('cart/checkout');
$this
->submitForm($edit, 'Review order');
$new_order_ids = \Drupal::entityQuery('uc_order')
->condition('delivery_first_name', $edit['panes[delivery][first_name]'])
->execute();
$new_order_id = reset($new_order_ids);
$this
->assertEquals($order_id, $new_order_id, 'Original order_id was reused.');
// Jump 10 minutes into the future.
// @todo Can we set changed through the Entity API rather than DBTNG?
\Drupal::database()
->update('uc_orders')
->fields([
'changed' => \Drupal::time()
->getCurrentTime() - CartInterface::ORDER_TIMEOUT - 1,
])
->condition('order_id', $order_id)
->execute();
// Go to a different page, then back to order to verify that we are
// using a new order.
$this
->drupalGet('<front>');
$this
->drupalGet('cart');
$this
->submitForm([], 'Checkout');
// Check that customer name was cleared after timeout.
$assert
->responseNotContains($oldname);
$newname = $this
->randomMachineName(10);
$edit['panes[delivery][first_name]'] = $newname;
$this
->drupalGet('cart/checkout');
$this
->submitForm($edit, 'Review order');
$new_order_ids = \Drupal::entityQuery('uc_order')
->condition('delivery_first_name', $newname)
->execute();
$new_order_id = reset($new_order_ids);
$this
->assertNotEquals($order_id, $new_order_id, 'New order was created after timeout.');
// Force the order to load from the DB instead of the entity cache.
$old_order = \Drupal::entityTypeManager()
->getStorage('uc_order')
->loadUnchanged($order_id);
// Verify that the status of old order is abandoned.
$this
->assertEquals('abandoned', $old_order
->getStatusId(), 'Original order was marked abandoned.');
}
else {
$this
->fail('No order was created.');
}
}
/**
* Tests functioning of customer information pane on checkout page.
*/
public function testCustomerInformationCheckoutPane() {
/** @var \Drupal\Tests\WebAssert $assert */
$assert = $this
->assertSession();
// Log in as a customer and add an item to the cart.
$this
->drupalLogin($this->customer);
$this
->addToCart($this->product);
$this
->drupalGet('cart');
$this
->submitForm([], 'Checkout');
// Test the customer information pane.
$mail = $this->customer
->getEmail();
$assert
->pageTextContains('Customer information');
$assert
->pageTextContains('Order information will be sent to your account e-mail listed below.');
$assert
->pageTextContains('E-mail address: ' . $mail);
// Use the 'edit' link to change the email address on the account.
$new_mail = $this
->randomMachineName() . '@example.com';
$this
->clickLink('edit');
$data = [
'current_pass' => $this->customer->pass_raw,
'mail' => $new_mail,
];
$this
->submitForm($data, 'Save');
// Test the updated email address.
$assert
->pageTextContains('Order information will be sent to your account e-mail listed below.');
$assert
->pageTextNotContains('E-mail address: ' . $mail);
$assert
->pageTextContains('E-mail address: ' . $new_mail);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AssertHelperTrait:: |
protected static | function | Casts MarkupInterface objects into strings. | |
AssertLegacyTrait:: |
protected | function | Deprecated Scheduled for removal in Drupal 10.0.0. Use self::assertTrue() instead. | |
AssertLegacyTrait:: |
protected | function | Asserts whether an expected cache tag was present in the last response. | |
AssertLegacyTrait:: |
protected | function | Asserts that the element with the given CSS selector is not present. | |
AssertLegacyTrait:: |
protected | function | Asserts that the element with the given CSS selector is present. | |
AssertLegacyTrait:: |
protected | function | Deprecated Scheduled for removal in Drupal 10.0.0. Use self::assertEquals() instead. | |
AssertLegacyTrait:: |
protected | function | Passes if the raw text IS found escaped on the loaded page, fail otherwise. | |
AssertLegacyTrait:: |
protected | function | Asserts that a field exists with the given name or ID. | |
AssertLegacyTrait:: |
protected | function | Asserts that a field exists with the given ID and value. | |
AssertLegacyTrait:: |
protected | function | Asserts that a field exists with the given name and value. | |
AssertLegacyTrait:: |
protected | function | Asserts that a field exists in the current page by the given XPath. | |
AssertLegacyTrait:: |
protected | function | Asserts that a checkbox field in the current page is checked. | |
AssertLegacyTrait:: |
protected | function | Asserts that a field exists in the current page with a given Xpath result. | |
AssertLegacyTrait:: |
protected | function | Checks that current response header equals value. | |
AssertLegacyTrait:: |
protected | function | Deprecated Scheduled for removal in Drupal 10.0.0. Use self::assertSame() instead. | |
AssertLegacyTrait:: |
protected | function | Deprecated Scheduled for removal in Drupal 10.0.0. Use self::assertEquals() instead. | |
AssertLegacyTrait:: |
protected | function | Passes if a link with the specified label is found. | |
AssertLegacyTrait:: |
protected | function | Passes if a link containing a given href (part) is found. | |
AssertLegacyTrait:: |
protected | function | Asserts whether an expected cache tag was absent in the last response. | |
AssertLegacyTrait:: |
protected | function | Passes if the raw text is not found escaped on the loaded page. | |
AssertLegacyTrait:: |
protected | function | Asserts that a field does NOT exist with the given name or ID. | |
AssertLegacyTrait:: |
protected | function | Asserts that a field does not exist with the given ID and value. | |
AssertLegacyTrait:: |
protected | function | Asserts that a field does not exist with the given name and value. | |
AssertLegacyTrait:: |
protected | function | Asserts that a field does not exist or its value does not match, by XPath. | |
AssertLegacyTrait:: |
protected | function | Asserts that a checkbox field in the current page is not checked. | |
AssertLegacyTrait:: |
protected | function | Passes if a link with the specified label is not found. | |
AssertLegacyTrait:: |
protected | function | Passes if a link containing a given href (part) is not found. | |
AssertLegacyTrait:: |
protected | function | Asserts that a select option does NOT exist in the current page. | |
AssertLegacyTrait:: |
protected | function | Triggers a pass if the Perl regex pattern is not found in the raw content. | |
AssertLegacyTrait:: |
protected | function | Passes if the raw text IS not found on the loaded page, fail otherwise. | 1 |
AssertLegacyTrait:: |
protected | function | Deprecated Scheduled for removal in Drupal 10.0.0. Use self::assertNotEquals() instead. | |
AssertLegacyTrait:: |
protected | function | Passes if the page (with HTML stripped) does not contains the text. | 1 |
AssertLegacyTrait:: |
protected | function | Deprecated Scheduled for removal in Drupal 10.0.0. Use self::assertNotSame() instead. | |
AssertLegacyTrait:: |
protected | function | Passes if the text is found MORE THAN ONCE on the text version of the page. | |
AssertLegacyTrait:: |
protected | function | Asserts that a select option in the current page exists. | |
AssertLegacyTrait:: |
protected | function | Asserts that a select option with the visible text exists. | |
AssertLegacyTrait:: |
protected | function | Asserts that a select option in the current page is checked. | |
AssertLegacyTrait:: |
protected | function | Triggers a pass if the Perl regex pattern is found in the raw content. | |
AssertLegacyTrait:: |
protected | function | Passes if the raw text IS found on the loaded page, fail otherwise. | 1 |
AssertLegacyTrait:: |
protected | function | Asserts the page responds with the specified response code. | 1 |
AssertLegacyTrait:: |
protected | function | Passes if the page (with HTML stripped) contains the text. | 1 |
AssertLegacyTrait:: |
protected | function | Helper for assertText and assertNoText. | |
AssertLegacyTrait:: |
protected | function | Pass if the page title is the given string. | |
AssertLegacyTrait:: |
protected | function | Passes if the text is found ONLY ONCE on the text version of the page. | |
AssertLegacyTrait:: |
protected | function | Passes if the internal browser's URL matches the given path. | |
AssertLegacyTrait:: |
protected | function | Builds an XPath query. | |
AssertLegacyTrait:: |
protected | function | Helper: Constructs an XPath for the given set of attributes and value. | |
AssertLegacyTrait:: |
protected | function | Get all option elements, including nested options, in a select. | |
AssertLegacyTrait:: |
protected | function | Gets the current raw content. | |
AssertLegacyTrait:: |
protected | function | Deprecated Scheduled for removal in Drupal 10.0.0. Use self::assertTrue() instead. | |
AssertLegacyTrait:: |
protected | function | ||
AssertMailTrait:: |
protected | function | Asserts that the most recently sent email message has the given value. | |
AssertMailTrait:: |
protected | function | Asserts that the most recently sent email message has the pattern in it. | |
AssertMailTrait:: |
protected | function | Asserts that the most recently sent email message has the string in it. | |
AssertMailTrait:: |
protected | function | Gets an array containing all emails sent during this test case. | |
AssertMailTrait:: |
protected | function | Outputs to verbose the most recent $count emails sent. | |
AttributeTestTrait:: |
protected | function | Creates an attribute. | |
AttributeTestTrait:: |
protected | function | Creates an attribute option. | |
BlockCreationTrait:: |
protected | function | Creates a block instance based on default settings. Aliased as: drupalPlaceBlock | |
BrowserHtmlDebugTrait:: |
protected | property | The Base URI to use for links to the output files. | |
BrowserHtmlDebugTrait:: |
protected | property | Class name for HTML output logging. | |
BrowserHtmlDebugTrait:: |
protected | property | Counter for HTML output logging. | |
BrowserHtmlDebugTrait:: |
protected | property | Counter storage for HTML output logging. | |
BrowserHtmlDebugTrait:: |
protected | property | Directory name for HTML output logging. | |
BrowserHtmlDebugTrait:: |
protected | property | HTML output output enabled. | |
BrowserHtmlDebugTrait:: |
protected | property | The file name to write the list of URLs to. | |
BrowserHtmlDebugTrait:: |
protected | property | HTML output test ID. | |
BrowserHtmlDebugTrait:: |
protected | function | Formats HTTP headers as string for HTML output logging. | |
BrowserHtmlDebugTrait:: |
protected | function | Returns headers in HTML output format. | 1 |
BrowserHtmlDebugTrait:: |
protected | function | Logs a HTML output message in a text file. | |
BrowserHtmlDebugTrait:: |
protected | function | Creates the directory to store browser output. | |
BrowserTestBase:: |
protected | property | The base URL. | |
BrowserTestBase:: |
protected | property | The config importer that can be used in a test. | |
BrowserTestBase:: |
protected | property | An array of custom translations suitable for drupal_rewrite_settings(). | |
BrowserTestBase:: |
protected | property | The database prefix of this test run. | |
BrowserTestBase:: |
protected | property | The theme to install as the default for testing. | 1,597 |
BrowserTestBase:: |
protected | property | Mink session manager. | |
BrowserTestBase:: |
protected | property | ||
BrowserTestBase:: |
protected | property | 1 | |
BrowserTestBase:: |
protected | property | The original container. | |
BrowserTestBase:: |
protected | property | The original array of shutdown function callbacks. | |
BrowserTestBase:: |
protected | property | ||
BrowserTestBase:: |
protected | property | The app root. | |
BrowserTestBase:: |
protected | property | Browser tests are run in separate processes to prevent collisions between code that may be loaded by tests. | |
BrowserTestBase:: |
protected | property | Time limit in seconds for the test. | |
BrowserTestBase:: |
protected | property | The translation file directory for the test environment. | |
BrowserTestBase:: |
protected | function | Clean up the Simpletest environment. | |
BrowserTestBase:: |
protected | function | Configuration accessor for tests. Returns non-overridden configuration. | |
BrowserTestBase:: |
protected | function | Translates a CSS expression to its XPath equivalent. | |
BrowserTestBase:: |
protected | function | Gets the value of an HTTP response header. | |
BrowserTestBase:: |
protected | function | Returns all response headers. | |
BrowserTestBase:: |
public static | function | Ensures test files are deletable. | |
BrowserTestBase:: |
protected | function | Gets an instance of the default Mink driver. | |
BrowserTestBase:: |
protected | function | Gets the JavaScript drupalSettings variable for the currently-loaded page. | 1 |
BrowserTestBase:: |
protected | function | Obtain the HTTP client for the system under test. | |
BrowserTestBase:: |
protected | function | Get the Mink driver args from an environment variable, if it is set. Can be overridden in a derived class so it is possible to use a different value for a subset of tests, e.g. the JavaScript tests. | 1 |
BrowserTestBase:: |
protected | function | Helper function to get the options of select field. | |
BrowserTestBase:: |
protected | function |
Provides a Guzzle middleware handler to log every response received. Overrides BrowserHtmlDebugTrait:: |
|
BrowserTestBase:: |
public | function | Returns Mink session. | |
BrowserTestBase:: |
protected | function | Get session cookies from current session. | |
BrowserTestBase:: |
protected | function |
Retrieves the current calling line in the class under test. Overrides BrowserHtmlDebugTrait:: |
|
BrowserTestBase:: |
protected | function | Visits the front page when initializing Mink. | 3 |
BrowserTestBase:: |
protected | function | Initializes Mink sessions. | 1 |
BrowserTestBase:: |
public | function | Installs Drupal into the Simpletest site. | 1 |
BrowserTestBase:: |
protected | function | Registers additional Mink sessions. | |
BrowserTestBase:: |
protected | function | 3 | |
BrowserTestBase:: |
protected | function | Transforms a nested array into a flat array suitable for drupalPostForm(). | |
BrowserTestBase:: |
protected | function | Performs an xpath search on the contents of the internal browser. | |
BrowserTestBase:: |
public | function | 1 | |
BrowserTestBase:: |
public | function | Prevents serializing any properties. | |
CartCheckoutTest:: |
protected | property | The test user's cart. | |
CartCheckoutTest:: |
protected | property | The cart manager. | |
CartCheckoutTest:: |
protected | property | Authenticated but unprivileged user. | |
CartCheckoutTest:: |
protected static | property |
Modules to enable. Overrides UbercartBrowserTestBase:: |
|
CartCheckoutTest:: |
protected | function |
Overrides UbercartBrowserTestBase:: |
|
CartCheckoutTest:: |
public | function | Tests associating an anonymous order with an existing account. | |
CartCheckoutTest:: |
public | function | Tests generating a user account upon anonymous checkout. | |
CartCheckoutTest:: |
public | function | Tests anonymous checkout with an existing account. | |
CartCheckoutTest:: |
public | function | Tests authenticated user checkout. | |
CartCheckoutTest:: |
public | function | Tests cart API. | |
CartCheckoutTest:: |
public | function | Tests that anonymous cart is merged into authenticated cart upon login. | |
CartCheckoutTest:: |
public | function | Tests that cart orders are marked abandoned after a timeout. | |
CartCheckoutTest:: |
public | function | Tests basic cart page functionality. | |
CartCheckoutTest:: |
public | function | Tests blocked user checkout. | |
CartCheckoutTest:: |
public | function | Tests cart pane on checkout page. | |
CartCheckoutTest:: |
public | function | Tests checkout complete functioning. | |
CartCheckoutTest:: |
public | function | Tests logging in the customer after checkout. | |
CartCheckoutTest:: |
public | function | Tests generating a new account at checkout. | |
CartCheckoutTest:: |
public | function | Tests functioning of customer information pane on checkout page. | |
CartCheckoutTest:: |
public | function | Tests that cart automatically removes products that have been deleted. | |
ConfigTestTrait:: |
protected | function | Returns a ConfigImporter object to import test configuration. | |
ConfigTestTrait:: |
protected | function | Copies configuration objects from source storage to target storage. | |
ContentTypeCreationTrait:: |
protected | function | Creates a custom content type based on default settings. Aliased as: drupalCreateContentType | 1 |
FunctionalTestSetupTrait:: |
protected | property | The flag to set 'apcu_ensure_unique_prefix' setting. | 1 |
FunctionalTestSetupTrait:: |
protected | property | The class loader to use for installation and initialization of setup. | |
FunctionalTestSetupTrait:: |
protected | property | The config directories used in this test. | |
FunctionalTestSetupTrait:: |
protected | property | The "#1" admin user. | |
FunctionalTestSetupTrait:: |
protected | function | Execute the non-interactive installer. | 1 |
FunctionalTestSetupTrait:: |
protected | function | Returns all supported database driver installer objects. | |
FunctionalTestSetupTrait:: |
protected | function | Initialize various configurations post-installation. | 2 |
FunctionalTestSetupTrait:: |
protected | function | Initializes the kernel after installation. | |
FunctionalTestSetupTrait:: |
protected | function | Initialize settings created during install. | |
FunctionalTestSetupTrait:: |
protected | function | Initializes user 1 for the site to be installed. | |
FunctionalTestSetupTrait:: |
protected | function | Installs the default theme defined by `static::$defaultTheme` when needed. | |
FunctionalTestSetupTrait:: |
protected | function | Install modules defined by `static::$modules`. | 1 |
FunctionalTestSetupTrait:: |
protected | function | Returns the parameters that will be used when Simpletest installs Drupal. | 9 |
FunctionalTestSetupTrait:: |
protected | function | Prepares the current environment for running the test. | 23 |
FunctionalTestSetupTrait:: |
protected | function | Creates a mock request and sets it on the generator. | |
FunctionalTestSetupTrait:: |
protected | function | Prepares site settings and services before installation. | 2 |
FunctionalTestSetupTrait:: |
protected | function | Resets and rebuilds the environment after setup. | |
FunctionalTestSetupTrait:: |
protected | function | Rebuilds \Drupal::getContainer(). | |
FunctionalTestSetupTrait:: |
protected | function | Resets all data structures after having enabled new modules. | |
FunctionalTestSetupTrait:: |
protected | function | Changes parameters in the services.yml file. | |
FunctionalTestSetupTrait:: |
protected | function | Sets up the base URL based upon the environment variable. | |
FunctionalTestSetupTrait:: |
protected | function | Rewrites the settings.php file of the test site. | |
NodeCreationTrait:: |
protected | function | Creates a node based on default settings. Aliased as: drupalCreateNode | |
NodeCreationTrait:: |
public | function | Get a node from the database based on its title. Aliased as: drupalGetNodeByTitle | |
OrderTestTrait:: |
protected | function | Creates a new order directly, without going through checkout. | |
PhpunitCompatibilityTrait:: |
public | function | Returns a mock object for the specified class using the available method. | |
PhpunitCompatibilityTrait:: |
public | function | Compatibility layer for PHPUnit 6 to support PHPUnit 4 code. | |
ProductTestTrait:: |
protected | function | Creates a new product. | |
ProductTestTrait:: |
protected | function | Creates a new product node type, AKA 'product class'. | |
RandomGeneratorTrait:: |
protected | property | The random generator. | |
RandomGeneratorTrait:: |
protected | function | Gets the random generator for the utility methods. | |
RandomGeneratorTrait:: |
protected | function | Generates a unique random string containing letters and numbers. | 1 |
RandomGeneratorTrait:: |
public | function | Generates a random PHP object. | |
RandomGeneratorTrait:: |
public | function | Generates a pseudo-random string of ASCII characters of codes 32 to 126. | |
RandomGeneratorTrait:: |
public | function | Callback for random string validation. | |
RefreshVariablesTrait:: |
protected | function | Refreshes in-memory configuration and state information. | 3 |
SessionTestTrait:: |
protected | property | The name of the session cookie. | |
SessionTestTrait:: |
protected | function | Generates a session cookie name. | |
SessionTestTrait:: |
protected | function | Returns the session name in use on the child site. | |
StorageCopyTrait:: |
protected static | function | Copy the configuration from one storage to another and remove stale items. | |
TestRequirementsTrait:: |
private | function | Checks missing module requirements. | |
TestRequirementsTrait:: |
protected | function | Check module requirements for the Drupal use case. | 1 |
TestRequirementsTrait:: |
protected static | function | Returns the Drupal root directory. | |
TestSetupTrait:: |
protected static | property | An array of config object names that are excluded from schema checking. | |
TestSetupTrait:: |
protected | property | The dependency injection container used in the test. | |
TestSetupTrait:: |
protected | property | The DrupalKernel instance used in the test. | |
TestSetupTrait:: |
protected | property | The site directory of the original parent site. | |
TestSetupTrait:: |
protected | property | The private file directory for the test environment. | |
TestSetupTrait:: |
protected | property | The public file directory for the test environment. | |
TestSetupTrait:: |
protected | property | The site directory of this test run. | |
TestSetupTrait:: |
protected | property | The temporary file directory for the test environment. | |
TestSetupTrait:: |
protected | property | The test run ID. | |
TestSetupTrait:: |
protected | function | Changes the database connection to the prefixed one. | |
TestSetupTrait:: |
protected | function | Gets the config schema exclusions for this test. | |
TestSetupTrait:: |
public static | function | Returns the database connection to the site running Simpletest. | |
TestSetupTrait:: |
protected | function | Generates a database prefix for running tests. | 2 |
UbercartBrowserTestBase:: |
protected static | property | Permissions for administrator user. | 11 |
UbercartBrowserTestBase:: |
protected | property | User with privileges to do everything. | |
UbercartBrowserTestBase:: |
protected | property | Test product. | |
UbercartBrowserTestBase:: |
protected | property |
The profile to install as a basis for testing. Overrides BrowserTestBase:: |
1 |
UbercartBrowserTestBase:: |
protected | property |
Don't check for or validate config schema. Overrides TestSetupTrait:: |
|
UbercartBrowserTestBase:: |
protected | function | Adds a product to the cart. | |
UbercartBrowserTestBase:: |
protected | function | Asserts that the most recently sent e-mails do not have the string in it. | |
UbercartBrowserTestBase:: |
protected | function | Executes the checkout process. | |
UbercartBrowserTestBase:: |
protected | function | Defines a new payment method. | |
UbercartBrowserTestBase:: |
protected | function | Helper function to fill-in required fields on the checkout page. | 1 |
UiHelperTrait:: |
protected | property | The current user logged in using the Mink controlled browser. | |
UiHelperTrait:: |
protected | property | The number of meta refresh redirects to follow, or NULL if unlimited. | |
UiHelperTrait:: |
protected | property | The number of meta refresh redirects followed during ::drupalGet(). | |
UiHelperTrait:: |
public | function | Returns WebAssert object. | 1 |
UiHelperTrait:: |
protected | function | Builds an a absolute URL from a system path or a URL object. | |
UiHelperTrait:: |
protected | function | Checks for meta refresh tag and if found call drupalGet() recursively. | |
UiHelperTrait:: |
protected | function | Clicks the element with the given CSS selector. | |
UiHelperTrait:: |
protected | function | Follows a link by complete name. | |
UiHelperTrait:: |
protected | function | Searches elements using a CSS selector in the raw content. | |
UiHelperTrait:: |
protected | function | Retrieves a Drupal path or an absolute path. | 3 |
UiHelperTrait:: |
protected | function | Logs in a user using the Mink controlled browser. | |
UiHelperTrait:: |
protected | function | Logs a user out of the Mink controlled browser and confirms. | |
UiHelperTrait:: |
protected | function | Executes a form submission. | |
UiHelperTrait:: |
protected | function | Returns whether a given user account is logged in. | |
UiHelperTrait:: |
protected | function | Takes a path and returns an absolute path. | |
UiHelperTrait:: |
protected | function | Retrieves the plain-text content from the current page. | |
UiHelperTrait:: |
protected | function | Get the current URL from the browser. | |
UiHelperTrait:: |
protected | function | Prepare for a request to testing site. | 1 |
UiHelperTrait:: |
protected | function | Fills and submits a form. | |
UserCreationTrait:: |
protected | function | Checks whether a given list of permission names is valid. | |
UserCreationTrait:: |
protected | function | Creates an administrative role. | |
UserCreationTrait:: |
protected | function | Creates a role with specified permissions. Aliased as: drupalCreateRole | |
UserCreationTrait:: |
protected | function | Create a user with a given set of permissions. Aliased as: drupalCreateUser | |
UserCreationTrait:: |
protected | function | Grant permissions to a user role. | |
UserCreationTrait:: |
protected | function | Switch the current logged in user. | |
UserCreationTrait:: |
protected | function | Creates a random user account and sets it as current user. | |
XdebugRequestTrait:: |
protected | function | Adds xdebug cookies, from request setup. |