loginAsUser($client); $crawler = $client->request('GET', self::ROUTE_STEP1); self::assertResponseIsSuccessful(); $form = $crawler->selectButton(self::STEP1_FORM_ID.'_submit')->form(); $client->submit($form); self::assertResponseRedirects(); $crawler = $client->followRedirect(); self::assertResponseIsSuccessful(); self::assertSelectorTextContains('body', self::STEP2_TEXT); // Submit step 2 without selecting an address $form = $crawler->selectButton(self::STEP2_FORM_ID.'_submit')->form(); $client->submit($form); self::assertResponseIsUnprocessable(); self::assertSelectorTextContains('body', self::STEP2_ERROR); } /** * User who already have an associated address. */ public function testStepsFormSuccess(): void { $client = self::createClient(); $this->loginAsUser($client); $crawler = $client->request('GET', self::ROUTE_STEP1); self::assertResponseIsSuccessful(); $form = $crawler->selectButton(self::STEP1_FORM_ID.'_submit')->form(); $client->submit($form); self::assertResponseRedirects(); $crawler = $client->followRedirect(); self::assertResponseIsSuccessful(); self::assertSelectorTextContains('body', self::STEP2_TEXT); // step 2, select first address $form = $crawler->selectButton(self::STEP2_FORM_ID.'_submit')->form(); /** @var ChoiceFormField $field */ $field = $form[$form->getName().'[addresses]']; $field->select('0'); // first choice $client->submit($form); $client->followRedirect(); self::assertResponseIsSuccessful(); self::assertSelectorTextContains('body', self::STEP2_FLASH); } /** * User without address yet. */ public function testStep1FormNoAddressSuccess(): void { $client = self::createClient(); $this->loginAsUser16($client); $crawler = $client->request('GET', self::ROUTE_STEP1); self::assertResponseIsSuccessful(); $form = $crawler->selectButton(self::STEP1_FORM_ID.'_submit')->form(); $client->submit($form, [ $form->getName().'[address]' => '82 rue Winston Churchill', $form->getName().'[addressSupplement]' => '3ème étage', $form->getName().'[postalCode]' => '59160', $form->getName().'[locality]' => 'Lille', ]); self::assertResponseRedirects(); $crawler = $client->followRedirect(); self::assertResponseIsSuccessful(); self::assertSelectorTextContains('body', self::STEP2_TEXT); // step 2, select first address $form = $crawler->selectButton(self::STEP2_FORM_ID.'_submit')->form(); /** @var ChoiceFormField $field */ $field = $form[$form->getName().'[addresses]']; $field->select('0'); // first choice $client->submit($form); $client->followRedirect(); self::assertResponseIsSuccessful(); self::assertSelectorTextContains('body', self::STEP2_FLASH); } /** * No address is found with the user input. We stay on the step1 page. */ public function testStep1FormFailure(): void { $client = self::createClient(); $this->loginAsUser($client); $crawler = $client->request('GET', self::ROUTE_STEP1); self::assertResponseIsSuccessful(); $form = $crawler->selectButton(self::STEP1_FORM_ID.'_submit')->form(); $client->submit($form, [ $form->getName().'[address]' => 'ez', $form->getName().'[addressSupplement]' => '000', $form->getName().'[postalCode]' => '000', $form->getName().'[locality]' => '000', ]); self::assertResponseIsSuccessful(); self::assertSelectorTextContains('body', 'address.step1_action.no_address.warning'); } /** * Step1 form submitted without entering data. */ public function testStep1FormNothingFilledFailure(): void { $client = self::createClient(); $this->loginAsUser16($client); $crawler = $client->request('GET', self::ROUTE_STEP1); self::assertResponseIsSuccessful(); $form = $crawler->selectButton(self::STEP1_FORM_ID.'_submit')->form(); $client->submit($form); self::assertResponseIsUnprocessable(); self::assertSelectorTextContains('body', 'This value should not be blank'); } /** * Step2 direct access is forbidden. */ public function testStep2DirectAccessFailure(): void { $client = self::createClient(); $this->loginAsUser($client); $client->request('GET', self::ROUTE_STEP2); $client->followRedirect(); self::assertResponseIsSuccessful(); self::assertSelectorTextContains('body', self::STEP1_TEXT); } }