diff --git a/src/Controller/Mail/MailSyncTriggerController.php b/src/Controller/Mail/MailSyncTriggerController.php new file mode 100644 index 0000000..165293b --- /dev/null +++ b/src/Controller/Mail/MailSyncTriggerController.php @@ -0,0 +1,40 @@ +accessChecker->ensureCanAccessMail($this->getUser()); + + $body = json_decode($request->getContent(), true) ?? []; + $folderPath = $body['folderPath'] ?? null; + + $this->bus->dispatch(new MailSyncRequested($folderPath)); + + return $this->json( + ['message' => 'Synchronisation démarrée en arrière-plan'], + Response::HTTP_ACCEPTED + ); + } +} diff --git a/tests/Functional/Controller/Mail/MailSyncTriggerControllerTest.php b/tests/Functional/Controller/Mail/MailSyncTriggerControllerTest.php new file mode 100644 index 0000000..54dbbc1 --- /dev/null +++ b/tests/Functional/Controller/Mail/MailSyncTriggerControllerTest.php @@ -0,0 +1,50 @@ +request('POST', '/api/mail/sync'); + + self::assertResponseStatusCodeSame(401); + } + + public function testSyncTriggerReturns403ForRoleClient(): void + { + $client = static::createClient(); + $container = static::getContainer(); + $em = $container->get('doctrine.orm.entity_manager'); + + $clientUser = $em->getRepository(User::class)->findOneBy(['username' => 'client-liot']); + $client->loginUser($clientUser); + $client->request('POST', '/api/mail/sync'); + + self::assertResponseStatusCodeSame(403); + } + + public function testSyncTriggerReturns202ForRoleUser(): void + { + $client = static::createClient(); + $container = static::getContainer(); + $em = $container->get('doctrine.orm.entity_manager'); + + $user = $em->getRepository(User::class)->findOneBy(['username' => 'alice']); + $client->loginUser($user); + $client->request('POST', '/api/mail/sync'); + + self::assertResponseStatusCodeSame(202); + $data = json_decode($client->getResponse()->getContent(), true); + self::assertArrayHasKey('message', $data); + } +}