View source
<?php
namespace Drupal\Tests\commerce_stock\FunctionalJavascript;
use Drupal\commerce_product\Entity\Product;
use Drupal\commerce_product\Entity\ProductVariation;
use Drupal\commerce_product\Entity\ProductVariationType;
use Drupal\commerce_stock_local\Entity\StockLocation;
use Drupal\commerce_store\StoreCreationTrait;
use Drupal\FunctionalJavascriptTests\JSWebAssert;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\Tests\commerce\Traits\CommerceBrowserTestTrait;
abstract class StockWebDriverTestBase extends WebDriverTestBase {
use StoreCreationTrait;
use CommerceBrowserTestTrait;
public static $modules = [
'system',
'field',
'block',
'commerce',
'commerce_price',
'commerce_store',
'commerce_product',
'commerce_order',
'commerce_stock',
'field_ui',
'options',
'taxonomy',
];
protected $stockServiceManager;
protected $product;
protected $variations;
protected $stores;
protected $adminUser;
protected function getAdministratorPermissions() {
return array_merge([
'administer commerce_product',
'administer commerce_product_type',
'administer commerce_product fields',
'administer commerce_product_variation fields',
'administer commerce_product_variation display',
'access commerce_product overview',
'view the administration theme',
'access administration pages',
'access commerce administration pages',
'administer commerce_currency',
'administer commerce_store',
'administer commerce_store_type',
'administer commerce_order',
'administer commerce_stock_location',
'administer commerce_stock_location_type',
], []);
}
protected function setUp() {
parent::setUp();
$this->stockServiceManager = $this->container
->get('commerce_stock.service_manager');
$this->store = $this
->createStore();
$this
->placeBlock('local_tasks_block');
$this
->placeBlock('local_actions_block');
$this
->placeBlock('page_title_block');
$this->adminUser = $this
->drupalCreateUser($this
->getAdministratorPermissions());
$this
->drupalLogin($this->adminUser);
$location = StockLocation::create([
'type' => 'default',
'name' => 'TESTLOCATION',
]);
$location
->save();
$this->stores = [];
for ($i = 0; $i < 3; $i++) {
$this->stores[] = $this
->createStore();
}
$variation_type = ProductVariationType::load('default');
$variation_type
->setGenerateTitle(FALSE);
$variation_type
->save();
$variations = [];
for ($i = 1; $i <= 3; $i++) {
$variation = ProductVariation::create([
'type' => 'default',
'sku' => strtolower($this
->randomMachineName()),
'status' => $i % 2,
'title' => $this
->randomString(),
]);
$variation
->save();
$variations[] = $this
->reloadEntity($variation);
}
$this->variations = array_reverse($variations);
$product = Product::create([
'type' => 'default',
'variations' => $variations,
'stores' => $this->stores,
]);
$product
->save();
$this->product = $product;
}
protected function assertJsCondition($condition, $timeout = 1000, $message = '') {
$message = $message ?: "Javascript condition met:\n" . $condition;
$result = $this
->getSession()
->getDriver()
->wait($timeout, $condition);
$this
->assertNotEmpty($result, $message);
}
protected function waitForAjaxToFinish() {
$condition = "(0 === jQuery.active && 0 === jQuery(':animated').length)";
$this
->assertJsCondition($condition, 10000);
}
public function assertSession($name = NULL) {
return new JSWebAssert($this
->getSession($name), $this->baseUrl);
}
}