Skip to content

Commit

Permalink
Finish and clean up test.
Browse files Browse the repository at this point in the history
  • Loading branch information
MichaelBrauner committed Apr 23, 2022
1 parent d95d529 commit 35fe781
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 97 deletions.
129 changes: 50 additions & 79 deletions tests/Functional/TranslatedFormsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,105 +6,77 @@
use Braunstetter\TranslatedForms\Tests\Fixtures\Entity\TranslatableEntity;
use Braunstetter\TranslatedForms\Tests\Functional\app\src\Form\TranslatedEntryForm;
use Braunstetter\TranslatedForms\Tests\Functional\app\src\FormProvider;
use Doctrine\Persistence\ObjectRepository;
use Braunstetter\TranslatedForms\Tests\Functional\app\src\Service\FixtureProvider;
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
use Symfony\Component\Form\Exception\UnexpectedTypeException;
use Symfony\Component\Form\FormFactory;
use Symfony\Component\Form\Util\InheritDataAwareIterator;
use Symfony\Component\HttpKernel\HttpKernelBrowser;
use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException;
use Symfony\Component\VarDumper\VarDumper;

class TranslatedFormsTest extends AbstractTestCase
{

/**
* @var ObjectRepository<TranslatableEntity>
*/
private ObjectRepository $repository;
private TranslatableEntity $translatedEntity;
private mixed $formFactory;
private KernelBrowser $client;

protected function setUp(): void
{
parent::setUp();

$this->repository = $this->entityManager->getRepository(TranslatableEntity::class);
$this->translatedEntity = FixtureProvider::get();
$this->formFactory = $this->getService(FormProvider::class);
$this->client = new KernelBrowser($this->kernel);
}

public function test_form_errors_when_not_translated(): void
public function test_form_errors_on_init_when_not_translated(): void
{
$translatableEntity = new TranslatableEntity();
$translatableEntity->setUntranslatedString('this is untranslated');
$translatableEntity->translate('fr')
->setTitle('fabuleux');
$translatableEntity->translate('en')
->setTitle('awesome');
$translatableEntity->translate('ru')
->setTitle('удивительный');
$translatableEntity->mergeNewTranslations();

$factory = $this->getService(FormProvider::class);

$this->expectException(NoSuchPropertyException::class);
$factory->get()->create(TranslatedEntryForm::class, $translatableEntity, ['translated' => false]);
$this->formFactory->get()->create(TranslatedEntryForm::class, $this->translatedEntity, ['translated' => false]);
}

public function test_form_errors_disappears_when_translated(): void
public function test_form_errors_on_init_disappears_when_translated(): void
{
$translatableEntity = new TranslatableEntity();
$translatableEntity->setUntranslatedString('this is untranslated');
$translatableEntity->translate('fr')
->setTitle('fabuleux');
$translatableEntity->translate('en')
->setTitle('awesome');
$translatableEntity->translate('ru')
->setTitle('удивительный');
$translatableEntity->mergeNewTranslations();

$factory = $this->getService(FormProvider::class);
$factory->get()->create(TranslatedEntryForm::class, $translatableEntity);

$this->formFactory->get()->create(TranslatedEntryForm::class, $this->translatedEntity);
$this->assertTrue(true);
}

public function test_new()
/**
* @dataProvider provideFormContent
*/
public function test_request_contains_correct_values($content)
{
$client = new KernelBrowser($this->kernel);
$client->request('GET', '/test');

$contentArray = [
'translated_entry_form' => [
"submit" => "",
"untranslatedString" => "this is changed",
"title" => "awesome nice",
]
];

$client->submitForm('Submit', $contentArray);
$this->client->request('GET', '/test');
$this->client->submitForm('Submit', $content);
$this->assertSame($content, $this->client->getRequest()->request->all());
}

$data = json_decode($client->getResponse()->getContent());
/**
* @dataProvider provideFormContent
*/
public function test_changes_made_to_form_gets_mapped_correctly($content)
{
$this->client->request('GET', '/test');
$this->client->submitForm('Submit', $content);
$data = json_decode($this->client->getResponse()->getContent());

$this->assertSame(200, $client->getResponse()->getStatusCode());
$this->assertSame($contentArray, $client->getRequest()->request->all());
$this->assertSame('this is changed', $data->untranslatedString);
$this->assertSame('awesome nice', $data->title);
}

/**
* @dataProvider provideFormContent
*/
public function test_form_submission_works($content)
{
$this->client->request('GET', '/test');
$this->client->submitForm('Submit', $content);

$this->assertSame(200, $this->client->getResponse()->getStatusCode());
}

public function test_mapper_returns_null_if_view_data_is_empty()
{
$translatableEntity = new TranslatableEntity();
$translatableEntity->setUntranslatedString('this is untranslated');
$translatableEntity->translate('fr')
->setTitle('fabuleux');
$translatableEntity->translate('en')
->setTitle('awesome');
$translatableEntity->translate('ru')
->setTitle('удивительный');
$translatableEntity->mergeNewTranslations();

$factory = $this->getService(FormProvider::class);
$form = $factory->get()->create(TranslatedEntryForm::class, $translatableEntity);

$form = $this->formFactory->get()->create(TranslatedEntryForm::class, $this->translatedEntity);
$viewData = null;

$this->assertSame($form->getConfig()->getDataMapper()->mapFormsToData(
Expand All @@ -117,24 +89,23 @@ public function test_mapper_returns_null_if_view_data_is_empty()

public function test_mapper_returns_exception_if_view_data_is_string()
{
$translatableEntity = new TranslatableEntity();
$translatableEntity->setUntranslatedString('this is untranslated');
$translatableEntity->translate('fr')
->setTitle('fabuleux');
$translatableEntity->translate('en')
->setTitle('awesome');
$translatableEntity->translate('ru')
->setTitle('удивительный');
$translatableEntity->mergeNewTranslations();

$factory = $this->getService(FormProvider::class);
$form = $factory->get()->create(TranslatedEntryForm::class, $translatableEntity);
$form = $this->formFactory->get()->create(TranslatedEntryForm::class, $this->translatedEntity);
$viewData = '';

$this->expectException(UnexpectedTypeException::class);
$viewData = '';

$form->getConfig()->getDataMapper()->mapFormsToData(
new \RecursiveIteratorIterator(new InheritDataAwareIterator(new \ArrayIterator($form->all()))),
$viewData
);
}

public function provideFormContent(): array
{
return [
[
['translated_entry_form' => ["submit" => "", "untranslatedString" => "this is changed", "title" => "awesome nice",]]
]
];
}
}
3 changes: 0 additions & 3 deletions tests/Functional/app/Resources/config/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,6 @@ services:
Braunstetter\TranslatedForms\Tests\Functional\DatabaseLoader: null
Braunstetter\TranslatedForms\Tests\Functional\app\src\FormProvider: null

Knp\DoctrineBehaviors\Tests\Provider\TestUserProvider:
alias: Knp\DoctrineBehaviors\Contract\Provider\UserProviderInterface

Braunstetter\TranslatedForms\Tests\Functional\app\src\Controller\TestController:
tags: [controller.service_arguments, controller.service_subscriber]
public: true
Expand Down
20 changes: 5 additions & 15 deletions tests/Functional/app/src/Controller/TestController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,21 @@

namespace Braunstetter\TranslatedForms\Tests\Functional\app\src\Controller;

use Braunstetter\TranslatedForms\Tests\Fixtures\Entity\TranslatableEntity;
use Braunstetter\TranslatedForms\Tests\Functional\app\src\Form\TranslatedEntryForm;
use Doctrine\ORM\EntityManagerInterface;
use Braunstetter\TranslatedForms\Tests\Functional\app\src\Service\FixtureProvider;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\VarDumper\VarDumper;

class TestController extends AbstractController
{

#[Route('/test', name: 'test')]
public function test(Request $request)
public function test(Request $request): JsonResponse|Response
{
$translatableEntity = new TranslatableEntity();
$translatableEntity->setUntranslatedString('this is untranslated');
$translatableEntity->translate('fr')
->setTitle('fabuleux');
$translatableEntity->translate('en')
->setTitle('awesome');
$translatableEntity->translate('ru')
->setTitle('удивительный');
$translatableEntity->mergeNewTranslations();
$translatableEntity = FixtureProvider::get();

$form = $this->createForm(TranslatedEntryForm::class, $translatableEntity);
$form->handleRequest($request);
Expand All @@ -37,7 +27,7 @@ public function test(Request $request)
'untranslatedString' => $translatableEntity->getUntranslatedString()
]);
}
// VarDumper::dump($request);

return $this->renderForm('test.html.twig', ['form' => $form]);
}
}
22 changes: 22 additions & 0 deletions tests/Functional/app/src/Service/FixtureProvider.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace Braunstetter\TranslatedForms\Tests\Functional\app\src\Service;

use Braunstetter\TranslatedForms\Tests\Fixtures\Entity\TranslatableEntity;

class FixtureProvider
{
public static function get(): TranslatableEntity
{
$translatableEntity = new TranslatableEntity();
$translatableEntity->setUntranslatedString('this is untranslated');
$translatableEntity->translate('fr')
->setTitle('fabuleux');
$translatableEntity->translate('en')
->setTitle('awesome');
$translatableEntity->translate('ru')
->setTitle('удивительный');
$translatableEntity->mergeNewTranslations();
return $translatableEntity;
}
}

0 comments on commit 35fe781

Please sign in to comment.