@@ -162,117 +162,54 @@ 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 testClearUriPrefixedUuid (): void
165+ public function testClearUriPrefixedId (): void
166166 {
167- // Gera prefixos completamente aleatórios
168- $ generateRandomPrefix = function (): string {
169- $ wordCount = rand (1 , 3 ); // 1 a 3 palavras no prefixo
170- $ words = [];
171-
172- for ($ i = 0 ; $ i < $ wordCount ; $ i ++) {
173- $ wordLength = rand (3 , 8 ); // palavras de 3 a 8 caracteres
174- $ word = '' ;
175- for ($ j = 0 ; $ j < $ wordLength ; $ j ++) {
176- $ word .= chr (rand (65 , 90 )); // A-Z (65-90 na tabela ASCII)
177- }
178- $ words [] = $ word ;
179- }
180-
181- return implode ('- ' , $ words );
182- };
183-
184- // Gera IDs do tipo ECOSYSTEM
185- $ generateEcosystemId = function (): string {
186- $ prefixes = ['ECOSYSTEM ' , 'PLATFORM ' , 'SERVICE ' , 'MODULE ' ];
187- $ codes = ['EPF ' , 'ABC ' , 'XYZ ' , 'DEF ' , 'GHI ' , 'ESF ' ];
188-
189- $ prefix = $ prefixes [array_rand ($ prefixes )];
190- $ code = $ codes [array_rand ($ codes )];
191- $ number = (string )rand (100000000 , 9999999999 ); // 9-10 dígitos
192-
193- // 50% de chance de ter sequência final
194- if (rand (0 , 1 )) {
195- $ sequence = str_pad ((string )rand (1 , 999 ), 3 , '0 ' , STR_PAD_LEFT );
196- return "{$ prefix }- {$ code }- {$ number }_ {$ sequence }" ;
197- }
198-
199- return "{$ prefix }- {$ code }- {$ number }" ;
200- };
201-
202- $ randomPrefix = $ generateRandomPrefix ();
203-
204- // Gera UUIDs aleatórios (incluindo caracteres não-hexadecimais para testar a regex)
205- $ uuidChars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ' ;
206- $ randomUuid = sprintf (
207- '%s-%s-%s-%s-%s ' ,
208- substr (str_shuffle ($ uuidChars ), 0 , 8 ),
209- substr (str_shuffle ($ uuidChars ), 0 , 4 ),
210- substr (str_shuffle ($ uuidChars ), 0 , 4 ),
211- substr (str_shuffle ($ uuidChars ), 0 , 4 ),
212- substr (str_shuffle ($ uuidChars ), 0 , 12 )
213- );
214-
215- $ prefixedUuid = "{$ randomPrefix }- {$ randomUuid }" ;
216-
217- // Casos de teste estático para garantir consistência
218- $ billUuid = 'BILL-123e4567-e89b-12d3-a456-426614174000 ' ;
219- $ userUuid = 'USER-abc1234d-e56f-78g9-h012-345678901234 ' ;
220- $ companyUuid = 'COMPANY-ADMIN-456e7890-f12a-34b5-c678-901234567890 ' ;
221-
222- // IDs do tipo ECOSYSTEM (estáticos e aleatórios)
223- $ ecosystemId = 'ECOSYSTEM-EPF-0100290422_001 ' ;
224- $ ecosystemId2 = 'PLATFORM-ABC-1234567890_999 ' ;
225- $ randomEcosystemId = $ generateEcosystemId ();
226- $ randomEcosystemId2 = $ generateEcosystemId ();
227-
228- // Gera mais alguns prefixos aleatórios para testes variados
229- $ randomPrefix2 = $ generateRandomPrefix ();
230- $ randomUuid2 = sprintf (
231- '%s-%s-%s-%s-%s ' ,
232- substr (str_shuffle ($ uuidChars ), 0 , 8 ),
233- substr (str_shuffle ($ uuidChars ), 0 , 4 ),
234- substr (str_shuffle ($ uuidChars ), 0 , 4 ),
235- substr (str_shuffle ($ uuidChars ), 0 , 4 ),
236- substr (str_shuffle ($ uuidChars ), 0 , 12 )
237- );
238- $ prefixedUuid2 = "{$ randomPrefix2 }- {$ randomUuid2 }" ;
167+ // Casos de teste específicos solicitados
168+ $ ecosystemId1 = 'ECOSYSTEM-PPF-0100206721_003 ' ;
169+ $ ecosystemId2 = 'ECOSYSTEM-EPF-0100308183_001 ' ;
170+ $ ecosystemId3 = 'ECOSYSTEM-ESF-105454545 ' ;
171+ $ billUuid = 'BILL-1811cd92-ed15-4b8a-a571-6cfa44002703 ' ;
239172
240173 // Testes básicos
241174 self ::assertSame ('/v1/test ' , Uri::sanitize ('/v1/test ' ));
242175
243- // Testes com UUIDs prefixados randômicos
244- self ::assertSame ('/v2/test/<PREFIXED-ID> ' , Uri::sanitize ("/v2/test/ {$ prefixedUuid }" ));
245- self ::assertSame ('/v3/test/<PREFIXED-ID>/bar ' , Uri::sanitize ("/v3/test/ {$ prefixedUuid }/bar " ));
246- self ::assertSame ('/v4/test/<PREFIXED-ID>/bar/<PREFIXED-ID>/ ' , Uri::sanitize ("/v4/test/ {$ prefixedUuid }/bar/ {$ prefixedUuid }/ " ));
176+ // Testes com ECOSYSTEM-PPF-0100206721_003
177+ self ::assertSame ('/v2/test/<PREFIXED-ID> ' , Uri::sanitize ("/v2/test/ {$ ecosystemId1 }" ));
178+ self ::assertSame ('/v3/test/<PREFIXED-ID>/bar ' , Uri::sanitize ("/v3/test/ {$ ecosystemId1 }/bar " ));
179+ self ::assertSame ('/v4/test/<PREFIXED-ID>/bar/<PREFIXED-ID>/ ' , Uri::sanitize ("/v4/test/ {$ ecosystemId1 }/bar/ {$ ecosystemId1 }/ " ));
247180
248- // Testes com UUIDs prefixados estáticos
249- self ::assertSame ('/v2 /test/<PREFIXED-ID> ' , Uri::sanitize ("/v2 /test/ {$ billUuid }" ));
250- self ::assertSame ('/v3 /test/<PREFIXED-ID>/bar ' , Uri::sanitize ("/v3 /test/ {$ billUuid } /bar " ));
251- self ::assertSame ('/v4 /test/<PREFIXED-ID>/bar/ <PREFIXED-ID>/ ' , Uri::sanitize ("/v4 /test/ {$ billUuid } /bar/ { $ billUuid } / " ));
181+ // Testes com ECOSYSTEM-EPF-0100308183_001
182+ self ::assertSame ('/v5 /test/<PREFIXED-ID> ' , Uri::sanitize ("/v5 /test/ {$ ecosystemId2 }" ));
183+ self ::assertSame ('/v6 /test/<PREFIXED-ID>/details ' , Uri::sanitize ("/v6 /test/ {$ ecosystemId2 } /details " ));
184+ self ::assertSame ('/v7 /test/<PREFIXED-ID>/<PREFIXED-ID> ' , Uri::sanitize ("/v7 /test/ {$ ecosystemId2 } / { $ ecosystemId1 } " ));
252185
253- // Testes com IDs ECOSYSTEM estáticos
254- self ::assertSame ('/v5/test/<PREFIXED-ID> ' , Uri::sanitize ("/v5/test/ {$ ecosystemId }" ));
255- self ::assertSame ('/v6/test/<PREFIXED-ID>/details ' , Uri::sanitize ("/v6/test/ {$ ecosystemId }/details " ));
256- self ::assertSame ('/v7/test/<PREFIXED-ID>/<PREFIXED-ID> ' , Uri::sanitize ("/v7/test/ {$ ecosystemId }/ {$ ecosystemId2 }" ));
186+ // Testes com ECOSYSTEM-ESF-105454545
187+ self ::assertSame ('/v8/test/<PREFIXED-ID> ' , Uri::sanitize ("/v8/test/ {$ ecosystemId3 }" ));
188+ self ::assertSame ('/v9/test/<PREFIXED-ID>/config ' , Uri::sanitize ("/v9/test/ {$ ecosystemId3 }/config " ));
257189
258- // Testes com IDs ECOSYSTEM aleatórios
259- self ::assertSame ('/v8 /test/<PREFIXED-ID> ' , Uri::sanitize ("/v8 /test/ {$ randomEcosystemId }" ));
260- self ::assertSame ('/v9 /test/<PREFIXED-ID>/config ' , Uri::sanitize ("/v9 /test/ {$ randomEcosystemId } /config " ));
261- self ::assertSame ('/v10 /test/<PREFIXED-ID>/<PREFIXED-ID> ' , Uri::sanitize ("/v10 /test/ {$ randomEcosystemId } / { $ randomEcosystemId2 } " ));
190+ // Testes com BILL-1811cd92-ed15-4b8a-a571-6cfa44002703
191+ self ::assertSame ('/v10 /test/<PREFIXED-ID> ' , Uri::sanitize ("/v10 /test/ {$ billUuid }" ));
192+ self ::assertSame ('/v11 /test/<PREFIXED-ID>/profile ' , Uri::sanitize ("/v11 /test/ {$ billUuid } /profile " ));
193+ self ::assertSame ('/v12 /test/<PREFIXED-ID>/bar/ <PREFIXED-ID>/ ' , Uri::sanitize ("/v12 /test/ {$ billUuid } /bar/ { $ billUuid } / " ));
262194
263- // Testes mistos: UUIDs prefixados + IDs ECOSYSTEM
264- self ::assertSame ('/v11 /test/<PREFIXED-ID>/<PREFIXED-ID> ' , Uri::sanitize ("/v11 /test/ {$ prefixedUuid }/ {$ ecosystemId }" ));
265- self ::assertSame ('/v12 /test/<PREFIXED-ID>/<PREFIXED-ID>/<PREFIXED-ID> ' , Uri::sanitize ("/v12 /test/ {$ billUuid }/ {$ randomEcosystemId }/ {$ userUuid }" ));
266- self ::assertSame ('/v13 /test/<PREFIXED-ID>/<PREFIXED-ID>/<PREFIXED-ID>/ ' , Uri::sanitize ("/v13 /test/ {$ ecosystemId }/ {$ prefixedUuid2 }/ {$ randomEcosystemId2 }/ " ));
195+ // Testes mistos entre os IDs
196+ self ::assertSame ('/v13 /test/<PREFIXED-ID>/<PREFIXED-ID> ' , Uri::sanitize ("/v13 /test/ {$ billUuid }/ {$ ecosystemId3 }" ));
197+ self ::assertSame ('/v14 /test/<PREFIXED-ID>/<PREFIXED-ID>/<PREFIXED-ID> ' , Uri::sanitize ("/v14 /test/ {$ ecosystemId1 }/ {$ ecosystemId2 }/ {$ billUuid }" ));
198+ self ::assertSame ('/v15 /test/<PREFIXED-ID>/<PREFIXED-ID>/<PREFIXED-ID>/ ' , Uri::sanitize ("/v15 /test/ {$ ecosystemId3 }/ {$ billUuid }/ {$ ecosystemId1 }/ " ));
267199
268200 // Casos edge: diferentes contextos de API
269- self ::assertSame ('/users/<PREFIXED-ID>/profile ' , Uri::sanitize ("/users/ {$ prefixedUuid }/profile " ));
201+ self ::assertSame ('/users/<PREFIXED-ID>/profile ' , Uri::sanitize ("/users/ {$ billUuid }/profile " ));
270202 self ::assertSame ('/api/v1/bills/<PREFIXED-ID>/details ' , Uri::sanitize ("/api/v1/bills/ {$ billUuid }/details " ));
271- self ::assertSame ('/ecosystems/<PREFIXED-ID>/platform/<PREFIXED-ID> ' , Uri::sanitize ("/ecosystems/ {$ randomEcosystemId }/platform/ {$ randomEcosystemId2 }" ));
272- self ::assertSame ('/companies/<PREFIXED-ID>/admin/<PREFIXED-ID>/settings ' , Uri::sanitize ("/companies/ {$ prefixedUuid2 }/admin/ {$ ecosystemId }/settings " ));
203+ self ::assertSame ('/ecosystems/<PREFIXED-ID>/platform/<PREFIXED-ID> ' , Uri::sanitize ("/ecosystems/ {$ ecosystemId1 }/platform/ {$ ecosystemId2 }" ));
204+ self ::assertSame ('/companies/<PREFIXED-ID>/admin/<PREFIXED-ID>/settings ' , Uri::sanitize ("/companies/ {$ billUuid }/admin/ {$ ecosystemId3 }/settings " ));
205+
206+ // Casos críticos: evitar falsos positivos
207+ self ::assertSame ('/pic-pay/entry/id/<PREFIXED-ID> ' , Uri::sanitize ("/pic-pay/entry/id/ {$ ecosystemId3 }" ));
208+ self ::assertSame ('/api-gateway/service/<PREFIXED-ID> ' , Uri::sanitize ("/api-gateway/service/ {$ ecosystemId2 }" ));
209+ self ::assertSame ('/health-check/status/<PREFIXED-ID> ' , Uri::sanitize ("/health-check/status/ {$ billUuid }" ));
273210
274211 // Teste sem barra final
275- self ::assertSame ('/test/<PREFIXED-ID> ' , Uri::sanitize ("/test/ {$ prefixedUuid }" ));
276- self ::assertSame ('/ecosystem/<PREFIXED-ID> ' , Uri::sanitize ("/ecosystem/ {$ randomEcosystemId }" ));
212+ self ::assertSame ('/test/<PREFIXED-ID> ' , Uri::sanitize ("/test/ {$ billUuid }" ));
213+ self ::assertSame ('/ecosystem/<PREFIXED-ID> ' , Uri::sanitize ("/ecosystem/ {$ ecosystemId1 }" ));
277214 }
278215}
0 commit comments