Skip to content

Commit

Permalink
Fixes for edge cases and support more TypeLicence
Browse files Browse the repository at this point in the history
  • Loading branch information
StephSako authored Mar 21, 2023
1 parent 4a98dd0 commit 5bdb0b5
Show file tree
Hide file tree
Showing 9 changed files with 96 additions and 20 deletions.
6 changes: 4 additions & 2 deletions src/Model/Enums/TypeLicenceEnum.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

enum TypeLicenceEnum: string
{
case Traditionnelle = 'T';
case Promotionnelle = 'P';
case Competition = 'T';
case Loisir = 'P';
case Decouverte = 'I';
case Evenementiel = 'E';
}
8 changes: 4 additions & 4 deletions src/Model/JoueurDetails.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@ public function __construct(
private readonly string $numClub,
private readonly string $nomClub,
private readonly bool $isHomme,
private readonly string $categorie,
private readonly ?string $categorie,
// TODO: Créer une Enum pour convertir "categorie" en libellés plus explicites
private readonly ?float $pointDebutSaison,
private readonly float $pointsLicence,
private readonly ?float $pointsMensuel,
private readonly ?float $pointsMensuelAnciens,
private readonly bool $isClasseNational,
private readonly ?int $classementNational,
private readonly NationaliteEnum $nationalite,
private readonly ?NationaliteEnum $nationalite,
private readonly ?\DateTime $dateMutation,
private readonly ?string $diplomeArbitre,
private readonly ?string $diplomeJugeArbitre,
Expand Down Expand Up @@ -57,7 +57,7 @@ public function getClassementNational(): ?int
return $this->classementNational;
}

public function getNationalite(): NationaliteEnum
public function getNationalite(): ?NationaliteEnum
{
return $this->nationalite;
}
Expand Down Expand Up @@ -112,7 +112,7 @@ public function isHomme(): bool
return $this->isHomme;
}

public function getCategorie(): string
public function getCategorie(): ?string
{
return $this->categorie;
}
Expand Down
4 changes: 2 additions & 2 deletions src/Service/Operation/ListClubOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ public function listClubsByDepartement(int $departementId): array
{
/** @var array<array{numero: string, nom: string, validation: array<mixed>|string}> $rawClubs */
$rawClubs = $this->client->get('xml_club_dep2', [
'dep' => (string) $departementId,
])['club'];
'dep' => str_pad((string) $departementId, 2, '0', STR_PAD_LEFT),
])['club'] ?? [];

return $this->clubFactory->createFromArray($rawClubs);
}
Expand Down
6 changes: 4 additions & 2 deletions src/Service/Operation/RetrieveJoueurDetailsOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ public function retrieveJoueurDetails(string $licenceId, ?string $clubId = null)

if (array_key_exists('licence', $data)) {
$data = $data['licence'];
} elseif (!count($data) && !$licenceId) { // Si le club existe mais n'a pas de membres
return [];
} else {
throw new JoueurNotFoundException($licenceId, $clubId);
}
Expand Down Expand Up @@ -79,14 +81,14 @@ private function returnJoueurDetails(array $joueurDetails): JoueurDetails
$joueurDetails['numclub'],
$joueurDetails['nomclub'],
self::TYPE_HOMME === $joueurDetails['sexe'],
$joueurDetails['cat'],
$joueurDetails['cat'] ?: null,
$joueurDetails['initm'] ? (float) $joueurDetails['initm'] : null,
(float) $joueurDetails['point'],
$joueurDetails['pointm'] ? (float) $joueurDetails['pointm'] : null,
$joueurDetails['apointm'] ? (float) $joueurDetails['apointm'] : null,
self::TYPE_CLASSE_NATIONAL === $joueurDetails['echelon'],
$joueurDetails['place'] ? (int) $joueurDetails['place'] : null,
NationaliteEnum::from($joueurDetails['natio']),
$joueurDetails['natio'] ? NationaliteEnum::from($joueurDetails['natio']) : null,
$joueurDetails['mutation'] && \DateTime::createFromFormat('!d/m/Y', $joueurDetails['mutation']) ? \DateTime::createFromFormat('!d/m/Y', $joueurDetails['mutation']) : null,
$joueurDetails['arb'] ?: null,
$joueurDetails['ja'] ?: null,
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/Service/Operation/ListClubOperationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public function testListClubsByDepartement(): void

