You are here

public function EdgeEntityAddProductEventTest::testEvent in Apigee Edge 8

Tests add_member events for Edge entities.

Throws

\Drupal\Core\Entity\EntityStorageException

\Drupal\rules\Exception\LogicException

File

modules/apigee_edge_actions/tests/src/Kernel/Plugin/RulesEvent/EdgeEntityAddProductEventTest.php, line 57

Class

EdgeEntityAddProductEventTest
Tests Edge entity add_product event.

Namespace

Drupal\Tests\apigee_edge_actions\Kernel\Plugin\RulesEvent

Code

public function testEvent() {
  $api_product_name = $this
    ->randomMachineName();

  // Create an insert rule.
  $rule = $this->expressionManager
    ->createRule();
  $rule
    ->addAction('apigee_edge_actions_log_message', ContextConfig::create()
    ->setValue('message', "Product {{ api_product_name }} was added to app {{ developer_app.name }}.")
    ->process('message', 'rules_tokens'));

  // Test condition.
  $rule
    ->addCondition('rules_data_comparison', ContextConfig::create()
    ->map('data', 'api_product_name')
    ->setValue('value', $api_product_name));
  $config_entity = $this->storage
    ->create([
    'id' => 'app_insert_rule',
    'events' => [
      [
        'event_name' => 'apigee_edge_actions_entity_add_product:developer_app',
      ],
    ],
    'expression' => $rule
      ->getConfiguration(),
  ]);
  $config_entity
    ->save();

  /** @var \Drupal\apigee_edge\Entity\AppInterface $developer_app */
  $developer_app = $this
    ->createDeveloperApp();
  $api_product = ApiProduct::create([
    'name' => $api_product_name,
    'displayName' => $this
      ->getRandomGenerator()
      ->word(16),
    'approvalType' => ApiProduct::APPROVAL_TYPE_AUTO,
  ]);

  /** @var \Drupal\apigee_edge\Entity\ApiProduct $api_product */
  $this->stack
    ->queueMockResponse([
    'api_product' => [
      'product' => $api_product,
    ],
  ]);
  $api_product
    ->save();
  $this->stack
    ->queueMockResponse([
    'api_product' => [
      'product' => $api_product,
    ],
  ]);
  $this
    ->queueDeveloperResponse($this->account);
  $this->stack
    ->queueMockResponse([
    'get_developer_apps' => [
      'apps' => [
        $developer_app,
      ],
    ],
  ]);

  /** @var \Drupal\apigee_edge\Entity\Controller\DeveloperAppCredentialControllerFactoryInterface $credential_factory */
  $credential_factory = \Drupal::service('apigee_edge.controller.developer_app_credential_factory');
  $credential_factory
    ->developerAppCredentialController($this->account
    ->uuid(), $developer_app
    ->getName())
    ->addProducts($this
    ->randomString(), [
    $api_product
      ->id(),
  ]);
  $this
    ->assertLogsContains("Event apigee_edge_actions_entity_add_product:developer_app was dispatched.");
  $this
    ->assertLogsContains("Product {$api_product->getName()} was added to app {$developer_app->getName()}.");
}