diff --git a/frontend/modules/logistique/pages/weighing-tickets/[id]/edit.vue b/frontend/modules/logistique/pages/weighing-tickets/[id]/edit.vue index d42b2bd..bb8bf6d 100644 --- a/frontend/modules/logistique/pages/weighing-tickets/[id]/edit.vue +++ b/frontend/modules/logistique/pages/weighing-tickets/[id]/edit.vue @@ -58,6 +58,7 @@ authManageOnSite($this->siteByCode('86')); + + // Le back reste l'autorite (le masque front FREE_TEXT_MASK filtre deja a la + // frappe) : un libelle « Autre » avec des caracteres parasites -> 422 sur + // otherLabel (Assert\Regex FREE_TEXT), mappee inline cote front (ERP-101). + $response = $this->postTicket($http, [ + 'counterpartyType' => 'AUTRE', + 'otherLabel' => 'Chantier ~#|<>{}', + 'emptyDate' => '2026-06-17T09:00:00+02:00', + 'emptyWeight' => 7150, + 'emptyMode' => 'AUTO', + ]); + + self::assertResponseStatusCodeSame(422); + self::assertViolationOnPath($response, 'otherLabel'); + } + + public function testOtherLabelLegitimateIsAccepted(): void + { + $http = $this->authManageOnSite($this->siteByCode('86')); + + // Lettres accentuees, chiffres, espaces, parentheses, °, & : tout autorise + // par FREE_TEXT (miroir des raisons sociales Client/Fournisseur). + $body = $this->postTicket($http, [ + 'counterpartyType' => 'AUTRE', + 'otherLabel' => 'Chantier Léon (Pôle n°2) & Cie', + 'emptyDate' => '2026-06-17T09:00:00+02:00', + 'emptyWeight' => 7150, + 'emptyMode' => 'AUTO', + ])->toArray(); + + self::assertResponseStatusCodeSame(201); + self::assertSame('Chantier Léon (Pôle n°2) & Cie', $body['otherLabel']); + } + public function testValidateRequiresCounterparty(): void { $http = $this->authManageOnSite($this->siteByCode('86'));