$this->id, 'active' => true, 'version' => '1.2.3', 'problems' => $this->problems, 'release' => ['state' => 'released'], ]; } }; } public function testGivenComponentsComeFirstInTheOrderGivenFollowedByTheEventsCalendar(): void { $probe = new EnvironmentProbe(fn (): array => [$this->component('builder', ['Etwas fehlt']), $this->component('shop')]); $components = $probe->components(); self::assertSame(['builder', 'shop', 'the-events-calendar'], array_column($components, 'id')); self::assertSame(['Etwas fehlt'], $components[0]['problems']); self::assertSame(['state' => 'released'], $components[1]['release']); } public function testComponentsMayBeGivenLazilyAndAreAskedPerCall(): void { $asked = 0; $probe = new EnvironmentProbe(function () use (&$asked): array { $asked++; return [$this->component('lazy')]; }); self::assertSame(0, $asked); self::assertSame(['lazy', 'the-events-calendar'], array_column($probe->components(), 'id')); $probe->components(); self::assertSame(2, $asked, 'asked per call, never cached: the state may change within a request'); } public function testWithoutComponentsOnlyTheEventsCalendarIsReported(): void { $components = array_column((new EnvironmentProbe())->components(), null, 'id'); self::assertSame(['the-events-calendar'], array_keys($components)); self::assertNull($components['the-events-calendar']['version']); self::assertNull($components['the-events-calendar']['release']); } }