monitoring-8.x-1.x-dev/tests/src/Functional/MonitoringCommerceTest.php

tests/src/Functional/MonitoringCommerceTest.php
<?php

namespace Drupal\Tests\monitoring\Functional;

use Drupal\commerce_order\Entity\Order;
use Drupal\commerce_order\Entity\OrderItem;
use Drupal\commerce_price\Price;
use Drupal\monitoring\Entity\SensorConfig;

/**
 * Tests the commerce turnover sensor.
 *
 * @group monitoring
 */
class MonitoringCommerceTest extends MonitoringTestBase {

  /**
   * Modules to install.
   *
   * @var array
   */
  protected static $modules = ['commerce', 'commerce_order', 'node'];

  /**
   * The account for testing.
   *
   * @var \Drupal\Core\Session\AccountInterface
   */
  protected $account;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $this->account = $this->drupalCreateUser([
      'administer commerce_order',
      'administer commerce_currency',
      'administer commerce_store',
      'administer commerce_order_type',
      'administer monitoring',
      'monitoring reports',
    ]);
    $this->drupalLogin($this->account);

    // Enable currencies.
    $edit = [
      'currency_codes[]' => ['CHF', 'EUR'],
    ];
    $this->drupalGet('admin/commerce/config/currencies/add');
    $this->submitForm($edit, 'Add');

    // Create a default store.
    $edit = [
      'name[0][value]' => 'Default',
      'mail[0][value]' => 'test@example.com',
      'address[0][address][country_code]' => 'CH',
      'address[0][address][address_line1]' => 'Demo street',
      'address[0][address][locality]' => 'Demo city',
      'address[0][address][postal_code]' => '1234',
      'default_currency' => 'CHF',
    ];
    $this->drupalGet('store/add/online');
    $this->submitForm($edit, 'Save');

    // Create an order item type
    $edit = [
      'id' => 'test',
      'label' => 'Test',
      'orderType' => 'default'
    ];
    $this->drupalGet('admin/commerce/config/order-item-types/add');
    $this->submitForm($edit, 'Save');
  }

  /**
   * Tests the commerce turnover sensor.
   */
  public function testTurnoverSensor() {
    // Create commerce turnover sensor.
    $sensor = SensorConfig::create([
      'id' => 'commerce_total_turnover',
      'label' => 'Total turnover',
      'plugin_id' => 'commerce_turnover',
      'status' => 1,
      'settings' => [
        'entity_type' => 'commerce_order',
        'commerce_order_paid_states' => [],
        'commerce_order_currency' => 'CHF',
        'time_interval_field' => 'created',
        'time_interval_value' => 86400,
      ],
    ]);
    $sensor->save();
    // Assert there is no value if there are no orders.
    $result = $this->runSensor('commerce_total_turnover');
    $this->assertEquals('Value 0 in 1 day', $result->getMessage());
    $this->assertSame(0, $result->getValue());

    // Create some orders with different states and currencies.
    $this->createEmptyOrderWithPrice('canceled');
    $this->createEmptyOrderWithPrice('draft');
    $this->createEmptyOrderWithPrice('draft', 200, 'CHF');
    $this->createEmptyOrderWithPrice('draft', 1000, 'EUR');
    $this->createEmptyOrderWithPrice('completed', 1500, 'CHF');

    $result = $this->runSensor('commerce_total_turnover');
    $this->assertEquals($result->getMessage(), 'CHF 1’900.00 in 1 day');
    $this->assertEquals($result->getValue(), '1900.000000');

    // Now only consider completed orders.
    $edit = [
      'settings[commerce_order_paid_states][completed]' => TRUE,
    ];
    $this->drupalGet('admin/config/system/monitoring/sensors/commerce_total_turnover');
    $this->submitForm($edit, 'Save');

    $sensor = SensorConfig::load('commerce_total_turnover');
    $paid_states = $sensor->getSetting('commerce_order_paid_states');
    $this->assertNotContains('draft', $paid_states);
    $this->assertContains('completed', $paid_states);

    $result = $this->runSensor('commerce_total_turnover');
    $this->assertEquals($result->getMessage(), 'CHF 1’500.00 in 1 day');
    $this->assertEquals($result->getValue(), '1500.000000');

    // Change currency.
    $this->createEmptyOrderWithPrice('completed', 250, 'EUR');
    $edit = [
      'settings[commerce_order_currency]' => 'EUR',
    ];
    $this->drupalGet('admin/config/system/monitoring/sensors/commerce_total_turnover');
    $this->submitForm($edit, 'Save');

    $result = $this->runSensor('commerce_total_turnover');
    $this->assertEquals($result->getMessage(), '€ 250.00 in 1 day');
    $this->assertEquals($result->getValue(), '250.000000');
    $this->drupalLogout();
    $result = $this->runSensor('commerce_total_turnover');
    $this->assertEquals($result->getMessage(), '€ 250.00 in 1 day');
    $this->assertEquals($result->getValue(), '250.000000');
  }

  /**
   * Create an order for testing purposes.
   *
   * @param string $state
   *   State in which the order should be created.
   * @param mixed $amount
   *   The total price of the order.
   * @param string $currency
   *   Currency of the total price.
   */
  protected function createEmptyOrderWithPrice($state, $amount = 100, $currency = 'CHF') {
    $order_item = OrderItem::create([
      'type' => 'test',
      'quantity' => 1,
      'unit_price' => new Price((string) $amount, $currency),
      'overridden_unit_price' => TRUE,
    ]);
    $order_item->save();

    $order = Order::create([
      'type' => 'default',
      'state' => $state,
      'store_id' => \Drupal::service('commerce_store.current_store')->getStore()->id(),
      'order_items' => [$order_item],
    ]);
    $order->save();
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc