repository = new AgentRepository(Database::inMemory(), deskCount: 2); } public function testRegisterAssignsLowestFreeDesk(): void { $first = $this->repository->register('Alice', 'entwickler'); $second = $this->repository->register('Bob', 'qa'); self::assertSame(0, $first['agent']['desk_index']); self::assertSame(1, $second['agent']['desk_index']); self::assertNotSame($first['api_key'], $second['api_key']); self::assertArrayNotHasKey('api_key_hash', $first['agent']); } public function testUserRoleNeverGetsADesk(): void { $result = $this->repository->register('Carol', 'user'); self::assertNull($result['agent']['desk_index']); } public function testOverflowAgentGetsNoDeskWhenAllOccupied(): void { $this->repository->register('Alice', 'entwickler'); $this->repository->register('Bob', 'qa'); $third = $this->repository->register('Dan', 'product_owner'); self::assertNull($third['agent']['desk_index']); } public function testRegisterRejectsUnknownRole(): void { $this->expectException(InvalidArgumentException::class); $this->repository->register('Eve', 'ceo'); } public function testFindByApiKeyReturnsMatchingAgent(): void { $result = $this->repository->register('Alice', 'entwickler'); $found = $this->repository->findByApiKey($result['api_key']); self::assertNotNull($found); self::assertSame($result['agent']['id'], $found['id']); } public function testFindByApiKeyReturnsNullForUnknownKey(): void { self::assertNull($this->repository->findByApiKey('does-not-exist')); } public function testUpdateActivityChangesStateAndTicket(): void { $result = $this->repository->register('Alice', 'entwickler'); $id = (int) $result['agent']['id']; $updated = $this->repository->updateActivity($id, 'working', 42); self::assertSame('working', $updated['state']); self::assertSame(42, $updated['current_ticket_id']); } public function testUpdateActivityThrowsForUnknownAgent(): void { $this->expectException(NotFoundException::class); $this->repository->updateActivity(999, 'working', null); } public function testAllListsAgentsWithoutApiKeyHash(): void { $this->repository->register('Alice', 'entwickler'); $this->repository->register('Bob', 'qa'); $all = $this->repository->all(); self::assertCount(2, $all); foreach ($all as $agent) { self::assertArrayNotHasKey('api_key_hash', $agent); } } }