maestro-3.0.1-rc2/tests/src/Kernel/AndTaskRegenerationTest.php

tests/src/Kernel/AndTaskRegenerationTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\maestro\Kernel;

use Drupal;
use Drupal\KernelTests\KernelTestBase;
use Drupal\maestro\Engine\MaestroEngine;
use Drupal\maestro\Entity\MaestroQueue;
use const TASK_STATUS_FALSE_BRANCH;
use const TASK_STATUS_SUCCESS;

/**
 * Test description.
 *
 * @group maestro
 */
final class AndTaskRegenerationTest extends KernelTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'maestro',
    'maestro_test_maestro_templates',
    'maestro_utilities',
  ];

  protected MaestroEngine $maestroEngine;

  protected string $test_template_name = 'maestroandtask_in_a_loop';

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

    $this->installEntitySchema('maestro_template');
    $this->installEntitySchema('maestro_queue');
    $this->installEntitySchema('maestro_process');
    $this->installEntitySchema('maestro_entity_identifiers');
    $this->installEntitySchema('maestro_process_variables');
    $this->installEntitySchema('maestro_process_status');
    $this->installEntitySchema('maestro_production_assignments');

    $this->installConfig([
      'maestro_test_maestro_templates',
    ]);

    $this->maestroEngine = new MaestroEngine();
  }

  /**
   * This tests a template which ideally work.
   * For the template to work Maestro needs to persist transitions.
   */
  public function testAndTaskAfterLoop(): void {
    $process_id = $this->maestroEngine->newProcess("andtask_after_loop");
    $process = MaestroEngine::getProcessEntryById($process_id);

    /** @var MaestroQueue[] $allTasks */
    $allTasks = MaestroQueue::loadMultiple();
    self::assertCount(1, $allTasks);
    self::assertEquals('start', $allTasks[1]->task_id->value);
    self::assertEquals('MaestroStart', $allTasks[1]->task_class_name->value);


    $this->maestroEngine->cleanQueue();
    $allTasks = MaestroQueue::loadMultiple();
    self::assertCount(3, $allTasks);
    self::assertEquals('wait', $allTasks[2]->task_id->value);
    self::assertEquals('MaestroAnd', $allTasks[2]->task_class_name->value);
    self::assertEquals(TASK_STATUS_ACTIVE, $allTasks[2]->status->value);
    self::assertEquals('task1', $allTasks[3]->task_id->value);
    self::assertEquals('MaestroBatchFunction', $allTasks[3]->task_class_name->value);

    $this->maestroEngine->cleanQueue();
    $allTasks = MaestroQueue::loadMultiple();
    self::assertCount(4, $allTasks);
    self::assertEquals(TASK_STATUS_ACTIVE, $allTasks[2]->status->value);
    self::assertEquals('counter', $allTasks[4]->task_id->value);
    self::assertEquals('MaestroSetProcessVariable', $allTasks[4]->task_class_name->value);

    $this->maestroEngine->cleanQueue();
    $allTasks = MaestroQueue::loadMultiple();
    self::assertCount(5, $allTasks);
    self::assertEquals(TASK_STATUS_ACTIVE, $allTasks[2]->status->value);
    self::assertEquals('loop', $allTasks[5]->task_id->value);
    self::assertEquals('MaestroIf', $allTasks[5]->task_class_name->value);

    $this->maestroEngine->cleanQueue();
    $allTasks = MaestroQueue::loadMultiple();
    self::assertCount(6, $allTasks);
    self::assertEquals(TASK_STATUS_ACTIVE, $allTasks[2]->status->value);
    self::assertEquals('task1', $allTasks[6]->task_id->value);
    self::assertEquals('MaestroBatchFunction', $allTasks[6]->task_class_name->value);

    $this->maestroEngine->cleanQueue();
    $allTasks = MaestroQueue::loadMultiple();
    self::assertEquals(TASK_STATUS_ACTIVE, $allTasks[2]->status->value);
    self::assertCount(7, $allTasks);
    self::assertEquals('counter', $allTasks[7]->task_id->value);
    self::assertEquals('MaestroSetProcessVariable', $allTasks[7]->task_class_name->value);

    $this->maestroEngine->cleanQueue();
    $allTasks = MaestroQueue::loadMultiple();
    self::assertCount(8, $allTasks);
    self::assertEquals(TASK_STATUS_ACTIVE, $allTasks[2]->status->value);
    self::assertEquals('loop', $allTasks[8]->task_id->value);
    self::assertEquals('MaestroIf', $allTasks[8]->task_class_name->value);

    $this->maestroEngine->cleanQueue();
    self::assertEquals(TASK_STATUS_FALSE_BRANCH, $allTasks[8]->status->value);

    $this->maestroEngine->cleanQueue();
    $allTasks = MaestroQueue::loadMultiple();
    self::assertCount(9, $allTasks);
    self::assertEquals(TASK_STATUS_SUCCESS, $allTasks[2]->status->value);
    self::assertEquals('end', $allTasks[9]->task_id->value);
    self::assertEquals('MaestroEnd', $allTasks[9]->task_class_name->value);

    $this->maestroEngine->cleanQueue();
    self::assertTrue((bool) $process->complete->value);
  }

}

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

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