google_tag-8.x-1.x-dev/tests/src/Kernel/Events/CommerceProductEventsTest.php
tests/src/Kernel/Events/CommerceProductEventsTest.php
<?php
declare(strict_types=1);
namespace Drupal\Tests\google_tag\Kernel\Events;
use Drupal\commerce_price\Price;
use Drupal\commerce_product\Entity\Product;
use Drupal\commerce_product\Entity\ProductVariation;
use Drupal\Core\Session\AccountInterface;
use Drupal\google_tag\Entity\TagContainer;
use Drupal\Tests\commerce\Kernel\CommerceKernelTestBase;
use Drupal\Tests\google_tag\Kernel\AssertGoogleTagTrait;
use Drupal\user\Entity\User;
use Symfony\Component\HttpFoundation\Request;
/**
* Commerce product events test.
*
* @group google_tag
*/
final class CommerceProductEventsTest extends CommerceKernelTestBase {
use AssertGoogleTagTrait;
/**
* {@inheritdoc}
*/
protected static $modules = [
'path',
'commerce_product',
'google_tag',
'google_tag_test',
];
/**
* {@inheritDoc}
*/
protected function setUp(): void {
parent::setUp();
$this->installConfig(['user', 'commerce_product']);
$this->installEntitySchema('commerce_product_variation');
$this->installEntitySchema('commerce_product');
user_role_grant_permissions(AccountInterface::ANONYMOUS_ROLE, ['view commerce_product']);
}
/**
* Test view item list event.
*/
public function testViewItemList(): void {
$this->container->get('current_user')->setAccount(User::getAnonymousUser());
TagContainer::create([
'id' => 'foo',
'weight' => 10,
'events' => [
'commerce_view_item_list' => [],
],
])->save();
$variation = ProductVariation::create([
'type' => 'default',
'sku' => strtolower($this->randomMachineName()),
'title' => $this->randomString(),
'price' => new Price('12.00', 'USD'),
'status' => 1,
]);
$variation->save();
$product = Product::create([
'type' => 'default',
'title' => 'FooBaz Widget',
'stores' => [$this->store],
'variations' => [$variation],
'status' => 1,
]);
$product->save();
$request = Request::create('/catalog');
$response = $this->container->get('http_kernel')->handle($request);
self::assertEquals(200, $response->getStatusCode());
$content = $response->getContent();
self::assertNotFalse($content);
$this->setRawContent($content);
$this->assertGoogleTagEvents([
[
'name' => 'view_item_list',
'data' => [
'item_list_id' => 'catalog',
'item_list_name' => 'Catalog',
'items' => [
[
'item_name' => $variation->label(),
'item_id' => $variation->getSku(),
'affiliation' => $this->store->label(),
'price' => '12.00',
],
],
],
],
]);
}
}
