commerce-8.x-2.8/modules/checkout/tests/src/Kernel/CheckoutOrderManagerTest.php
modules/checkout/tests/src/Kernel/CheckoutOrderManagerTest.php
<?php namespace Drupal\Tests\commerce_checkout\Kernel; use Drupal\commerce_checkout\Entity\CheckoutFlow; use Drupal\commerce_order\Entity\Order; use Drupal\Core\Url; use Drupal\Tests\commerce\Kernel\CommerceKernelTestBase; use Symfony\Cmf\Component\Routing\RouteObjectInterface; use Symfony\Component\HttpFoundation\Request; /** * Tests the checkout order manager. * * @group commerce */ class CheckoutOrderManagerTest extends CommerceKernelTestBase { /** * A sample order. * * @var \Drupal\commerce_order\Entity\OrderInterface */ protected $order; /** * The checkout order manager. * * @var \Drupal\commerce_checkout\CheckoutOrderManagerInterface */ protected $checkoutOrderManager; /** * Modules to enable. * * @var array */ public static $modules = [ 'path', 'entity_reference_revisions', 'profile', 'state_machine', 'commerce_product', 'commerce_order', 'commerce_checkout', ]; /** * {@inheritdoc} */ protected function setUp() { parent::setUp(); $this->installEntitySchema('commerce_order'); $this->installConfig('commerce_order'); $this->installConfig('commerce_product'); $this->installConfig('commerce_checkout'); $user = $this->createUser(['mail' => $this->randomString() . '@example.com']); $order = Order::create([ 'type' => 'default', 'mail' => $user->getEmail(), 'uid' => $user->id(), 'store_id' => $this->store->id(), ]); $order->save(); $this->order = $order; $this->checkoutOrderManager = $this->container->get('commerce_checkout.checkout_order_manager'); // Fake a request so that the current_route_match works. // @todo Remove this when CheckoutFlowBase stops using the route match. $url = Url::fromRoute('commerce_checkout.form', [ 'commerce_order' => $order->id(), ]); $route_provider = $this->container->get('router.route_provider'); $route = $route_provider->getRouteByName($url->getRouteName()); $request = Request::create($url->toString()); $request->attributes->add([ RouteObjectInterface::ROUTE_OBJECT => $route, 'commerce_order' => $order, ]); $this->container->get('request_stack')->push($request); } /** * Tests getting the order's checkout flow. */ public function testGetCheckoutFlow() { $checkout_flow = $this->checkoutOrderManager->getCheckoutFlow($this->order); $this->assertInstanceOf(CheckoutFlow::class, $checkout_flow); $this->assertEquals('default', $checkout_flow->id()); } /** * Tests getting the order's checkout step ID. */ public function testGetCheckoutStepId() { // Empty requested step ID when no checkout step was set. $step_id = $this->checkoutOrderManager->getCheckoutStepId($this->order); $this->assertEquals('login', $step_id); $this->order->set('checkout_step', 'review'); // Empty requested step ID. $step_id = $this->checkoutOrderManager->getCheckoutStepId($this->order); $this->assertEquals('review', $step_id); // Invalid requested step ID. $step_id = $this->checkoutOrderManager->getCheckoutStepId($this->order, 'fake_step'); $this->assertEquals('review', $step_id); // Requested step ID matches the current step ID. $step_id = $this->checkoutOrderManager->getCheckoutStepId($this->order, 'review'); $this->assertEquals('review', $step_id); // Requested step ID is before the current step ID. $step_id = $this->checkoutOrderManager->getCheckoutStepId($this->order, 'order_information'); $this->assertEquals('order_information', $step_id); // Requested step ID is after the current step ID. $step_id = $this->checkoutOrderManager->getCheckoutStepId($this->order, 'payment'); $this->assertEquals('review', $step_id); // Non-complete requested step ID for a placed order. $this->order->state = 'validation'; $step_id = $this->checkoutOrderManager->getCheckoutStepId($this->order, 'payment'); $this->assertEquals('complete', $step_id); } }