google_tag-8.x-1.x-dev/tests/src/Kernel/Events/CommerceCheckoutEventsTest.php
tests/src/Kernel/Events/CommerceCheckoutEventsTest.php
<?php declare(strict_types=1); namespace Drupal\Tests\google_tag\Kernel\Events; use Drupal\commerce_order\Entity\OrderItem; use Drupal\commerce_price\Price; use Drupal\Core\Url; use Drupal\google_tag\Entity\TagContainer; use Drupal\Tests\commerce_order\Kernel\OrderKernelTestBase; use Drupal\Tests\google_tag\Kernel\AssertGoogleTagTrait; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; /** * Commerce checkout event test. * * @requires module commerce_checkout * @group google_tag */ final class CommerceCheckoutEventsTest extends OrderKernelTestBase { use AssertGoogleTagTrait; /** * {@inheritdoc} */ protected static $modules = [ 'commerce_cart', 'commerce_checkout', 'commerce_payment', 'google_tag', ]; /** * {@inheritDoc} */ protected function setUp(): void { parent::setUp(); $this->installConfig('commerce_checkout'); } /** * Tests checkout begin. */ public function testBeginCheckout(): void { TagContainer::create([ 'id' => 'foo', 'weight' => 10, 'events' => [ 'commerce_begin_checkout' => [], ], ])->save(); $user = $this->createUser(); $cart = $this->container->get('commerce_cart.cart_provider')->createCart( 'default', $this->store, $user ); $this->container->get('commerce_cart.cart_manager')->addOrderItem( $cart, OrderItem::create([ 'title' => 'T-shirt', 'type' => 'default', 'quantity' => 2, 'unit_price' => new Price('12.00', 'USD'), ]) ); $this->container->get('current_user')->setAccount($user); $request = Request::create( Url::fromRoute('commerce_checkout.form', [ 'commerce_order' => $cart->id(), ])->toString() ); $response = $this->doRequest($request); self::assertEquals(302, $response->getStatusCode()); $response = $this->doRequest( Request::create($response->headers->get('Location')) ); self::assertEquals(200, $response->getStatusCode()); $this->assertGoogleTagEvents([ [ 'name' => 'begin_checkout', 'data' => [ 'currency' => 'USD', 'value' => '24', 'items' => [ [ 'item_id' => '', 'item_name' => 'T-shirt', 'affiliation' => 'Default store', 'discount' => '0', 'price' => '12', 'quantity' => '2', ], ], ], ], ]); } /** * Tests purchase. */ public function testPurchase(): void { TagContainer::create([ 'id' => 'foo', 'weight' => 10, 'events' => [ 'commerce_purchase' => [], ], ])->save(); $user = $this->createUser(); $cart = $this->container->get('commerce_cart.cart_provider')->createCart( 'default', $this->store, $user ); $this->container->get('commerce_cart.cart_manager')->addOrderItem( $cart, OrderItem::create([ 'title' => 'T-shirt', 'type' => 'default', 'quantity' => 2, 'unit_price' => new Price('12.00', 'USD'), ]) ); $cart->getState()->applyTransitionById('place'); $cart->save(); $this->container->get('current_user')->setAccount($user); $request = Request::create( Url::fromRoute('commerce_checkout.form', [ 'commerce_order' => $cart->id(), ])->toString() ); $response = $this->doRequest($request); self::assertEquals(302, $response->getStatusCode()); $response = $this->doRequest( Request::create($response->headers->get('Location')) ); self::assertEquals(200, $response->getStatusCode()); $this->assertGoogleTagEvents([ [ 'name' => 'purchase', 'data' => [ 'currency' => 'USD', 'value' => '24', 'transaction_id' => $cart->getOrderNumber(), 'shipping' => '0', 'tax' => '0', 'items' => [ [ 'item_id' => '', 'item_name' => 'T-shirt', 'affiliation' => 'Default store', 'discount' => '0', 'price' => '12', 'quantity' => '2', ], ], ], ], ]); } /** * Sends request and sets raw content. * * @param \Symfony\Component\HttpFoundation\Request $request * Symfony request. * * @throws \Exception */ protected function doRequest(Request $request): Response { $response = $this->container->get('http_kernel')->handle($request); $content = $response->getContent(); self::assertNotFalse($content); $this->setRawContent($content); return $response; } }