175 lines
6 KiB
PHP
175 lines
6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Tests\Functional\Controller\User;
|
|
|
|
use App\Test\KernelTrait;
|
|
use Hautelook\AliceBundle\PhpUnit\RefreshDatabaseTrait;
|
|
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
|
use Symfony\Component\DomCrawler\Field\ChoiceFormField;
|
|
|
|
/**
|
|
* @see AddressController
|
|
*/
|
|
final class AddressControllerTest extends WebTestCase
|
|
{
|
|
use KernelTrait;
|
|
use RefreshDatabaseTrait;
|
|
|
|
private const ROUTE = '/fr/mon-compte/mon-adresse/etape-';
|
|
private const ROUTE_STEP1 = self::ROUTE.'1';
|
|
private const ROUTE_STEP2 = self::ROUTE.'2';
|
|
|
|
private const STEP1_TEXT = 'address.step1_action.title';
|
|
private const STEP2_TEXT = 'address.step2_action.confirm_title';
|
|
private const STEP2_FLASH = 'address.step2_action.form.success';
|
|
private const STEP2_ERROR = 'app.form.type.user.address_step2_form_type.addresses.not_null';
|
|
|
|
private const STEP1_FORM_ID = 'address_step1_form';
|
|
private const STEP2_FORM_ID = 'address_step2_form';
|
|
|
|
/**
|
|
* We try to validate the step 2 without selecting an address. Non regression
|
|
* test for #554 in historic repo.
|
|
*/
|
|
public function testStepsFormNoAddressValidationError(): 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);
|
|
|
|
// 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);
|
|
}
|
|
}
|