Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion MIGRATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -1919,7 +1919,7 @@ A tag that was only meant for some of the scenarios in a feature moves down onto

Mink owns the word "driver" across the Behat ecosystem, and this package used it for a second thing: the Drupal, Drush and Blackbox backends a step resolves a capability from. So `$this->getDriver('drupal')` and `$this->getSession()->getDriver()` returned 2 unrelated objects, and only a naming rule told them apart. The backends now carry their own name, and "driver" in this package only ever means Mink's browser driver.

Apart from 1 removed interface, it's a rename: behaviour stays the same, and no step text changes. Configuration and feature files fail until they're renamed, and PHP that calls a renamed class or method fails on the missing name, so nothing keeps running against the old names by accident.
Apart from 1 removed interface, it's a rename: behaviour stays the same, and no step text changes. Configuration and feature files fail until they're renamed, and PHP that calls a renamed class or method fails on the missing name. The service container is the exception: a parameter, service tag or service id under its old name can go unread without an error, so [Service ids and parameters](#service-ids-and-parameters) lists what to check.

### Configuration and tags

Expand Down Expand Up @@ -2075,6 +2075,8 @@ A parameter named `$driver` that held a backend is now `$backend`. That only mat

The parameters follow their service: `behat_steps.driver_registry.class` becomes `behat_steps.backend_registry.class`, `behat_steps.driver.drush.binary` becomes `behat_steps.backend.drush.binary`, and so on for every `.class`, `drupal_root`, `alias`, `binary` and `root` parameter. Unlike the configuration key, a parameter under its old name isn't rejected - it's just never read again - so a suite that swaps an implementation through one should check it renamed it.

An old service id is only loud where something requires it. An `@behat_steps.driver_registry` argument or a `getDefinition()` call fails the container build on the missing service, though Symfony's message doesn't mention the rename. A `hasDefinition()` check or a service defined under an old id is as quiet as a parameter.

A backend of your own registers by tagging its service `behat_steps.backend`, with the name it answers to as the alias:

```yaml
Expand All @@ -2087,6 +2089,10 @@ tags:
- { name: behat_steps.backend, alias: acme-jsonapi }
```

A service still tagged `behat_steps.driver` isn't registered at all. When the `backends` list names it, the container build fails with `The "backends" list under "behat_steps" names the backend "acme-jsonapi", which is not registered.` Without a `backends` list it's left out of the scenario's order, so each step resolves the first remaining backend that provides its capability, or fails with `No backend provides "..."` when none does.

`grep -rnE 'behat_steps\.(listener\.)?driver' <your extension directory>` lists every container name that needs the rename: parameters, service ids and tags.

### Messages

A failure that names the concept now says "backend", so a test that asserts one of these messages needs the new text:
Expand Down
2 changes: 1 addition & 1 deletion docs.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@
use DrevOps\BehatSteps\Behat\Prerequisite\PrerequisiteReader;
use DrevOps\BehatSteps\Behat\ServiceContainer\BehatStepsExtension;
use Symfony\Component\Config\Definition\ArrayNode;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\BooleanNode;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\IntegerNode;
use Symfony\Component\Config\Definition\NodeInterface;
use Symfony\Component\Config\Definition\PrototypedArrayNode;
Expand Down
2 changes: 1 addition & 1 deletion docs/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,8 @@ A suite that writes its own Drupal steps composes the helper for the concern it
<?php

use Behat\Step\When;
use DrevOps\BehatSteps\Behat\Context\WebRawContext;
use DrevOps\BehatSteps\Backend\Entity\EntityStub;
use DrevOps\BehatSteps\Behat\Context\WebRawContext;
use DrevOps\BehatSteps\Helper\Drupal\EntityLifecycleTrait;

class SpecContext extends WebRawContext {
Expand Down
1 change: 1 addition & 0 deletions phpcs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<rule ref="Generic.PHP.RequireStrictTypes" />
<rule ref="PHPCompatibility"/>
<rule ref="DrevOps"/>
<rule ref="SlevomatCodingStandard.Namespaces.AlphabeticallySortedUses"/>

<!-- Show sniff codes in all reports -->
<arg value="s"/>
Expand Down
4 changes: 2 additions & 2 deletions src/Behat/Generator/ClassGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ class ClassGenerator implements UpstreamClassGenerator {
protected static string $template = <<<'PHP'
<?php

{namespace}use DrevOps\BehatSteps\Behat\Context\WebRawContext;
{namespace}use Behat\Behat\Tester\Exception\PendingException;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;
use Behat\Behat\Tester\Exception\PendingException;
use DrevOps\BehatSteps\Behat\Context\WebRawContext;

/**
* Defines application features from the specific context.
Expand Down
8 changes: 4 additions & 4 deletions tests/behat/bootstrap/BehatCliContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -326,10 +326,10 @@ public function iRunBehat($argumentsString = '')

$this->process = Process::fromShellCommandline($cmd);

// Prepare the process parameters. The 3.x DrupalDriver bootstraps Drupal
// in-process before any step runs, which on @api scenarios with module
// install/uninstall easily eats >20s in this environment. Bump the
// ceiling so behat-cli driven tests have headroom for the slow path.
// Prepare the process parameters. The Drupal backend bootstraps Drupal
// in-process, which on @api scenarios with module install/uninstall easily
// eats >20s in this environment. Bump the ceiling so behat-cli driven
// tests have headroom for the slow path.
$this->process->setTimeout(60);
$this->process->setEnv($this->env);
$this->process->setWorkingDirectory($this->workingDir);
Expand Down
2 changes: 1 addition & 1 deletion tests/behat/bootstrap/BehatCliTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,9 @@ public function behatCliWriteFeatureContextFile(array $traits = []): string {

use Behat\Hook\AfterScenario;
use Behat\Step\Given;
use DrevOps\BehatSteps\Backend\Capability\CoreCapabilityInterface;
use DrevOps\BehatSteps\Behat\Context\UserAwareInterface;
use DrevOps\BehatSteps\Behat\Context\WebRawContext;
use DrevOps\BehatSteps\Backend\Capability\CoreCapabilityInterface;
use DrevOps\BehatSteps\Helper\Drupal\AuthTrait;
use DrevOps\BehatSteps\Helper\Drupal\StaticCacheTrait;
{{USE_DECLARATION}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

use DrevOps\BehatSteps\Backend\Core\Core;
use DrevOps\BehatSteps\Backend\Entity\EntityStub;
use Drupal\KernelTests\KernelTestBase;
use Drupal\block\Entity\Block;
use Drupal\block_content\Entity\BlockContent;
use Drupal\block_content\Entity\BlockContentType;
use Drupal\KernelTests\KernelTestBase;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,37 +46,37 @@ protected function setUp(): void {
*/
public function testCacheClearDispatches(): void {
// Populate a cache entry so the clear has something to flush.
\Drupal::cache()->set('drupal_driver_test:sentinel', 'value');
$this->assertNotFalse(\Drupal::cache()->get('drupal_driver_test:sentinel'));
\Drupal::cache()->set('drupal_backend_test:sentinel', 'value');
$this->assertNotFalse(\Drupal::cache()->get('drupal_backend_test:sentinel'));

$this->core->cacheClear();

$this->assertFalse(\Drupal::cache()->get('drupal_driver_test:sentinel'));
$this->assertFalse(\Drupal::cache()->get('drupal_backend_test:sentinel'));
}

/**
* Tests that 'cacheClearStatic()' resets Drupal's static caches.
*/
public function testCacheClearStaticResetsStatics(): void {
$counter = &drupal_static('drupal_driver_test_counter');
$counter = &drupal_static('drupal_backend_test_counter');
$counter = 7;
$this->assertSame(7, drupal_static('drupal_driver_test_counter'));
$this->assertSame(7, drupal_static('drupal_backend_test_counter'));

$this->core->cacheClearStatic();

$this->assertNull(drupal_static('drupal_driver_test_counter'));
$this->assertNull(drupal_static('drupal_backend_test_counter'));
}

/**
* Tests that 'cacheClearStatic()' empties the memory cache bin.
*/
public function testCacheClearStaticEmptiesTheMemoryBin(): void {
\Drupal::cache('memory')->set('drupal_driver_test:memory', 'value');
$this->assertNotFalse(\Drupal::cache('memory')->get('drupal_driver_test:memory'));
\Drupal::cache('memory')->set('drupal_backend_test:memory', 'value');
$this->assertNotFalse(\Drupal::cache('memory')->get('drupal_backend_test:memory'));

$this->core->cacheClearStatic();

$this->assertFalse(\Drupal::cache('memory')->get('drupal_driver_test:memory'));
$this->assertFalse(\Drupal::cache('memory')->get('drupal_backend_test:memory'));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

use DrevOps\BehatSteps\Backend\Core\Core;
use DrevOps\BehatSteps\Backend\Entity\EntityStub;
use Drupal\KernelTests\KernelTestBase;
use Drupal\commerce_product\Entity\Product;
use Drupal\commerce_store\Entity\Store;
use Drupal\KernelTests\KernelTestBase;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

use DrevOps\BehatSteps\Backend\Core\Core;
use DrevOps\BehatSteps\Backend\Entity\EntityStub;
use Drupal\KernelTests\KernelTestBase;
use Drupal\content_moderation\Entity\ContentModerationState;
use Drupal\content_moderation\Plugin\WorkflowType\ContentModeration;
use Drupal\KernelTests\KernelTestBase;
use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;
use Drupal\workflows\Entity\Workflow;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
use DrevOps\BehatSteps\Backend\Core\Core;
use DrevOps\BehatSteps\Backend\Entity\EntityStub;
use Drupal\Core\Entity\EntityInterface;
use Drupal\KernelTests\KernelTestBase;
use Drupal\entity_test\EntityTestHelper;
use Drupal\KernelTests\KernelTestBase;
use Drupal\user\Entity\Role;
use Drupal\user\Entity\User;
use PHPUnit\Framework\Attributes\CoversClass;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
use DrevOps\BehatSteps\Backend\Core\Core;
use DrevOps\BehatSteps\Backend\Entity\EntityStub;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\KernelTests\KernelTestBase;
use Drupal\entity_test\EntityTestHelper;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\KernelTests\KernelTestBase;
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@
use Behat\Testwork\Environment\EnvironmentManager;
use Behat\Testwork\Hook\HookDispatcher;
use Behat\Testwork\Hook\HookRepository;
use DrevOps\BehatSteps\Helper\Drupal\EntityLifecycleTrait;
use DrevOps\BehatSteps\Behat\Manager\BackendRegistry;
use DrevOps\BehatSteps\Behat\Manager\BackendRegistryInterface;
use DrevOps\BehatSteps\Backend\BackendInterface;
use DrevOps\BehatSteps\Backend\Capability\ContentCapabilityInterface;
use DrevOps\BehatSteps\Backend\Core\CoreInterface;
use DrevOps\BehatSteps\Backend\Core\Field\FieldClassifierInterface;
use DrevOps\BehatSteps\Backend\BackendInterface;
use DrevOps\BehatSteps\Backend\DrupalBackendInterface;
use DrevOps\BehatSteps\Backend\Entity\EntityStub;
use DrevOps\BehatSteps\Behat\Manager\BackendRegistry;
use DrevOps\BehatSteps\Behat\Manager\BackendRegistryInterface;
use DrevOps\BehatSteps\Helper\Drupal\EntityLifecycleTrait;
use DrevOps\BehatSteps\Tests\Unit\Behat\Fixtures\TestableRawContext;
use Drupal\KernelTests\KernelTestBase;
use Drupal\taxonomy\Entity\Vocabulary;
Expand Down
2 changes: 1 addition & 1 deletion tests/phpunit/src/Unit/Backend/CoreLookupTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

namespace DrevOps\BehatSteps\Tests\Unit\Backend;

use DrevOps\BehatSteps\Backend\Core99\Core as Core99Core;
use DrevOps\BehatSteps\Backend\Core\Core;
use DrevOps\BehatSteps\Backend\Core99\Core as Core99Core;
use DrevOps\BehatSteps\Backend\DrupalBackend;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
Expand Down
2 changes: 1 addition & 1 deletion tests/phpunit/src/Unit/Backend/DrushBackendResultTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

namespace DrevOps\BehatSteps\Tests\Unit\Backend;

use DrevOps\BehatSteps\Backend\DrushBackend;
use DrevOps\BehatSteps\Backend\Drush\DrushResult;
use DrevOps\BehatSteps\Backend\DrushBackend;
use DrevOps\BehatSteps\Tests\Unit\Backend\Fixtures\ProcessStubDrushBackend;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
Expand Down
8 changes: 4 additions & 4 deletions tests/phpunit/src/Unit/Behat/Generator/ClassGeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,10 @@ public static function dataProviderGenerateClass(): \Iterator {

namespace App\Tests\Behat;

use DrevOps\BehatSteps\Behat\Context\WebRawContext;
use Behat\Behat\Tester\Exception\PendingException;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;
use Behat\Behat\Tester\Exception\PendingException;
use DrevOps\BehatSteps\Behat\Context\WebRawContext;

/**
* Defines application features from the specific context.
Expand Down Expand Up @@ -82,10 +82,10 @@ public function __construct(array $config = []) {
$rootless = <<<'PHP'
<?php

use DrevOps\BehatSteps\Behat\Context\WebRawContext;
use Behat\Behat\Tester\Exception\PendingException;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;
use Behat\Behat\Tester\Exception\PendingException;
use DrevOps\BehatSteps\Behat\Context\WebRawContext;

/**
* Defines application features from the specific context.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
use Behat\Gherkin\Node\OutlineNode;
use Behat\Gherkin\Node\ScenarioNode;
use Behat\Testwork\Environment\Environment;
use DrevOps\BehatSteps\Backend\BackendInterface;
use DrevOps\BehatSteps\Behat\Listener\BackendListener;
use DrevOps\BehatSteps\Behat\Manager\BackendRegistryInterface;
use DrevOps\BehatSteps\Behat\Manager\ScenarioTagRegistry;
use DrevOps\BehatSteps\Backend\BackendInterface;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
Expand Down
10 changes: 5 additions & 5 deletions tests/phpunit/src/Unit/Behat/Manager/AuthenticatorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@
use Behat\Mink\Exception\DriverException;
use Behat\Mink\Mink;
use Behat\Mink\Session;
use DrevOps\BehatSteps\Backend\BackendInterface;
use DrevOps\BehatSteps\Backend\Capability\AuthenticationCapabilityInterface;
use DrevOps\BehatSteps\Backend\Entity\EntityStub;
use DrevOps\BehatSteps\Backend\Entity\EntityStubInterface;
use DrevOps\BehatSteps\Behat\Manager\Authenticator;
use DrevOps\BehatSteps\Behat\Manager\BasicAuthenticator;
use DrevOps\BehatSteps\Behat\Manager\AuthenticatorInterface;
use DrevOps\BehatSteps\Behat\Manager\BackendRegistryInterface;
use DrevOps\BehatSteps\Behat\Manager\BasicAuthenticator;
use DrevOps\BehatSteps\Behat\Manager\FastLogoutInterface;
use DrevOps\BehatSteps\Behat\Manager\UserRegistry;
use DrevOps\BehatSteps\Behat\Manager\UserRegistryInterface;
use DrevOps\BehatSteps\Backend\Capability\AuthenticationCapabilityInterface;
use DrevOps\BehatSteps\Backend\BackendInterface;
use DrevOps\BehatSteps\Backend\Entity\EntityStub;
use DrevOps\BehatSteps\Backend\Entity\EntityStubInterface;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\MockObject\MockObject;
Expand Down
6 changes: 3 additions & 3 deletions tests/phpunit/src/Unit/Behat/Manager/BackendRegistryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
namespace DrevOps\BehatSteps\Tests\Unit\Behat\Manager;

use Behat\Testwork\Environment\Environment;
use DrevOps\BehatSteps\Behat\Manager\BackendRegistry;
use DrevOps\BehatSteps\Behat\Manager\BackendRegistryInterface;
use DrevOps\BehatSteps\Backend\BackendInterface;
use DrevOps\BehatSteps\Backend\Capability\CacheCapabilityInterface;
use DrevOps\BehatSteps\Backend\Capability\ContentCapabilityInterface;
use DrevOps\BehatSteps\Backend\BackendInterface;
use DrevOps\BehatSteps\Backend\Exception\UnsupportedBackendActionException;
use DrevOps\BehatSteps\Behat\Manager\BackendRegistry;
use DrevOps\BehatSteps\Behat\Manager\BackendRegistryInterface;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,19 @@

namespace DrevOps\BehatSteps\Tests\Unit\Behat\Prerequisite;

use DrevOps\BehatSteps\Behat\Prerequisite\Prerequisite;
use DrevOps\BehatSteps\Behat\Prerequisite\PrerequisiteReader;
use DrevOps\BehatSteps\Backend\Capability\CoreCapabilityInterface;
use DrevOps\BehatSteps\Backend\Capability\ModuleCapabilityInterface;
use DrevOps\BehatSteps\Behat\Prerequisite\Prerequisite;
use DrevOps\BehatSteps\Behat\Prerequisite\PrerequisiteReader;
use DrevOps\BehatSteps\Steps\Drupal\SearchApiTrait;
use DrevOps\BehatSteps\Tests\Unit\Behat\Fixtures\ConfigurableContext;
use DrevOps\BehatSteps\Tests\Unit\Behat\Fixtures\CountedPrerequisiteTrait;
use DrevOps\BehatSteps\Tests\Unit\Behat\Fixtures\NotListPrerequisiteTrait;
use DrevOps\BehatSteps\Tests\Unit\Behat\Fixtures\PrerequisiteContext;
use DrevOps\BehatSteps\Tests\Unit\Behat\Fixtures\PrerequisiteReaderHost;
use DrevOps\BehatSteps\Tests\Unit\Behat\Fixtures\RedeclaringPrerequisiteReaderHost;
use DrevOps\BehatSteps\Tests\Unit\Behat\Fixtures\SamplePrerequisiteTrait;
use DrevOps\BehatSteps\Tests\Unit\Behat\Fixtures\SampleConfigTrait;
use DrevOps\BehatSteps\Tests\Unit\Behat\Fixtures\SamplePrerequisiteTrait;
use DrevOps\BehatSteps\Tests\Unit\Behat\Fixtures\WrongEntryPrerequisiteTrait;
use DrevOps\BehatSteps\Tests\UnitTestCase;
use PHPUnit\Framework\Attributes\CoversClass;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@

namespace DrevOps\BehatSteps\Tests\Unit\Behat\ServiceContainer;

use DrevOps\BehatSteps\Behat\Manager\BackendRegistry;
use DrevOps\BehatSteps\Behat\ServiceContainer\BackendPass;
use DrevOps\BehatSteps\Backend\BlackboxBackend;
use DrevOps\BehatSteps\Backend\Core\Core;
use DrevOps\BehatSteps\Backend\DrupalBackend;
use DrevOps\BehatSteps\Behat\Manager\BackendRegistry;
use DrevOps\BehatSteps\Behat\ServiceContainer\BackendPass;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\ContainerBuilder;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@
use DrevOps\BehatSteps\Helper\Drupal\AuthTrait;
use DrevOps\BehatSteps\Helper\Drupal\EntityLifecycleTrait;
use DrevOps\BehatSteps\Helper\Drupal\StaticCacheTrait;
use DrevOps\BehatSteps\Tests\UnitTestCase;
use DrevOps\BehatSteps\Tests\Unit\Behat\Fixtures\TestableRawContext;
use DrevOps\BehatSteps\Tests\Unit\Behat\Fixtures\ThrowingHookReader;
use DrevOps\BehatSteps\Tests\UnitTestCase;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use PHPUnit\Framework\Attributes\CoversClass;
Expand Down
2 changes: 1 addition & 1 deletion tests/phpunit/src/Unit/Helper/Web/LastStepTraitTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@

use Behat\Behat\Hook\Scope\AfterStepScope;
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
use Behat\Behat\Tester\Result\StepResult;
use Behat\Gherkin\Node\FeatureNode;
use Behat\Gherkin\Node\ScenarioNode;
use Behat\Gherkin\Node\StepNode;
use Behat\Testwork\Environment\Environment;
use Behat\Behat\Tester\Result\StepResult;
use DrevOps\BehatSteps\Helper\Web\LastStepTrait;
use DrevOps\BehatSteps\Tests\UnitTestCase;
use PHPUnit\Framework\Attributes\CoversTrait;
Expand Down