commerce-8.x-2.8/modules/payment/tests/src/Functional/PaymentGatewayTest.php
modules/payment/tests/src/Functional/PaymentGatewayTest.php
<?php namespace Drupal\Tests\commerce_payment\Functional; use Drupal\commerce_payment\Entity\PaymentGateway; use Drupal\Tests\commerce\Functional\CommerceBrowserTestBase; /** * Tests the payment gateway UI. * * @group commerce */ class PaymentGatewayTest extends CommerceBrowserTestBase { /** * {@inheritdoc} */ public static $modules = [ 'commerce_payment_example', ]; /** * {@inheritdoc} */ protected function getAdministratorPermissions() { return array_merge([ 'administer commerce_payment_gateway', ], parent::getAdministratorPermissions()); } /** * Tests creating a payment gateway. */ public function testPaymentGatewayCreation() { $this->drupalGet('admin/commerce/config/payment-gateways'); $this->getSession()->getPage()->clickLink('Add payment gateway'); $this->assertSession()->addressEquals('admin/commerce/config/payment-gateways/add'); $values = [ 'label' => 'Example', 'plugin' => 'example_offsite_redirect', 'configuration[example_offsite_redirect][redirect_method]' => 'post', 'configuration[example_offsite_redirect][mode]' => 'test', 'status' => '1', // Setting the 'id' can fail if focus switches to another field. // This is a bug in the machine name JS that can be reproduced manually. 'id' => 'example', ]; $this->submitForm($values, 'Save'); $this->assertSession()->addressEquals('admin/commerce/config/payment-gateways'); $this->assertSession()->responseContains('Example'); $this->assertSession()->responseContains('Test'); $payment_gateway = PaymentGateway::load('example'); $this->assertEquals('example', $payment_gateway->id()); $this->assertEquals('Example', $payment_gateway->label()); $this->assertEquals('example_offsite_redirect', $payment_gateway->getPluginId()); $this->assertEmpty($payment_gateway->getConditions()); $this->assertEquals('AND', $payment_gateway->getConditionOperator()); $this->assertEquals(TRUE, $payment_gateway->status()); $payment_gateway_plugin = $payment_gateway->getPlugin(); $this->assertEquals('test', $payment_gateway_plugin->getMode()); $configuration = $payment_gateway_plugin->getConfiguration(); $this->assertEquals('post', $configuration['redirect_method']); } /** * Tests editing a payment gateway. */ public function testPaymentGatewayEditing() { $values = [ 'id' => 'edit_example', 'label' => 'Edit example', 'plugin' => 'example_offsite_redirect', 'status' => 0, ]; $payment_gateway = $this->createEntity('commerce_payment_gateway', $values); $this->drupalGet('admin/commerce/config/payment-gateways/manage/' . $payment_gateway->id()); $values += [ 'configuration[example_offsite_redirect][redirect_method]' => 'get', 'configuration[example_offsite_redirect][mode]' => 'live', 'conditionOperator' => 'OR', ]; $this->submitForm($values, 'Save'); \Drupal::entityTypeManager()->getStorage('commerce_payment_gateway')->resetCache(); $payment_gateway = PaymentGateway::load('edit_example'); $this->assertEquals('edit_example', $payment_gateway->id()); $this->assertEquals('Edit example', $payment_gateway->label()); $this->assertEquals('example_offsite_redirect', $payment_gateway->getPluginId()); $this->assertEmpty($payment_gateway->getConditions()); $this->assertEquals('OR', $payment_gateway->getConditionOperator()); $this->assertEquals(FALSE, $payment_gateway->status()); $payment_gateway_plugin = $payment_gateway->getPlugin(); $this->assertEquals('live', $payment_gateway_plugin->getMode()); $configuration = $payment_gateway_plugin->getConfiguration(); $this->assertEquals('get', $configuration['redirect_method']); } /** * Tests deleting a payment gateway. */ public function testPaymentGatewayDeletion() { $payment_gateway = $this->createEntity('commerce_payment_gateway', [ 'id' => 'for_deletion', 'label' => 'For deletion', 'plugin' => 'example_offsite_redirect', ]); $this->drupalGet('admin/commerce/config/payment-gateways/manage/' . $payment_gateway->id() . '/delete'); $this->submitForm([], 'Delete'); $this->assertSession()->addressEquals('admin/commerce/config/payment-gateways'); $payment_gateway_exists = (bool) PaymentGateway::load('for_deletion'); $this->assertEmpty($payment_gateway_exists, 'The payment gateway has been deleted from the database.'); } }