*/ public function provideFormSubmitValidationError(): iterable { // empty data yield ['', TestReference::VALIDATION_ERROR_BLANK]; // Test that even with a different case, the validation returns an error // and doesn't throw a 500 error because of Doctrine constraints. yield [strtoupper(TestReference::USER_EMAIL), TestReference::VALIDATION_ERROR_ALREADY_USED]; } /** * @@dataProvider provideFormSubmitValidationError */ public function testFormSubmitValidationError(string $email, string $error): void { $client = self::createClient(); $crawler = $client->request('GET', self::ROUTE_EN); self::assertResponseIsSuccessful(); $form = $crawler->selectButton('account_create_step1_form_submit')->form(); $client->submit($form, [ $form->getName().'[email]' => $email, ]); self::assertResponseIsUnprocessable(); self::assertSelectorTextContains('body', $error); } /** * @return iterable */ public function provideFormShowSuccess(): iterable { yield ['fr', self::ROUTE_FR]; yield ['en', self::ROUTE_EN]; } /** * Nominal case. * * @dataProvider provideFormShowSuccess */ public function testFormSubmitSuccess(string $locale, string $route): void { $client = self::createClient(); $crawler = $client->request('GET', $route); self::assertResponseIsSuccessful(); $form = $crawler->selectButton('account_create_step1_form_submit')->form(); $client->submit($form, [ $form->getName().'[email]' => $locale.self::NEW_USER_EMAIL, ]); // user was created $container = $client->getContainer(); /** @var UserRepository $userRepo */ $userRepo = $container->get(UserRepository::class); $user = $userRepo->findOneByEmail($locale.self::NEW_USER_EMAIL); self::assertInstanceOf(User::class, $user); self::assertNotEmpty($user->getConfirmationToken()); self::assertNotEmpty($user->getConfirmationExpiresAt()); // an email was sent with the confirmation link self::assertEmailCount(1); $emailMessage = self::getMailerMessage(); self::assertInstanceOf(RawMessage::class, $emailMessage); self::assertEmailHtmlBodyContains($emailMessage, $user->getConfirmationToken()); // then continue and redirect self::assertResponseRedirects(); $client->followRedirect(); self::assertResponseIsSuccessful(); } }