Skip to content

Commit

Permalink
[Admin] Undefined labels fixed in Taxon scope in CP
Browse files Browse the repository at this point in the history
[Admin] Undefined labels fixed in Taxon scope in CP

removed choice name

set fallback locale to first translation

admin taxon ajax test
  • Loading branch information
ernestWarwas committed Mar 9, 2022
1 parent 0219e0d commit 658fd30
Show file tree
Hide file tree
Showing 5 changed files with 375 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
'label' => 'sylius.ui.taxons',
'multiple' => true,
'required' => false,
'choice_name' => 'name',
'choice_value' => 'code',
'resource' => 'sylius.taxon',
'constraints' => [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,20 @@ public function findRootNodes(): array

public function findByNamePart(string $phrase, ?string $locale = null, ?int $limit = null): array
{
return $this->createTranslationBasedQueryBuilder($locale)
/** @var TaxonInterface[] $results */
$results = $this->createTranslationBasedQueryBuilder($locale)
->andWhere('translation.name LIKE :name')
->setParameter('name', '%' . $phrase . '%')
->setMaxResults($limit)
->getQuery()
->getResult()
;

foreach ($results as $result) {
$result->setFallbackLocale(array_key_first($result->getTranslations()->toArray()));
}

return $results;
}

public function createListQueryBuilder(): QueryBuilder
Expand Down
101 changes: 101 additions & 0 deletions tests/Controller/AdminTaxonAjaxTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
<?php

/*
* This file is part of the Sylius package.
*
* (c) Paweł Jędrzejewski
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

declare(strict_types=1);

namespace Sylius\Tests\Controller;

use ApiTestCase\JsonApiTestCase;
use Symfony\Component\BrowserKit\Cookie;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;

final class AdminTaxonAjaxTest extends JsonApiTestCase
{
/** @test */
public function it_denies_access_to_taxons_for_not_authenticated_user(): void
{
$this->client->request('GET', '/admin/ajax/taxons/search');

$response = $this->client->getResponse();

$this->assertEquals($response->getStatusCode(), Response::HTTP_FOUND);
}

/** @test */
public function it_returns_taxons_for_empty_phrase(): void
{
$this->loadFixturesFromFile('authentication/administrator.yml');
$this->loadFixturesFromFiles(['resources/taxons.yml']);

$this->authenticateAdminUser();

$this->client->request('GET', '/admin/ajax/taxons/search?phrase=');

$response = $this->client->getResponse();

$this->assertResponse($response, 'ajax/taxon/index_response', Response::HTTP_OK);
}

/** @test */
public function it_throws_type_error_when_phrase_is_not_specified(): void
{
$this->loadFixturesFromFile('authentication/administrator.yml');
$this->loadFixturesFromFiles(['resources/taxons.yml']);

$this->authenticateAdminUser();

$this->expectException(\TypeError::class);

$this->client->request('GET', '/admin/ajax/taxons/search');
}

/** @test */
public function it_returns_specific_taxons_for_given_phrase(): void
{
$this->loadFixturesFromFile('authentication/administrator.yml');
$this->loadFixturesFromFiles(['resources/taxons.yml']);

$this->authenticateAdminUser();

$this->client->request('GET', '/admin/ajax/taxons/search?phrase=men');

$response = $this->client->getResponse();

$taxons = json_decode($response->getContent());

$this->assertEquals('Men T-Shirts', $taxons[0]->name);
$this->assertEquals('Women T-Shirts', $taxons[1]->name);
}

private function authenticateAdminUser(): void
{
$adminUserRepository = self::$container->get('sylius.repository.admin_user');
$user = $adminUserRepository->findOneByEmail('[email protected]');

$session = self::$container->get('session');
$firewallName = 'admin';
$firewallContext = 'admin';

/** @deprecated parameter credential was deprecated in Symfony 5.4, so in Sylius 1.11 too, in Sylius 2.0 providing 4 arguments will be prohibited. */
if (3 === (new \ReflectionClass(UsernamePasswordToken::class))->getConstructor()->getNumberOfParameters()) {
$token = new UsernamePasswordToken($user, $firewallName, $user->getRoles());
} else {
$token = new UsernamePasswordToken($user, null, $firewallName, $user->getRoles());
}

$session->set(sprintf('_security_%s', $firewallContext), serialize($token));
$session->save();

$cookie = new Cookie($session->getName(), $session->getId());
$this->client->getCookieJar()->set($cookie);
}
}
80 changes: 80 additions & 0 deletions tests/DataFixtures/ORM/resources/taxons.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,83 @@ Sylius\Component\Core\Model\Taxon:
women:
code: "women"
parent: "@t-shirts"

Sylius\Component\Taxonomy\Model\TaxonTranslation:
en_us_category_translation:
slug: "categories"
locale: "en_US"
name: "Categories"
description: "Some description Lorem ipsum dolor sit amet."
translatable: "@category"
en_us_mug_taxon_translation:
slug: "categories/mugs"
locale: "en_US"
name: "Mugs"
description: "Some description Lorem ipsum dolor sit amet."
translatable: "@mugs"
en_us_sticker_translation:
slug: "categories/stickers"
locale: "en_US"
name: "Stickers"
description: "Some description Lorem ipsum dolor sit amet."
translatable: "@stickers"
en_us_book_taxon_translation:
slug: "categories/books"
locale: "en_US"
name: "Books"
description: "Some description Lorem ipsum dolor sit amet."
translatable: "@books"
en_us_t_shirt_translation:
slug: "categories/t-shirts"
locale: "en_US"
name: "T-Shirts"
description: "Some description Lorem ipsum dolor sit amet."
translatable: "@t-shirts"
en_us_men_t_shirt_translation:
slug: "categories/t-shirts/men-t-shirts"
locale: "en_US"
name: "Men T-Shirts"
description: "Some description Lorem ipsum dolor sit amet."
translatable: "@men"
en_us_women_t_shirt_translation:
slug: "categories/t-shirts/women-t-shirts"
locale: "en_US"
name: "Women T-Shirts"
description: "Some description Lorem ipsum dolor sit amet."
translatable: "@women"
de_de_mug_taxon_translation:
slug: "tassen"
locale: "de_DE"
name: "Tassen"
description: "Einige Beschreibung Lorem ipsum dolor sit amet."
translatable: "@mugs"
de_de_aufkleber_translation:
slug: "aufkleber"
locale: "de_DE"
name: "Aufkleber"
translatable: "@stickers"
de_de_buchen_taxon_translation:
slug: "buchen"
locale: "de_DE"
name: "Buchen"
description: "Einige Beschreibung Lorem ipsum dolor sit amet."
translatable: "@books"
de_de_t_shirt_taxon_translation:
slug: "t-shirts"
locale: "de_DE"
name: "T-Shirts"
description: "Einige Beschreibung Lorem ipsum dolor sit amet."
translatable: "@t-shirts"
de_de_men_t_shirt_translation:
slug: "männer-t-shirts"
locale: "de_DE"
name: "Männer T-Shirts"
description: "Einige Beschreibung Lorem ipsum dolor sit amet."
translatable: "@men"
de_de_women_t_shirt_translation:
slug: "frauen-t-shirts"
locale: "de_DE"
name: "Frauen T-Shirts"
description: "Einige Beschreibung Lorem ipsum dolor sit amet."
translatable: "@women"

Loading

0 comments on commit 658fd30

Please sign in to comment.