repository = new AgentRepository($db); $this->tickets = new TicketRepository($db); $this->controller = new AgentController($this->repository); } public function testRegisterRejectsMissingDisplayName(): void { $response = $this->controller->register(Request::create('POST', '/api/v1/agents', body: ['role' => 'entwickler'])); self::assertSame(422, $response->status); } public function testRegisterRejectsUnknownRole(): void { $response = $this->controller->register(Request::create('POST', '/api/v1/agents', body: [ 'display_name' => 'Alice', 'role' => 'ceo', ])); self::assertSame(422, $response->status); } public function testRegisterReturns201WithApiKey(): void { $response = $this->controller->register(Request::create('POST', '/api/v1/agents', body: [ 'display_name' => 'Alice', 'role' => 'entwickler', ])); self::assertSame(201, $response->status); self::assertArrayHasKey('api_key', $response->body()); self::assertArrayNotHasKey('api_key_hash', $response->body()['agent']); } public function testActivityRejectsMismatchedAgentId(): void { $registration = $this->repository->register('Alice', 'entwickler'); $other = $this->repository->register('Bob', 'qa'); $response = $this->controller->activity( Request::create('POST', '/x', body: ['state' => 'working']), ['id' => (string) $other['agent']['id']], $registration['agent'] ); self::assertSame(403, $response->status); } public function testActivityRejectsMissingState(): void { $registration = $this->repository->register('Alice', 'entwickler'); $response = $this->controller->activity( Request::create('POST', '/x', body: []), ['id' => (string) $registration['agent']['id']], $registration['agent'] ); self::assertSame(422, $response->status); } public function testActivityUpdatesOwnState(): void { $registration = $this->repository->register('Alice', 'entwickler'); $ticketId = (int) $this->tickets->create(['title' => 'Testticket'])['id']; $response = $this->controller->activity( Request::create('POST', '/x', body: ['state' => 'working', 'current_ticket' => $ticketId]), ['id' => (string) $registration['agent']['id']], $registration['agent'] ); self::assertSame(200, $response->status); self::assertSame('working', $response->body()['agent']['state']); self::assertSame($ticketId, $response->body()['agent']['current_ticket_id']); } public function testIndexListsAgents(): void { $this->repository->register('Alice', 'entwickler'); $response = $this->controller->index(Request::create('GET', '/api/v1/agents')); self::assertCount(1, $response->body()['agents']); } }