@@ -102,7 +102,19 @@ protected function setUp() {
102102 $ this ->promotion ->save ();
103103
104104 /** @var \Drupal\commerce_payment\Entity\PaymentGateway $gateway */
105- $ gateway = PaymentGateway::create ([
105+ $ offsite_gateway = PaymentGateway::create ([
106+ 'id ' => 'offsite ' ,
107+ 'label ' => 'Off-site ' ,
108+ 'plugin ' => 'example_offsite_redirect ' ,
109+ 'configuration ' => [
110+ 'redirect_method ' => 'post ' ,
111+ 'payment_method_types ' => ['credit_card ' ],
112+ ],
113+ ]);
114+ $ offsite_gateway ->save ();
115+
116+ /** @var \Drupal\commerce_payment\Entity\PaymentGateway $gateway */
117+ $ onsite_gateway = PaymentGateway::create ([
106118 'id ' => 'onsite ' ,
107119 'label ' => 'On-site ' ,
108120 'plugin ' => 'example_onsite ' ,
@@ -111,7 +123,7 @@ protected function setUp() {
111123 'payment_method_types ' => ['credit_card ' ],
112124 ],
113125 ]);
114- $ gateway ->save ();
126+ $ onsite_gateway ->save ();
115127
116128 $ profile = $ this ->createEntity ('profile ' , [
117129 'type ' => 'customer ' ,
@@ -267,4 +279,47 @@ public function testCheckoutWithMainSubmit() {
267279 $ this ->assertEquals (new Price ('899.10 ' , 'USD ' ), $ this ->cart ->getTotalPrice ());
268280 }
269281
282+ /**
283+ * Tests that adding/removing coupons does not submit other panes.
284+ */
285+ public function testCheckoutSubmit () {
286+ // Start checkout, and enter billing information.
287+ $ this ->drupalGet (Url::fromRoute ('commerce_checkout.form ' , ['commerce_order ' => $ this ->cart ->id ()]));
288+ $ this ->getSession ()->getPage ()->findField ('Example ' )->check ();
289+ $ this ->waitForAjaxToFinish ();
290+ $ this ->submitForm ([
291+ 'payment_information[billing_information][address][0][address][given_name] ' => 'Johnny ' ,
292+ 'payment_information[billing_information][address][0][address][family_name] ' => 'Appleseed ' ,
293+ 'payment_information[billing_information][address][0][address][address_line1] ' => '123 New York Drive ' ,
294+ 'payment_information[billing_information][address][0][address][locality] ' => 'New York City ' ,
295+ 'payment_information[billing_information][address][0][address][administrative_area] ' => 'NY ' ,
296+ 'payment_information[billing_information][address][0][address][postal_code] ' => '10001 ' ,
297+ ], 'Continue to review ' );
298+
299+ // Go back and edit the billing information, but don't submit it.
300+ $ this ->getSession ()->getPage ()->clickLink ('Go back ' );
301+ $ address_prefix = 'payment_information[billing_information][address][0][address] ' ;
302+ $ this ->getSession ()->getPage ()->fillField ($ address_prefix . '[given_name] ' , 'John ' );
303+ $ this ->getSession ()->getPage ()->fillField ($ address_prefix . '[family_name] ' , 'Smith ' );
304+
305+ // Add a coupon.
306+ $ coupons = $ this ->promotion ->getCoupons ();
307+ $ coupon = reset ($ coupons );
308+ $ page = $ this ->getSession ()->getPage ();
309+ $ page ->fillField ('Coupon code ' , $ coupon ->getCode ());
310+ $ page ->pressButton ('Apply coupon ' );
311+ $ this ->waitForAjaxToFinish ();
312+ $ this ->assertSession ()->pageTextContains ($ coupon ->getCode ());
313+ $ this ->assertSession ()->fieldNotExists ('Coupon code ' );
314+ $ this ->assertSession ()->buttonNotExists ('Apply coupon ' );
315+
316+ // Refresh the page and ensure the billing information hasn't been modified.
317+ $ this ->drupalGet (Url::fromRoute ('commerce_checkout.form ' , ['commerce_order ' => $ this ->cart ->id (), 'step ' => 'order_information ' ]));
318+ $ page = $ this ->getSession ()->getPage ();
319+ $ given_name_field = $ page ->findField ('payment_information[billing_information][address][0][address][given_name] ' );
320+ $ family_name_field = $ page ->findField ('payment_information[billing_information][address][0][address][family_name] ' );
321+ $ this ->assertEquals ($ given_name_field ->getValue (), 'Johnny ' );
322+ $ this ->assertEquals ($ family_name_field ->getValue (), 'Appleseed ' );
323+ }
324+
270325}
0 commit comments