Files
pest/src/Subscribers/EnsureTeamCityEnabled.php
T
2026-06-11 10:08:27 +01:00

60 lines
1.4 KiB
PHP

<?php
declare(strict_types=1);
namespace Pest\Subscribers;
use Pest\Logging\Converter;
use Pest\Logging\TeamCity\TeamCityLogger;
use Pest\TestSuite;
use PHPUnit\Event\TestRunner\Configured;
use PHPUnit\Event\TestRunner\ConfiguredSubscriber;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
/**
* @internal
*/
final class EnsureTeamCityEnabled implements ConfiguredSubscriber
{
/**
* Indicates if the TeamCity logger has already been registered.
*/
private static bool $registered = false;
/**
* Creates a new Configured Subscriber instance.
*/
public function __construct(
private readonly InputInterface $input,
private readonly OutputInterface $output,
private readonly TestSuite $testSuite,
) {}
/**
* Runs the subscriber.
*/
public function notify(Configured $event): void
{
if (self::$registered) {
return;
}
if (! $this->input->hasParameterOption('--teamcity')) {
return;
}
self::$registered = true;
$flowId = getenv('FLOW_ID');
$flowId = is_string($flowId) ? (int) $flowId : getmypid();
new TeamCityLogger(
$this->output,
new Converter($this->testSuite->rootPath),
$flowId === false ? null : $flowId,
getenv('COLLISION_IGNORE_DURATION') !== false
);
}
}