tests: add IndexController tests

This commit is contained in:
Ondrej Vlach 2024-01-17 17:10:43 +01:00
parent 3cb6f7488f
commit 3182dd93cf
Signed by: ovlach
GPG Key ID: 4FF1A23B4914DE70
2 changed files with 104 additions and 0 deletions

12
config/services_test.yaml Normal file
View File

@ -0,0 +1,12 @@
services:
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
public: true
App\Service\QRCodeGeneratorInterface:
lazy: true
public: true
# add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones

View File

@ -0,0 +1,92 @@
<?php
declare(strict_types=1);
namespace App\Tests\Controller;
use App\Service\QRCodeGeneratorInterface;
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class IndexControllerTest extends WebTestCase
{
public function testFormIsPresentAfterLoadHomepage(): void
{
$client = static::createClient();
$client->request('GET', '/');
$this->assertResponseIsSuccessful();
$this->assertSelectorExists('form');
}
public function testImageIsPresentAfterSubmitForm(): void {
$client = $this->generateClientForSubmitTest();
$response = $client->request('GET', '/');
$this->assertResponseIsSuccessful();
$form = $response->selectButton('Vygenerovat QR kód')->form();
$dt = new \DateTime('now+1 hour'); // In case of 23:59:59
$client->submit($form, [
'qr_code' => [
'iban' => 'CZ5508000000001234567899',
'dueDate' => $dt->format('Y-m-d'),
'message' => 'foo',
'money' => [
'currency' => 'CZK',
'amount' => '100'
],
'paymentIdentification' => [
'variableSymbol' => '123',
'constantSymbol' => '123',
'specificSymbol' => '123'
]
]
]);
$this->assertResponseIsSuccessful();
$this->assertSelectorExists('form');
$this->assertSelectorExists('img');
}
public function testImageIsNotPresentAfterFailSubmitForm(): void {
$client = $this->generateClientForSubmitTest();
$response = $client->request('GET', '/');
$this->assertResponseIsSuccessful();
$form = $response->selectButton('Vygenerovat QR kód')->form();
$dt = new \DateTime('now+1 hour'); // In case of 23:59:59
$client->submit($form, [
'qr_code' => [
'iban' => 'IBAN_THAT_NOT_EXISTS',
'dueDate' => $dt->format('Y-m-d'),
'message' => 'foo',
'money' => [
'currency' => 'CZK',
'amount' => '100'
],
'paymentIdentification' => [
'variableSymbol' => '123',
'constantSymbol' => '123',
'specificSymbol' => '123'
]
]
]);
$this->assertResponseIsUnprocessable();
$this->assertSelectorExists('form');
$this->assertSelectorNotExists('img');
}
private function generateClientForSubmitTest(): KernelBrowser
{
$mock = $this->createMock(QRCodeGeneratorInterface::class);
$mock->expects($this->any())
->method('generateQRCodeFromEntity')
->will($this->returnValue('foo'));
$client = static::createClient();
$client->disableReboot();
self::getContainer()->set('App\Service\QRCodeGeneratorInterface', $mock);
return $client;
}
}