get(EntityManagerInterface::class)->getConnection(); $conn->executeStatement("DELETE FROM time_entry_task_type WHERE time_entry_id IN (SELECT id FROM time_entry WHERE title = 'iface-denorm-te')"); $conn->executeStatement("DELETE FROM time_entry WHERE title = 'iface-denorm-te'"); $conn->executeStatement("DELETE FROM task_collaborator WHERE task_id IN (SELECT id FROM task WHERE title = 'iface-denorm-task')"); $conn->executeStatement("DELETE FROM task WHERE title = 'iface-denorm-task'"); parent::tearDown(); } public function testPostTimeEntryWithInterfaceTypedTags(): void { $client = self::createClient(); $em = self::getContainer()->get(EntityManagerInterface::class); $this->loginAdmin($client); $userId = $this->adminId($em); $tagId = $this->aTaskTagId($em); $client->request('POST', '/api/time_entries', server: [ 'CONTENT_TYPE' => 'application/json', 'HTTP_ACCEPT' => 'application/json', ], content: json_encode([ 'title' => 'iface-denorm-te', 'startedAt' => '2026-06-22T10:00:00+02:00', 'stoppedAt' => '2026-06-22T11:00:00+02:00', 'user' => '/api/users/'.$userId, 'tags' => ['/api/task_tags/'.$tagId], ])); self::assertResponseStatusCodeSame(201, $client->getResponse()->getContent() ?: ''); $data = json_decode($client->getResponse()->getContent(), true); self::assertCount(1, $data['tags'] ?? []); } public function testPostTaskWithInterfaceTypedCollaborators(): void { $client = self::createClient(); $em = self::getContainer()->get(EntityManagerInterface::class); $this->loginAdmin($client); $userId = $this->adminId($em); $projectId = $this->aProjectId($em); $client->request('POST', '/api/tasks', server: [ 'CONTENT_TYPE' => 'application/json', 'HTTP_ACCEPT' => 'application/json', ], content: json_encode([ 'title' => 'iface-denorm-task', 'project' => '/api/projects/'.$projectId, 'collaborators' => ['/api/users/'.$userId], ])); self::assertResponseStatusCodeSame(201, $client->getResponse()->getContent() ?: ''); $data = json_decode($client->getResponse()->getContent(), true); self::assertCount(1, $data['collaborators'] ?? []); } private function loginAdmin(KernelBrowser $client): void { $em = self::getContainer()->get(EntityManagerInterface::class); $user = $em->getRepository(User::class)->findOneBy(['username' => 'admin']); self::assertInstanceOf(User::class, $user); $client->loginUser($user); } private function adminId(EntityManagerInterface $em): int { $user = $em->getRepository(User::class)->findOneBy(['username' => 'admin']); self::assertInstanceOf(User::class, $user); return $user->getId(); } private function aTaskTagId(EntityManagerInterface $em): int { $tag = $em->getRepository(TaskTag::class)->findOneBy([]); if (null === $tag) { $tag = new TaskTag(); $tag->setLabel('iface-denorm-tag'); $em->persist($tag); $em->flush(); } return $tag->getId(); } private function aProjectId(EntityManagerInterface $em): int { $project = $em->getRepository(Project::class)->findOneBy([]); self::assertInstanceOf(Project::class, $project); return $project->getId(); } }