@@ -162,17 +162,62 @@ public function testClearUriExternalIds(): void
162162 self ::assertSame ('/v9/test/<EXTERNAL-ID>/bar/<NUMBER> ' , Uri::sanitize ('/v9/test/RR2101818220123720H9KJTERfw1a/bar/12345 ' ));
163163 }
164164
165- public function testClearUriBillUuid (): void
165+ public function testClearUriPrefixedUuid (): void
166166 {
167+ // Gera prefixos aleatórios para tornar o teste mais robusto
168+ $ prefixes = ['BILL ' , 'USER ' , 'ADMIN ' , 'CLIENT ' , 'ORDER ' , 'PAYMENT ' , 'COMPANY-ADMIN ' , 'SUB-TENANT ' , 'API-KEY ' ];
169+ $ randomPrefix = $ prefixes [array_rand ($ prefixes )];
170+
171+ // Gera UUIDs aleatórios (incluindo caracteres não-hexadecimais para testar a regex)
172+ $ uuidChars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ' ;
173+ $ randomUuid = sprintf (
174+ '%s-%s-%s-%s-%s ' ,
175+ substr (str_shuffle ($ uuidChars ), 0 , 8 ),
176+ substr (str_shuffle ($ uuidChars ), 0 , 4 ),
177+ substr (str_shuffle ($ uuidChars ), 0 , 4 ),
178+ substr (str_shuffle ($ uuidChars ), 0 , 4 ),
179+ substr (str_shuffle ($ uuidChars ), 0 , 12 )
180+ );
181+
182+ $ prefixedUuid = "{$ randomPrefix }- {$ randomUuid }" ;
183+
184+ // Casos de teste estático para garantir consistência
167185 $ billUuid = 'BILL-123e4567-e89b-12d3-a456-426614174000 ' ;
186+ $ userUuid = 'USER-abc1234d-e56f-78g9-h012-345678901234 ' ;
187+ $ companyUuid = 'COMPANY-ADMIN-456e7890-f12a-34b5-c678-901234567890 ' ;
168188
189+ // Testes básicos
169190 self ::assertSame ('/v1/test ' , Uri::sanitize ('/v1/test ' ));
170- self ::assertSame ('/v2/test/<BILL-UUID> ' , Uri::sanitize ("/v2/test/ {$ billUuid }" ));
171- self ::assertSame ('/v3/test/<BILL-UUID>/bar ' , Uri::sanitize ("/v3/test/ {$ billUuid }/bar " ));
172- self ::assertSame ('/v4/test/<BILL-UUID>/bar/<BILL-UUID>/ ' , Uri::sanitize ("/v4/test/ {$ billUuid }/bar/ {$ billUuid }/ " ));
173- self ::assertSame ('/v5/test/<BILL-UUID>/<BILL-UUID> ' , Uri::sanitize ("/v5/test/ {$ billUuid }/ {$ billUuid }" ));
174- self ::assertSame ('/v6/test/<BILL-UUID>/<BILL-UUID>/ ' , Uri::sanitize ("/v6/test/ {$ billUuid }/ {$ billUuid }/ " ));
175- self ::assertSame ('/v7/test/<BILL-UUID>/<BILL-UUID>/<BILL-UUID> ' , Uri::sanitize ("/v7/test/ {$ billUuid }/ {$ billUuid }/ {$ billUuid }" ));
176- self ::assertSame ('/v8/test/<BILL-UUID>/<BILL-UUID>/<BILL-UUID>/ ' , Uri::sanitize ("/v8/test/ {$ billUuid }/ {$ billUuid }/ {$ billUuid }/ " ));
191+
192+ // Testes com prefixo randômico
193+ self ::assertSame ('/v2/test/<PREFIXED-UUID> ' , Uri::sanitize ("/v2/test/ {$ prefixedUuid }" ));
194+ self ::assertSame ('/v3/test/<PREFIXED-UUID>/bar ' , Uri::sanitize ("/v3/test/ {$ prefixedUuid }/bar " ));
195+ self ::assertSame ('/v4/test/<PREFIXED-UUID>/bar/<PREFIXED-UUID>/ ' , Uri::sanitize ("/v4/test/ {$ prefixedUuid }/bar/ {$ prefixedUuid }/ " ));
196+
197+ // Testes com casos estáticos conhecidos
198+ self ::assertSame ('/v2/test/<PREFIXED-UUID> ' , Uri::sanitize ("/v2/test/ {$ billUuid }" ));
199+ self ::assertSame ('/v3/test/<PREFIXED-UUID>/bar ' , Uri::sanitize ("/v3/test/ {$ billUuid }/bar " ));
200+ self ::assertSame ('/v4/test/<PREFIXED-UUID>/bar/<PREFIXED-UUID>/ ' , Uri::sanitize ("/v4/test/ {$ billUuid }/bar/ {$ billUuid }/ " ));
201+
202+ // Testes com UUID não-hexadecimal
203+ self ::assertSame ('/v2/test/<PREFIXED-UUID> ' , Uri::sanitize ("/v2/test/ {$ userUuid }" ));
204+ self ::assertSame ('/v3/test/<PREFIXED-UUID>/bar ' , Uri::sanitize ("/v3/test/ {$ userUuid }/bar " ));
205+
206+ // Testes com prefixo composto
207+ self ::assertSame ('/v2/test/<PREFIXED-UUID> ' , Uri::sanitize ("/v2/test/ {$ companyUuid }" ));
208+ self ::assertSame ('/v3/test/<PREFIXED-UUID>/bar ' , Uri::sanitize ("/v3/test/ {$ companyUuid }/bar " ));
209+
210+ // Testes com múltiplos UUIDs (randômico + estático)
211+ self ::assertSame ('/v5/test/<PREFIXED-UUID>/<PREFIXED-UUID> ' , Uri::sanitize ("/v5/test/ {$ prefixedUuid }/ {$ billUuid }" ));
212+ self ::assertSame ('/v6/test/<PREFIXED-UUID>/<PREFIXED-UUID>/ ' , Uri::sanitize ("/v6/test/ {$ billUuid }/ {$ prefixedUuid }/ " ));
213+ self ::assertSame ('/v7/test/<PREFIXED-UUID>/<PREFIXED-UUID>/<PREFIXED-UUID> ' , Uri::sanitize ("/v7/test/ {$ prefixedUuid }/ {$ billUuid }/ {$ userUuid }" ));
214+ self ::assertSame ('/v8/test/<PREFIXED-UUID>/<PREFIXED-UUID>/<PREFIXED-UUID>/ ' , Uri::sanitize ("/v8/test/ {$ billUuid }/ {$ userUuid }/ {$ prefixedUuid }/ " ));
215+
216+ // Casos edge: diferentes contextos de API
217+ self ::assertSame ('/users/<PREFIXED-UUID>/profile ' , Uri::sanitize ("/users/ {$ prefixedUuid }/profile " ));
218+ self ::assertSame ('/api/v1/bills/<PREFIXED-UUID>/details ' , Uri::sanitize ("/api/v1/bills/ {$ billUuid }/details " ));
219+
220+ // Teste sem barra final
221+ self ::assertSame ('/test/<PREFIXED-UUID> ' , Uri::sanitize ("/test/ {$ prefixedUuid }" ));
177222 }
178223}
0 commit comments