From 7a772f54ec9ad2862f4146176153486f938d1970 Mon Sep 17 00:00:00 2001 From: Antoine Lamirault Date: Mon, 28 Nov 2022 23:01:00 +0100 Subject: [PATCH] Fix xml encoding (#10) * Fix xml encoding --- src/Exception/ClubNotFoundException.php | 4 +- .../InvalidLienRencontreException.php | 4 +- src/Exception/InvalidRequestException.php | 4 +- src/Exception/InvalidResponseException.php | 4 +- src/Exception/JoueurNotFoundException.php | 4 +- src/Model/Club.php | 6 +- src/Model/Factory/ClubFactory.php | 5 +- src/Model/Factory/RencontreDetailsFactory.php | 2 +- src/Model/Rencontre/Rencontre.php | 10 +- src/Service/FFTTClient.php | 4 +- .../Operation/ListActualiteOperation.php | 5 +- src/Service/Operation/ListClubOperation.php | 3 +- src/Service/Operation/ListPartieOperation.php | 29 ++- .../Operation/ListRencontreOperation.php | 9 +- tests/Unit/Service/FFTTClientTest.php | 40 ++++ tests/Unit/Service/NomPrenomExtractorTest.php | 5 +- .../Service/Operation/ArrayWrapperTest.php | 5 +- .../Operation/ListActualiteOperationTest.php | 7 +- .../Operation/ListEquipeOperationTest.php | 2 +- .../Service/Operation/MockHandlerStub.php | 2 +- tests/Unit/Service/fixtures/actualite.xml | 197 ++++++++++-------- .../Service/fixtures/joueur_with_accent.xml | 2 + 22 files changed, 192 insertions(+), 161 deletions(-) create mode 100644 tests/Unit/Service/FFTTClientTest.php create mode 100644 tests/Unit/Service/fixtures/joueur_with_accent.xml diff --git a/src/Exception/ClubNotFoundException.php b/src/Exception/ClubNotFoundException.php index 702b3ab..a311f46 100644 --- a/src/Exception/ClubNotFoundException.php +++ b/src/Exception/ClubNotFoundException.php @@ -2,9 +2,7 @@ namespace Alamirault\FFTTApi\Exception; -use Exception; - -final class ClubNotFoundException extends Exception +final class ClubNotFoundException extends \Exception { public function __construct(string $clubId) { diff --git a/src/Exception/InvalidLienRencontreException.php b/src/Exception/InvalidLienRencontreException.php index d3cd529..2823fd2 100644 --- a/src/Exception/InvalidLienRencontreException.php +++ b/src/Exception/InvalidLienRencontreException.php @@ -2,9 +2,7 @@ namespace Alamirault\FFTTApi\Exception; -use Exception; - -final class InvalidLienRencontreException extends Exception +final class InvalidLienRencontreException extends \Exception { public function __construct(string $lienRencontre) { diff --git a/src/Exception/InvalidRequestException.php b/src/Exception/InvalidRequestException.php index ee858e5..aebcdb6 100644 --- a/src/Exception/InvalidRequestException.php +++ b/src/Exception/InvalidRequestException.php @@ -2,9 +2,7 @@ namespace Alamirault\FFTTApi\Exception; -use Exception; - -final class InvalidRequestException extends Exception +final class InvalidRequestException extends \Exception { public function __construct(string $uri, int $statusCode, string $content) { diff --git a/src/Exception/InvalidResponseException.php b/src/Exception/InvalidResponseException.php index 858a197..f8170f7 100644 --- a/src/Exception/InvalidResponseException.php +++ b/src/Exception/InvalidResponseException.php @@ -2,9 +2,7 @@ namespace Alamirault\FFTTApi\Exception; -use Exception; - -final class InvalidResponseException extends Exception +final class InvalidResponseException extends \Exception { /** * @param array $content diff --git a/src/Exception/JoueurNotFoundException.php b/src/Exception/JoueurNotFoundException.php index 79be9a5..c37c418 100644 --- a/src/Exception/JoueurNotFoundException.php +++ b/src/Exception/JoueurNotFoundException.php @@ -2,9 +2,7 @@ namespace Alamirault\FFTTApi\Exception; -use Exception; - -final class JoueurNotFoundException extends Exception +final class JoueurNotFoundException extends \Exception { public function __construct(string $clubId) { diff --git a/src/Model/Club.php b/src/Model/Club.php index 542ea40..bc82dd2 100644 --- a/src/Model/Club.php +++ b/src/Model/Club.php @@ -2,14 +2,12 @@ namespace Alamirault\FFTTApi\Model; -use DateTime; - final class Club { public function __construct( private readonly string $numero, private readonly string $nom, - private readonly ?DateTime $dateValidation, + private readonly ?\DateTime $dateValidation, ) {} public function getNumero(): string @@ -22,7 +20,7 @@ public function getNom(): string return $this->nom; } - public function getDateValidation(): ?DateTime + public function getDateValidation(): ?\DateTime { return $this->dateValidation; } diff --git a/src/Model/Factory/ClubFactory.php b/src/Model/Factory/ClubFactory.php index cff040a..ce3b16f 100644 --- a/src/Model/Factory/ClubFactory.php +++ b/src/Model/Factory/ClubFactory.php @@ -3,7 +3,6 @@ namespace Alamirault\FFTTApi\Model\Factory; use Alamirault\FFTTApi\Model\Club; -use DateTime; final class ClubFactory { @@ -16,8 +15,8 @@ public function createFromArray(array $data): array { $result = []; foreach ($data as $clubData) { - /** @var DateTime|null $dateValidation */ - $dateValidation = is_array($clubData['validation']) ? null : DateTime::createFromFormat('!d/m/Y', $clubData['validation']); + /** @var \DateTime|null $dateValidation */ + $dateValidation = is_array($clubData['validation']) ? null : \DateTime::createFromFormat('!d/m/Y', $clubData['validation']); $result[] = new Club( $clubData['numero'], $clubData['nom'], diff --git a/src/Model/Factory/RencontreDetailsFactory.php b/src/Model/Factory/RencontreDetailsFactory.php index 5226bbb..ef08402 100644 --- a/src/Model/Factory/RencontreDetailsFactory.php +++ b/src/Model/Factory/RencontreDetailsFactory.php @@ -170,7 +170,7 @@ private function formatJoueur(string $prenom, string $nom, string $points, array $joueurClub->getNom(), $joueurClub->getPrenom(), $joueurClub->getLicence(), - $playerPoints, + (int) $playerPoints, $sexe ); } diff --git a/src/Model/Rencontre/Rencontre.php b/src/Model/Rencontre/Rencontre.php index 4ccf5fe..49aea9b 100644 --- a/src/Model/Rencontre/Rencontre.php +++ b/src/Model/Rencontre/Rencontre.php @@ -2,8 +2,6 @@ namespace Alamirault\FFTTApi\Model\Rencontre; -use DateTime; - final class Rencontre { public function __construct( @@ -13,8 +11,8 @@ public function __construct( private readonly int $scoreEquipeA, private readonly int $scoreEquipeB, private readonly string $lien, - private readonly DateTime $datePrevue, - private readonly ?DateTime $dateReelle, + private readonly \DateTime $datePrevue, + private readonly ?\DateTime $dateReelle, ) {} public function getLibelle(): string @@ -47,12 +45,12 @@ public function getLien(): string return $this->lien; } - public function getDatePrevue(): DateTime + public function getDatePrevue(): \DateTime { return $this->datePrevue; } - public function getDateReelle(): ?DateTime + public function getDateReelle(): ?\DateTime { return $this->dateReelle; } diff --git a/src/Service/FFTTClient.php b/src/Service/FFTTClient.php index 00eaf56..8c7d286 100644 --- a/src/Service/FFTTClient.php +++ b/src/Service/FFTTClient.php @@ -4,7 +4,6 @@ use Alamirault\FFTTApi\Exception\InvalidRequestException; use Alamirault\FFTTApi\Exception\InvalidResponseException; -use DomainException; use GuzzleHttp\Client; use GuzzleHttp\Exception\ClientException; use Psr\Http\Message\ResponseInterface; @@ -42,7 +41,7 @@ private function send(string $uri): array $response = $this->client->request('GET', $uri); if (200 !== $response->getStatusCode()) { - throw new DomainException(sprintf('Request "%s" returns an error', $uri)); + throw new \DomainException(sprintf('Request "%s" returns an error', $uri)); } $content = $response->getBody()->getContents(); @@ -50,7 +49,6 @@ private function send(string $uri): array // Lot of hacks due to ugly/buggy FFTT Api response format /** @var string $content */ $content = preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $content); - $content = mb_convert_encoding($content, 'ISO-8859-1', 'UTF-8'); $content = html_entity_decode($content); $xml = simplexml_load_string($content, 'SimpleXMLElement', LIBXML_NOCDATA); diff --git a/src/Service/Operation/ListActualiteOperation.php b/src/Service/Operation/ListActualiteOperation.php index d184ad3..7f3fe77 100644 --- a/src/Service/Operation/ListActualiteOperation.php +++ b/src/Service/Operation/ListActualiteOperation.php @@ -4,7 +4,6 @@ use Alamirault\FFTTApi\Model\Actualite; use Alamirault\FFTTApi\Service\FFTTClientInterface; -use DateTime; final class ListActualiteOperation { @@ -25,8 +24,8 @@ public function listActualites(): array $result = []; /** @var array{date: string, titre: string, description: string, url: string, photo: string, categorie: string} $dataActualite */ foreach ($data as $dataActualite) { - /** @var DateTime $date */ - $date = DateTime::createFromFormat('!Y-m-d', $dataActualite['date']); + /** @var \DateTime $date */ + $date = \DateTime::createFromFormat('!Y-m-d', $dataActualite['date']); $result[] = new Actualite( $date, $dataActualite['titre'], diff --git a/src/Service/Operation/ListClubOperation.php b/src/Service/Operation/ListClubOperation.php index 0d5bbda..2ca310a 100644 --- a/src/Service/Operation/ListClubOperation.php +++ b/src/Service/Operation/ListClubOperation.php @@ -5,7 +5,6 @@ use Alamirault\FFTTApi\Model\Club; use Alamirault\FFTTApi\Model\Factory\ClubFactory; use Alamirault\FFTTApi\Service\FFTTClientInterface; -use Exception; final class ListClubOperation { @@ -43,7 +42,7 @@ public function listClubsByName(string $name): array $rawClubs = $this->arrayWrapper->wrapArrayIfUnique($rawClubs); return $this->clubFactory->createFromArray($rawClubs); - } catch (Exception $e) { + } catch (\Exception $e) { return []; } } diff --git a/src/Service/Operation/ListPartieOperation.php b/src/Service/Operation/ListPartieOperation.php index 30fb49e..09ebf95 100644 --- a/src/Service/Operation/ListPartieOperation.php +++ b/src/Service/Operation/ListPartieOperation.php @@ -8,7 +8,6 @@ use Alamirault\FFTTApi\Service\FFTTClientInterface; use Alamirault\FFTTApi\Service\NomPrenomExtractorInterface; use DateTime; -use Transliterator; final class ListPartieOperation { @@ -36,8 +35,8 @@ public function listPartiesJoueurByLicence(string $licenceId): array /** @var array{advnompre: string, date: string, vd: string, numjourn: string, pointres: string, coefchamp: string, advlic: string, advsexe: string, advclaof: string} $partie */ foreach ($parties as $partie) { [$nom, $prenom] = $this->nomPrenomExtractor->extractNomPrenom($partie['advnompre']); - /** @var DateTime $date */ - $date = DateTime::createFromFormat('d/m/Y', $partie['date']); + /** @var \DateTime $date */ + $date = \DateTime::createFromFormat('d/m/Y', $partie['date']); $realPartie = new Partie( 'V' === $partie['vd'], @@ -82,8 +81,8 @@ public function listUnvalidatedPartiesJoueurByLicence(string $joueurId): array ); })); - /** @var DateTime $date */ - $date = DateTime::createFromFormat('d/m/Y', $partie['date']); + /** @var \DateTime $date */ + $date = \DateTime::createFromFormat('d/m/Y', $partie['date']); if (!$found && 'Absent Absent' !== $prenom && $this->isInCurrentSaison($date) @@ -110,8 +109,8 @@ public function listUnvalidatedPartiesJoueurByLicence(string $joueurId): array private function removeAccentLowerCaseRegex(string $string): string { - /** @var Transliterator $transliterator */ - $transliterator = Transliterator::create('NFD; [:Nonspacing Mark:] Remove;'); + /** @var \Transliterator $transliterator */ + $transliterator = \Transliterator::create('NFD; [:Nonspacing Mark:] Remove;'); /** @var string $transliterated */ $transliterated = $transliterator->transliterate($string); @@ -122,15 +121,15 @@ private function removeAccentLowerCaseRegex(string $string): string /** * Détermine si la date d'une rencontre passée en paramètre correspond à la saison en cours. */ - private function isInCurrentSaison(Datetime $dateRencontre): bool + private function isInCurrentSaison(\DateTime $dateRencontre): bool { - $today = new DateTime(); + $today = new \DateTime(); $actualMonth = (int) $today->format('n'); $actualYear = (int) $today->format('Y'); - $dateDebutSaison = new DateTime($actualYear + ($actualMonth >= 7 ? 0 : -1).'-07-01'); - $dateFinSaison = new DateTime($actualYear + ($actualMonth >= 7 ? 1 : 0).'-07-01'); + $dateDebutSaison = new \DateTime($actualYear + ($actualMonth >= 7 ? 0 : -1).'-07-01'); + $dateFinSaison = new \DateTime($actualYear + ($actualMonth >= 7 ? 1 : 0).'-07-01'); return $dateRencontre >= $dateDebutSaison && $dateRencontre <= $dateFinSaison; } @@ -141,9 +140,9 @@ private function isInCurrentSaison(Datetime $dateRencontre): bool * Exemple : si nous sommes le 6 Octobre, nous prenons les rencontre du 1er Septembre à aujourd'hui. * Exemple : si nous sommes le 15 Octobre, nous prenons les rencontre du 1er Octobre (les points virtuels sont connus à partir du 5 et les rencontres sont comptabilisées du 1er au 31 du mois) à aujourd'hui. */ - private function isInCurrentVirtualMonth(Datetime $dateRencontre): bool + private function isInCurrentVirtualMonth(\DateTime $dateRencontre): bool { - $today = new DateTime(); + $today = new \DateTime(); $actualMonth = $today->format('n'); $actualYear = $today->format('Y'); @@ -159,8 +158,8 @@ private function isInCurrentVirtualMonth(Datetime $dateRencontre): bool } } - $dateDebutMoisVirtuel = new DateTime($actualYear.'-'.$debutMoisVirtuel.'-01'); - $dateFinMoisVirtuel = new DateTime(); + $dateDebutMoisVirtuel = new \DateTime($actualYear.'-'.$debutMoisVirtuel.'-01'); + $dateFinMoisVirtuel = new \DateTime(); return $dateRencontre >= $dateDebutMoisVirtuel && $dateRencontre <= $dateFinMoisVirtuel; } diff --git a/src/Service/Operation/ListRencontreOperation.php b/src/Service/Operation/ListRencontreOperation.php index 033f049..9c9062f 100644 --- a/src/Service/Operation/ListRencontreOperation.php +++ b/src/Service/Operation/ListRencontreOperation.php @@ -5,7 +5,6 @@ use Alamirault\FFTTApi\Model\Equipe; use Alamirault\FFTTApi\Model\Rencontre\Rencontre; use Alamirault\FFTTApi\Service\FFTTClientInterface; -use DateTime; final class ListRencontreOperation { @@ -32,11 +31,11 @@ public function listRencontrePouleByLienDivision(string $lienDivision): array /** @var string $nomEquipeB */ $nomEquipeB = is_array($equipeB) ? '' : $equipeB; - /** @var DateTime $datePrevue */ - $datePrevue = DateTime::createFromFormat('d/m/Y', $dataRencontre['dateprevue']); + /** @var \DateTime $datePrevue */ + $datePrevue = \DateTime::createFromFormat('d/m/Y', $dataRencontre['dateprevue']); - /** @var DateTime|null $dateReelle */ - $dateReelle = empty($dataRencontre['datereelle']) ? null : DateTime::createFromFormat('d/m/Y', $dataRencontre['datereelle']); + /** @var \DateTime|null $dateReelle */ + $dateReelle = empty($dataRencontre['datereelle']) ? null : \DateTime::createFromFormat('d/m/Y', $dataRencontre['datereelle']); $result[] = new Rencontre( $dataRencontre['libelle'], diff --git a/tests/Unit/Service/FFTTClientTest.php b/tests/Unit/Service/FFTTClientTest.php new file mode 100644 index 0000000..a53f9d0 --- /dev/null +++ b/tests/Unit/Service/FFTTClientTest.php @@ -0,0 +1,40 @@ + $handlerStack]); + $client = new FFTTClient($clientStub, new UriGenerator('foo', 'bar')); + + /** @var array{licence: array} $response */ + $response = $client->get('bar'); + + $this->assertSame('Côme', $response['licence']['prenom']); + } +} diff --git a/tests/Unit/Service/NomPrenomExtractorTest.php b/tests/Unit/Service/NomPrenomExtractorTest.php index 7f8668d..df4b11a 100644 --- a/tests/Unit/Service/NomPrenomExtractorTest.php +++ b/tests/Unit/Service/NomPrenomExtractorTest.php @@ -3,7 +3,6 @@ namespace Alamirault\FFTTApi\Tests\Unit\Service; use Alamirault\FFTTApi\Service\NomPrenomExtractor; -use Generator; use PHPUnit\Framework\TestCase; /** @@ -27,9 +26,9 @@ public function testExtractNomPrenom(string $raw, string $expectedNom, string $e } /** - * @return Generator> + * @return \Generator> */ - public function getData(): Generator + public function getData(): \Generator { yield [ 'MOREAU Véronique', diff --git a/tests/Unit/Service/Operation/ArrayWrapperTest.php b/tests/Unit/Service/Operation/ArrayWrapperTest.php index 0768021..293b8de 100644 --- a/tests/Unit/Service/Operation/ArrayWrapperTest.php +++ b/tests/Unit/Service/Operation/ArrayWrapperTest.php @@ -3,7 +3,6 @@ namespace Alamirault\FFTTApi\Tests\Unit\Service\Operation; use Alamirault\FFTTApi\Service\Operation\ArrayWrapper; -use Generator; use PHPUnit\Framework\TestCase; /** @@ -28,9 +27,9 @@ public function testWrapArrayIfUnique(array $raw, array $expected): void } /** - * @return Generator> + * @return \Generator> */ - public function getData(): Generator + public function getData(): \Generator { yield 'Unique element' => [ [ diff --git a/tests/Unit/Service/Operation/ListActualiteOperationTest.php b/tests/Unit/Service/Operation/ListActualiteOperationTest.php index f960e12..2660c49 100644 --- a/tests/Unit/Service/Operation/ListActualiteOperationTest.php +++ b/tests/Unit/Service/Operation/ListActualiteOperationTest.php @@ -40,12 +40,7 @@ public function testListActualites(): void $actualite = $result[0]; $this->assertSame('Ping santé', $actualite->getCategorie()); $this->assertSame('2022-10-07T00:00:00+00:00', $actualite->getDate()->format(DATE_ATOM)); - $description = <<assertSame($description, $actualite->getDescription()); + $this->assertSame('Du 12 au 16 octobre, les Championnats du Monde Ping Parkinson se dérouleront à Pula en Croatie. Cinq Français seront présents lors de cette compétition.', $actualite->getDescription()); $this->assertSame('https://www.fftt.com/site/medias/news/news__20221007145001.jpg', $actualite->getPhoto()); $this->assertSame('Les Championnats du Monde Ping Parkinson débutent mercredi !', $actualite->getTitre()); $this->assertSame('https://www.fftt.com/site/actualites/2022-10-07/les-championnats-monde-ping-parkinson-debutent-mercredi', $actualite->getUrl()); diff --git a/tests/Unit/Service/Operation/ListEquipeOperationTest.php b/tests/Unit/Service/Operation/ListEquipeOperationTest.php index ecaf0a6..9e2fe70 100644 --- a/tests/Unit/Service/Operation/ListEquipeOperationTest.php +++ b/tests/Unit/Service/Operation/ListEquipeOperationTest.php @@ -40,7 +40,7 @@ public function testListEquipesByClub(): void $equipe = $result[0]; $this->assertSame('A.P. ST SENOCH 2 - Phase 1', $equipe->getLibelle()); - $this->assertSame('D37_D?PARTEMENTALE_3_Ph1 Poule 2', $equipe->getDivision()); + $this->assertSame('D37_DÉPARTEMENTALE_3_Ph1 Poule 2', $equipe->getDivision()); $this->assertSame('cx_poule=436904&D1=106653&organisme_pere=45', $equipe->getLienDivision()); } } diff --git a/tests/Unit/Service/Operation/MockHandlerStub.php b/tests/Unit/Service/Operation/MockHandlerStub.php index 7f7d25f..d2de4cf 100644 --- a/tests/Unit/Service/Operation/MockHandlerStub.php +++ b/tests/Unit/Service/Operation/MockHandlerStub.php @@ -141,7 +141,7 @@ public function append() ) { $this->queue[] = $value; } else { - throw new \InvalidArgumentException('Expected a response or '.'exception. Found '.\GuzzleHttp\describe_type($value)); + throw new \InvalidArgumentException('Expected a response or exception. Found '.\GuzzleHttp\describe_type($value)); } } } diff --git a/tests/Unit/Service/fixtures/actualite.xml b/tests/Unit/Service/fixtures/actualite.xml index 5daba5b..e291d2b 100644 --- a/tests/Unit/Service/fixtures/actualite.xml +++ b/tests/Unit/Service/fixtures/actualite.xml @@ -1,91 +1,108 @@ - - -2022-10-07 -Les Championnats du Monde Ping Parkinson débutent mercredi ! -Du 12 au 16 octobre, les Championnats du Monde Ping Parkinson se dérouleront à Pula en Croatie. Cinq Français seront présents lors de cette compétition. - -Avoir la... -https://www.fftt.com/site/actualites/2022-10-07/les-championnats-monde-ping-parkinson-debutent-mercredi -https://www.fftt.com/site/medias/news/news__20221007145001.jpg -Ping santé - - -2022-10-07 -Si proches... -L'équipe de France masculine s'incline 2 matchs à 3 face à l'Allemagne et quitte la compétition aux portes des demi-finales. - -Si proches … - -Le... -https://www.fftt.com/site/actualites/2022-10-07/si-proches -https://www.fftt.com/site/medias/news/news__20221007093621.jpg -Championnats du Monde - - -2022-10-06 -La revanche ? Les Bleus joueront les Allemands en 1/4 de finale -Les Bleus affronteront donc l'Allemagne pour un quart de finale qui aura un air de revanche puisque les Français s'étaient inclinés 3 matchs à 1 en phase de... -https://www.fftt.com/site/actualites/2022-10-06/la-revanche-bleus-joueront-allemands-en-1-4-de-finale -https://www.fftt.com/site/medias/news/news__20221006175007.jpg -Championnats du Monde - - -2022-10-05 -Les Bleus sont en quarts de finale ! -Cette après-midi les Français se sont qualifiés pour les quarts de finale des championnats du Monde par équipes de Chengdu. En revanche, c'est malheureusement... -https://www.fftt.com/site/actualites/2022-10-05/les-bleus-sont-en-quarts-de-finale -https://www.fftt.com/site/medias/news/news__20221005184354.jpg -Championnats du Monde - - -2022-09-21 -Paris 2024 : A vos agendas pour obtenir vos billets ! -Le comité d'organisation de Paris 2024 a dévoilé ce mardi 20 septembre la procédure pour obtenir des billets pour assister aux épreuves des prochains Jeux... -https://www.fftt.com/site/actualites/2022-09-21/paris-2024-vos-agendas-pour-obtenir-vos-billets -https://www.fftt.com/site/medias/news/news__20221005165214.jpg -Paris 2024 - - -2022-10-02 -Participez au webinaire de clôture de l'Été Ping ! -La deuxième édition de l'opération été Ping s'est achevée le 21 septembre dernier ! A cette occasion, la Fédération... -https://www.fftt.com/site/actualites/2022-10-02/participez-webinaire-de-cloture-de-ete-ping -https://www.fftt.com/site/medias/news/news__20221005130752.jpg -Ete Ping - - -2022-10-04 -Mondiaux 2022 : Les Bleu(e)s en phases finales ! -C'était très tOt ce matin, les filles décrochaient leur ticket pour les huitièmes de finale des championnats du Monde par équipes face au Brésil,... -https://www.fftt.com/site/actualites/2022-10-04/mondiaux-2022-bleu-e-s-en-phases-finales -https://www.fftt.com/site/medias/news/news__20221004192731.jpg -Championnats du Monde - - -2022-10-04 -Retour sur le TOP 10 européen jeunes de Tours -Le TOP 10 européen jeunes se déroulait à Tours le 30 septembre, 1er et 2 octobre. Une édition organisée pour la seconde année consécutive au... -https://www.fftt.com/site/actualites/2022-10-04/retour-top-10-europeen-jeunes-de-tours -https://www.fftt.com/site/medias/news/news__20221004165606.jpg -TOP 10 - - -2022-10-04 -Retour sur l’opération « Tous les jours tous en forme » ! -Faire bouger et jouer les usagers des transports parisiens au moins quinze minutes par jour, voilà l'objectif visé par la RATP et la FFTT dans le cadre de l'opération... -https://www.fftt.com/site/actualites/2022-10-04/retour-operation-tous-jours-tous-en-forme -https://www.fftt.com/site/medias/news/news__20221004105215.jpg -Ping santé - - -2022-10-03 -La FFTT et la société KOMPAN deviennent partenaires -La FFTT et la société KOMPAN deviennent partenaires - - -La Fédération Française de Tennis de Table (FFTT) et KOMPAN s'associent pour le déploiement de... -https://www.fftt.com/site/actualites/2022-10-03/la-fftt-et-societe-kompan-deviennent-partenaires -https://www.fftt.com/site/medias/news/news__20221003103600.jpg -Partenariat - + + + + 2022-10-07 + Les Championnats du Monde Ping Parkinson débutent mercredi ! + Du 12 au 16 octobre, les Championnats du Monde Ping Parkinson se dérouleront à Pula en Croatie. Cinq Français seront présents lors de cette compétition. + https://www.fftt.com/site/actualites/2022-10-07/les-championnats-monde-ping-parkinson-debutent-mercredi + https://www.fftt.com/site/medias/news/news__20221007145001.jpg + Ping santé + + + + 2022-10-07 + Si proches... + L'équipe de France masculine s'incline 2 matchs à 3 face à l'Allemagne et quitte la compétition aux + portes des demi-finales. + + Si proches … + + Le... + + https://www.fftt.com/site/actualites/2022-10-07/si-proches + https://www.fftt.com/site/medias/news/news__20221007093621.jpg + Championnats du Monde + + + 2022-10-06 + La revanche ? Les Bleus joueront les Allemands en 1/4 de finale + Les Bleus affronteront donc l'Allemagne pour un quart de finale qui aura un air de revanche puisque + les Français s'étaient inclinés 3 matchs à 1 en phase de... + + https://www.fftt.com/site/actualites/2022-10-06/la-revanche-bleus-joueront-allemands-en-1-4-de-finale + https://www.fftt.com/site/medias/news/news__20221006175007.jpg + Championnats du Monde + + + 2022-10-05 + Les Bleus sont en quarts de finale ! + Cette après-midi les Français se sont qualifiés pour les quarts de finale des championnats du Monde + par équipes de Chengdu. En revanche, c'est malheureusement... + + https://www.fftt.com/site/actualites/2022-10-05/les-bleus-sont-en-quarts-de-finale + https://www.fftt.com/site/medias/news/news__20221005184354.jpg + Championnats du Monde + + + 2022-09-21 + Paris 2024 : A vos agendas pour obtenir vos billets ! + Le comité d'organisation de Paris 2024 a dévoilé ce mardi 20 septembre la procédure pour obtenir + des billets pour assister aux épreuves des prochains Jeux... + + https://www.fftt.com/site/actualites/2022-09-21/paris-2024-vos-agendas-pour-obtenir-vos-billets + https://www.fftt.com/site/medias/news/news__20221005165214.jpg + Paris 2024 + + + 2022-10-02 + Participez au webinaire de clôture de l'Été Ping ! + La deuxième édition de l'opération été Ping s'est achevée le 21 septembre dernier ! A cette + occasion, la Fédération... + + https://www.fftt.com/site/actualites/2022-10-02/participez-webinaire-de-cloture-de-ete-ping + https://www.fftt.com/site/medias/news/news__20221005130752.jpg + Ete Ping + + + 2022-10-04 + Mondiaux 2022 : Les Bleu(e)s en phases finales ! + C'était très tOt ce matin, les filles décrochaient leur ticket pour les huitièmes de finale des + championnats du Monde par équipes face au Brésil,... + + https://www.fftt.com/site/actualites/2022-10-04/mondiaux-2022-bleu-e-s-en-phases-finales + https://www.fftt.com/site/medias/news/news__20221004192731.jpg + Championnats du Monde + + + 2022-10-04 + Retour sur le TOP 10 européen jeunes de Tours + Le TOP 10 européen jeunes se déroulait à Tours le 30 septembre, 1er et 2 octobre. Une édition + organisée pour la seconde année consécutive au... + + https://www.fftt.com/site/actualites/2022-10-04/retour-top-10-europeen-jeunes-de-tours + https://www.fftt.com/site/medias/news/news__20221004165606.jpg + TOP 10 + + + 2022-10-04 + Retour sur l?opération « Tous les jours tous en forme » ! + Faire bouger et jouer les usagers des transports parisiens au moins quinze minutes par jour, voilà + l'objectif visé par la RATP et la FFTT dans le cadre de l'opération... + + https://www.fftt.com/site/actualites/2022-10-04/retour-operation-tous-jours-tous-en-forme + https://www.fftt.com/site/medias/news/news__20221004105215.jpg + Ping santé + + + 2022-10-03 + La FFTT et la société KOMPAN deviennent partenaires + La FFTT et la société KOMPAN deviennent partenaires + + + La Fédération Française de Tennis de Table (FFTT) et KOMPAN s'associent pour le déploiement de... + + https://www.fftt.com/site/actualites/2022-10-03/la-fftt-et-societe-kompan-deviennent-partenaires + https://www.fftt.com/site/medias/news/news__20221003103600.jpg + Partenariat + diff --git a/tests/Unit/Service/fixtures/joueur_with_accent.xml b/tests/Unit/Service/fixtures/joueur_with_accent.xml new file mode 100644 index 0000000..aba129d --- /dev/null +++ b/tests/Unit/Service/fixtures/joueur_with_accent.xml @@ -0,0 +1,2 @@ + +12429437732348BANCCôme08751177AP 17MTU12/07/20221328J31368.6298828131360.63132801/07/2022F \ No newline at end of file