tickets = new TicketRepository($db); $this->events = new EventRepository($db); $systems = new SystemRepository($db); $kpis = new KpiRepository($db); $agents = new AgentRepository($db); $this->changeFeed = new ChangeFeed($this->tickets, $this->events, $systems, $kpis, $agents); } public function testCurrentFingerprintCoversAllFiveResources(): void { $fingerprint = $this->changeFeed->currentFingerprint(); self::assertSame(['tickets', 'events', 'systems', 'kpis', 'agents'], array_keys($fingerprint)); } public function testDiffIsEmptyWithoutChanges(): void { $fingerprint = $this->changeFeed->currentFingerprint(); self::assertSame([], $this->changeFeed->diff($fingerprint, $fingerprint)); } public function testDiffReportsOnlyTheChangedResource(): void { $before = $this->changeFeed->currentFingerprint(); $this->tickets->create(['title' => 'Neu']); $after = $this->changeFeed->currentFingerprint(); self::assertSame(['tickets'], $this->changeFeed->diff($before, $after)); } public function testDiffReportsMultipleChangedResources(): void { $before = $this->changeFeed->currentFingerprint(); $this->tickets->create(['title' => 'Neu']); $this->events->create(['name' => 'Ping', 'message' => 'down', 'severity' => 'error']); $after = $this->changeFeed->currentFingerprint(); $changed = $this->changeFeed->diff($before, $after); sort($changed); self::assertSame(['events', 'tickets'], $changed); } }