$operation = new ListClubOperation($FFTTClient, new ClubFactory(), new ArrayWrapper());

$result = $operation->listClubsByDepartement(37);
$result = $operation->listClubsByDepartement(1);

$this->assertCount(39, $result);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public function testRetrieveJoueurDetailsJoueurExistantSansClub(): void
$this->assertSame('11340010', $joueurDetails->getNumClub());
$this->assertSame('MONTPELLIER TT', $joueurDetails->getNomClub());
$this->assertTrue($joueurDetails->isHomme());
$this->assertSame(TypelicenceEnum::Traditionnelle, $joueurDetails->getTypeLicence());
$this->assertSame(TypelicenceEnum::Competition, $joueurDetails->getTypeLicence());
$this->assertSame('01/08/2022', $joueurDetails->getDateValidation()?->format('d/m/Y'));
$this->assertTrue($joueurDetails->isClasseNational());
$this->assertSame('S', $joueurDetails->getCategorie());
Expand All @@ -61,7 +61,7 @@ public function testRetrieveJoueurDetailsJoueurExistantSansClub(): void
$this->assertSame(3508.0, $joueurDetails->getPointsMensuelAnciens());
$this->assertSame(3453.0, $joueurDetails->getPointDebutSaison());
$this->assertSame(3508.0, $joueurDetails->getPointsLicence());
$this->assertSame(NationaliteEnum::Française, $joueurDetails->getNationalite());
$this->assertSame(NationaliteEnum::Etrangère, $joueurDetails->getNationalite());
$this->assertSame('21/02/2022', $joueurDetails->getDateMutation()?->format('d/m/Y'));
$this->assertNull($joueurDetails->getDiplomeArbitre());
$this->assertNull($joueurDetails->getDiplomeJugeArbitre());
Expand Down Expand Up @@ -99,7 +99,7 @@ public function testRetrieveJoueurDetailsJoueurExistantAvecClub(): void
$this->assertSame('08950978', $joueurDetails->getNumClub());
$this->assertSame('EAUBONNE CSM TT', $joueurDetails->getNomClub());
$this->assertTrue($joueurDetails->isHomme());
$this->assertSame(TypelicenceEnum::Traditionnelle, $joueurDetails->getTypeLicence());
$this->assertSame(TypelicenceEnum::Competition, $joueurDetails->getTypeLicence());
$this->assertSame('18/09/2022', $joueurDetails->getDateValidation()?->format('d/m/Y'));
$this->assertFalse($joueurDetails->isClasseNational());
$this->assertSame('V1', $joueurDetails->getCategorie());
Expand All @@ -108,7 +108,7 @@ public function testRetrieveJoueurDetailsJoueurExistantAvecClub(): void
$this->assertSame(775.25, $joueurDetails->getPointsMensuelAnciens());
$this->assertSame(710.0, $joueurDetails->getPointDebutSaison());
$this->assertSame(807.0, $joueurDetails->getPointsLicence());
$this->assertSame(NationaliteEnum::Française, $joueurDetails->getNationalite());
$this->assertSame(NationaliteEnum::Européenne, $joueurDetails->getNationalite());
$this->assertSame('01/07/2022', $joueurDetails->getDateMutation()?->format('d/m/Y'));
$this->assertNull($joueurDetails->getDiplomeArbitre());
$this->assertNull($joueurDetails->getDiplomeJugeArbitre());
Expand Down Expand Up @@ -266,15 +266,14 @@ public function testRetrieveJoueurDetailsListeJoueurSansLicenceAvecClubExistant(

/** @var JoueurDetails $joueurDetails */
$joueurDetails = $listeJoueurDetails[33];

$this->assertSame(1342005, $joueurDetails->getIdLicence());
$this->assertSame('9539821', $joueurDetails->getLicence());
$this->assertSame('SERVANT', $joueurDetails->getNom());
$this->assertSame('Elsa', $joueurDetails->getPrenom());
$this->assertSame('08951331', $joueurDetails->getNumClub());
$this->assertSame('LA FRETTE ESFTT', $joueurDetails->getNomClub());
$this->assertFalse($joueurDetails->isHomme());
$this->assertSame(TypeLicenceEnum::Promotionnelle, $joueurDetails->getTypeLicence());
$this->assertSame(TypeLicenceEnum::Loisir, $joueurDetails->getTypeLicence());
$this->assertSame('15/09/2022', $joueurDetails->getDateValidation()?->format('d/m/Y'));
$this->assertFalse($joueurDetails->isClasseNational());
$this->assertSame('M1', $joueurDetails->getCategorie());
Expand All @@ -288,6 +287,54 @@ public function testRetrieveJoueurDetailsListeJoueurSansLicenceAvecClubExistant(
$this->assertNull($joueurDetails->getDiplomeArbitre());
$this->assertNull($joueurDetails->getDiplomeJugeArbitre());
$this->assertNull($joueurDetails->getDiplomeTechnique());

/** @var JoueurDetails $joueurDetails */
$joueurDetails = $listeJoueurDetails[0];
$this->assertSame(78392, $joueurDetails->getIdLicence());
$this->assertSame('9511459', $joueurDetails->getLicence());
$this->assertSame('DOUTRIAUX', $joueurDetails->getNom());
$this->assertSame('Noel', $joueurDetails->getPrenom());
$this->assertSame('08951331', $joueurDetails->getNumClub());
$this->assertSame('LA FRETTE ESFTT', $joueurDetails->getNomClub());
$this->assertFalse(!$joueurDetails->isHomme());
$this->assertSame(TypeLicenceEnum::Decouverte, $joueurDetails->getTypeLicence());
$this->assertSame('12/07/2022', $joueurDetails->getDateValidation()?->format('d/m/Y'));
$this->assertFalse($joueurDetails->isClasseNational());
$this->assertSame(null, $joueurDetails->getCategorie());
$this->assertNull($joueurDetails->getClassementNational());
$this->assertSame(970.0, $joueurDetails->getPointsMensuel());
$this->assertSame(965.5, $joueurDetails->getPointsMensuelAnciens());
$this->assertSame(975.0, $joueurDetails->getPointDebutSaison());
$this->assertSame(970.0, $joueurDetails->getPointsLicence());
$this->assertSame(null, $joueurDetails->getNationalite());
$this->assertNull($joueurDetails->getDateMutation());
$this->assertNull($joueurDetails->getDiplomeArbitre());
$this->assertNull($joueurDetails->getDiplomeJugeArbitre());
$this->assertNull($joueurDetails->getDiplomeTechnique());

/** @var JoueurDetails $joueurDetails */
$joueurDetails = $listeJoueurDetails[1];
$this->assertSame(88226, $joueurDetails->getIdLicence());
$this->assertSame('959179', $joueurDetails->getLicence());
$this->assertSame('FANZUTTI', $joueurDetails->getNom());
$this->assertSame('Patrick', $joueurDetails->getPrenom());
$this->assertSame('08951331', $joueurDetails->getNumClub());
$this->assertSame('LA FRETTE ESFTT', $joueurDetails->getNomClub());
$this->assertFalse(!$joueurDetails->isHomme());
$this->assertSame(TypeLicenceEnum::Evenementiel, $joueurDetails->getTypeLicence());
$this->assertSame('06/07/2022', $joueurDetails->getDateValidation()?->format('d/m/Y'));
$this->assertFalse($joueurDetails->isClasseNational());
$this->assertSame('V3', $joueurDetails->getCategorie());
$this->assertNull($joueurDetails->getClassementNational());
$this->assertSame(577.0, $joueurDetails->getPointsMensuel());
$this->assertSame(570.0, $joueurDetails->getPointsMensuelAnciens());
$this->assertSame(564.0, $joueurDetails->getPointDebutSaison());
$this->assertSame(577.0, $joueurDetails->getPointsLicence());
$this->assertSame(null, $joueurDetails->getNationalite());
$this->assertNull($joueurDetails->getDateMutation());
$this->assertNull($joueurDetails->getDiplomeArbitre());
$this->assertNull($joueurDetails->getDiplomeJugeArbitre());
$this->assertNull($joueurDetails->getDiplomeTechnique());
}

/**
Expand Down Expand Up @@ -318,4 +365,29 @@ public function testRetrieveJoueurDetailsSansJoueurniClub(): void
$this->assertSame(InvalidRequestException::class, $e::class);
}
}

/**
* Cas d'un club sans joueurs.
*
* @covers ::retrieveJoueurDetails
*/
public function testRetrieveJoueurDetailsClubSansJoueurs(): void
{
/** @var string $responseContent */
$responseContent = file_get_contents(__DIR__.'/../fixtures/empty_result.xml');
$mock = new MockHandlerStub([
new Response(200, [
'content-type' => ['text/html; charset=UTF-8'],
], $responseContent),
]);

$handlerStack = HandlerStack::create($mock);
$client = new Client(['handler' => $handlerStack]);
$FFTTClient = new FFTTClient($client, new UriGenerator('foo', 'bar'));

$operation = new RetrieveJoueurDetailsOperation($FFTTClient);

$listeVideJoueurs = $operation->retrieveJoueurDetails('', '07021011');
$this->assertSame([], $listeVideJoueurs);
}
}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<?xml version="1.0" encoding="ISO-8859-1"?><liste><licence><idlicence>1370316</idlicence><licence>2221557</licence><nom>LE MORVAN</nom><prenom>Sébastien</prenom><numclub>08950978</numclub><nomclub>EAUBONNE CSM TT</nomclub><sexe>M</sexe><type>T</type><certif>A</certif><validation>18/09/2022</validation><echelon></echelon><place/><point>807</point><cat>V1</cat><pointm>807</pointm><apointm>775.25</apointm><initm>710.</initm><mutation>01/07/2022</mutation><natio>F</natio><arb/><ja/><tech/></licence></liste>
<?xml version="1.0" encoding="ISO-8859-1"?><liste><licence><idlicence>1370316</idlicence><licence>2221557</licence><nom>LE MORVAN</nom><prenom>Sébastien</prenom><numclub>08950978</numclub><nomclub>EAUBONNE CSM TT</nomclub><sexe>M</sexe><type>T</type><certif>A</certif><validation>18/09/2022</validation><echelon></echelon><place/><point>807</point><cat>V1</cat><pointm>807</pointm><apointm>775.25</apointm><initm>710.</initm><mutation>01/07/2022</mutation><natio>C</natio><arb/><ja/><tech/></licence></liste>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<?xml version="1.0" encoding="ISO-8859-1"?><liste><licence><idlicence>639188</idlicence><licence>3418930</licence><nom>LEBRUN</nom><prenom>Alexis</prenom><numclub>11340010</numclub><nomclub>MONTPELLIER TT</nomclub><sexe>M</sexe><type>T</type><certif>A</certif><validation>01/08/2022</validation><echelon>N</echelon><place>5</place><point>3508</point><cat>S</cat><pointm>28</pointm><apointm>3508</apointm><initm>3453</initm><mutation>21/02/2022</mutation><natio>F</natio><arb/><ja/><tech/></licence></liste>
<?xml version="1.0" encoding="ISO-8859-1"?><liste><licence><idlicence>639188</idlicence><licence>3418930</licence><nom>LEBRUN</nom><prenom>Alexis</prenom><numclub>11340010</numclub><nomclub>MONTPELLIER TT</nomclub><sexe>M</sexe><type>T</type><certif>A</certif><validation>01/08/2022</validation><echelon>N</echelon><place>5</place><point>3508</point><cat>S</cat><pointm>28</pointm><apointm>3508</apointm><initm>3453</initm><mutation>21/02/2022</mutation><natio>E</natio><arb/><ja/><tech/></licence></liste>

Large diffs are not rendered by default.

0 comments on commit 5bdb0b5

Please sign in to comment.