Skip to content

Commit 725d62d

Browse files
authored
upkeep: Atualiza sanitização para suportar IDs prefixados e novos fomatos de ID ECOSYSTEM (#32)
upkeep: Atualiza sanitização para suportar IDs prefixados e novos formatos de ID ECOSYSTEM
1 parent af5a029 commit 725d62d

File tree

2 files changed

+47
-33
lines changed

2 files changed

+47
-33
lines changed

src/Support/Uri.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public static function sanitize(string $uri, array $uriMask = []): string
2727
'/\/(?<=\/)[0-9A-F]{16,24}(?=\/)?/i',
2828
'/\/(?<=\/)\d+(?=\/)?/',
2929
'/\/(?<=\/)R[RN]\d{16}[A-Za-z0-9]{11}/',
30-
'/\/(?<=\/)([A-Z]+(?:-[A-Z]+)*)-([0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12})(?=\/|$)/i',
30+
'/\/(?<=\/)([A-Z]+(?:-[A-Z]+)*)-([0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}|[A-Z]{3}-\d{10}_\d{3})(?=\/|$)/i',
3131
],
3232
),
3333
array_merge(
@@ -40,7 +40,7 @@ public static function sanitize(string $uri, array $uriMask = []): string
4040
'/<OID>',
4141
'/<NUMBER>',
4242
'/<EXTERNAL-ID>',
43-
'/<PREFIXED-UUID>',
43+
'/<PREFIXED-ID>',
4444
],
4545
),
4646
'/' . ltrim($uri, '/'),

tests/Cases/UriTest.php

Lines changed: 45 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,19 @@ public function testClearUriPrefixedUuid(): void
181181
return implode('-', $words);
182182
};
183183

184+
// Gera IDs do tipo ECOSYSTEM
185+
$generateEcosystemId = function(): string {
186+
$prefixes = ['ECOSYSTEM', 'PLATFORM', 'SERVICE', 'MODULE'];
187+
$codes = ['EPF', 'ABC', 'XYZ', 'DEF', 'GHI'];
188+
189+
$prefix = $prefixes[array_rand($prefixes)];
190+
$code = $codes[array_rand($codes)];
191+
$number = str_pad((string)rand(1000000000, 9999999999), 10, '0', STR_PAD_LEFT);
192+
$sequence = str_pad((string)rand(1, 999), 3, '0', STR_PAD_LEFT);
193+
194+
return "{$prefix}-{$code}-{$number}_{$sequence}";
195+
};
196+
184197
$randomPrefix = $generateRandomPrefix();
185198

186199
// Gera UUIDs aleatórios (incluindo caracteres não-hexadecimais para testar a regex)
@@ -201,6 +214,12 @@ public function testClearUriPrefixedUuid(): void
201214
$userUuid = 'USER-abc1234d-e56f-78g9-h012-345678901234';
202215
$companyUuid = 'COMPANY-ADMIN-456e7890-f12a-34b5-c678-901234567890';
203216

217+
// IDs do tipo ECOSYSTEM (estáticos e aleatórios)
218+
$ecosystemId = 'ECOSYSTEM-EPF-0100290422_001';
219+
$ecosystemId2 = 'PLATFORM-ABC-1234567890_999';
220+
$randomEcosystemId = $generateEcosystemId();
221+
$randomEcosystemId2 = $generateEcosystemId();
222+
204223
// Gera mais alguns prefixos aleatórios para testes variados
205224
$randomPrefix2 = $generateRandomPrefix();
206225
$randomUuid2 = sprintf(
@@ -216,44 +235,39 @@ public function testClearUriPrefixedUuid(): void
216235
// Testes básicos
217236
self::assertSame('/v1/test', Uri::sanitize('/v1/test'));
218237

219-
// Testes com prefixos randômicos
220-
self::assertSame('/v2/test/<PREFIXED-UUID>', Uri::sanitize("/v2/test/{$prefixedUuid}"));
221-
self::assertSame('/v3/test/<PREFIXED-UUID>/bar', Uri::sanitize("/v3/test/{$prefixedUuid}/bar"));
222-
self::assertSame('/v4/test/<PREFIXED-UUID>/bar/<PREFIXED-UUID>/', Uri::sanitize("/v4/test/{$prefixedUuid}/bar/{$prefixedUuid}/"));
223-
224-
// Testes com casos estáticos conhecidos
225-
self::assertSame('/v2/test/<PREFIXED-UUID>', Uri::sanitize("/v2/test/{$billUuid}"));
226-
self::assertSame('/v3/test/<PREFIXED-UUID>/bar', Uri::sanitize("/v3/test/{$billUuid}/bar"));
227-
self::assertSame('/v4/test/<PREFIXED-UUID>/bar/<PREFIXED-UUID>/', Uri::sanitize("/v4/test/{$billUuid}/bar/{$billUuid}/"));
238+
// Testes com UUIDs prefixados randômicos
239+
self::assertSame('/v2/test/<PREFIXED-ID>', Uri::sanitize("/v2/test/{$prefixedUuid}"));
240+
self::assertSame('/v3/test/<PREFIXED-ID>/bar', Uri::sanitize("/v3/test/{$prefixedUuid}/bar"));
241+
self::assertSame('/v4/test/<PREFIXED-ID>/bar/<PREFIXED-ID>/', Uri::sanitize("/v4/test/{$prefixedUuid}/bar/{$prefixedUuid}/"));
228242

229-
// Testes com UUID não-hexadecimal
230-
self::assertSame('/v2/test/<PREFIXED-UUID>', Uri::sanitize("/v2/test/{$userUuid}"));
231-
self::assertSame('/v3/test/<PREFIXED-UUID>/bar', Uri::sanitize("/v3/test/{$userUuid}/bar"));
243+
// Testes com UUIDs prefixados estáticos
244+
self::assertSame('/v2/test/<PREFIXED-ID>', Uri::sanitize("/v2/test/{$billUuid}"));
245+
self::assertSame('/v3/test/<PREFIXED-ID>/bar', Uri::sanitize("/v3/test/{$billUuid}/bar"));
246+
self::assertSame('/v4/test/<PREFIXED-ID>/bar/<PREFIXED-ID>/', Uri::sanitize("/v4/test/{$billUuid}/bar/{$billUuid}/"));
232247

233-
// Testes com prefixo composto
234-
self::assertSame('/v2/test/<PREFIXED-UUID>', Uri::sanitize("/v2/test/{$companyUuid}"));
235-
self::assertSame('/v3/test/<PREFIXED-UUID>/bar', Uri::sanitize("/v3/test/{$companyUuid}/bar"));
248+
// Testes com IDs ECOSYSTEM estáticos
249+
self::assertSame('/v5/test/<PREFIXED-ID>', Uri::sanitize("/v5/test/{$ecosystemId}"));
250+
self::assertSame('/v6/test/<PREFIXED-ID>/details', Uri::sanitize("/v6/test/{$ecosystemId}/details"));
251+
self::assertSame('/v7/test/<PREFIXED-ID>/<PREFIXED-ID>', Uri::sanitize("/v7/test/{$ecosystemId}/{$ecosystemId2}"));
236252

237-
// Testes com múltiplos UUIDs (randômicos + estáticos)
238-
self::assertSame('/v5/test/<PREFIXED-UUID>/<PREFIXED-UUID>', Uri::sanitize("/v5/test/{$prefixedUuid}/{$billUuid}"));
239-
self::assertSame('/v6/test/<PREFIXED-UUID>/<PREFIXED-UUID>/', Uri::sanitize("/v6/test/{$billUuid}/{$prefixedUuid}/"));
240-
self::assertSame('/v7/test/<PREFIXED-UUID>/<PREFIXED-UUID>/<PREFIXED-UUID>', Uri::sanitize("/v7/test/{$prefixedUuid}/{$billUuid}/{$userUuid}"));
241-
self::assertSame('/v8/test/<PREFIXED-UUID>/<PREFIXED-UUID>/<PREFIXED-UUID>/', Uri::sanitize("/v8/test/{$billUuid}/{$userUuid}/{$prefixedUuid}/"));
253+
// Testes com IDs ECOSYSTEM aleatórios
254+
self::assertSame('/v8/test/<PREFIXED-ID>', Uri::sanitize("/v8/test/{$randomEcosystemId}"));
255+
self::assertSame('/v9/test/<PREFIXED-ID>/config', Uri::sanitize("/v9/test/{$randomEcosystemId}/config"));
256+
self::assertSame('/v10/test/<PREFIXED-ID>/<PREFIXED-ID>', Uri::sanitize("/v10/test/{$randomEcosystemId}/{$randomEcosystemId2}"));
242257

243-
// Testes com dois prefixos aleatórios diferentes
244-
self::assertSame('/v9/test/<PREFIXED-UUID>/<PREFIXED-UUID>', Uri::sanitize("/v9/test/{$prefixedUuid}/{$prefixedUuid2}"));
245-
self::assertSame('/v10/test/<PREFIXED-UUID>/<PREFIXED-UUID>/<PREFIXED-UUID>/', Uri::sanitize("/v10/test/{$prefixedUuid}/{$prefixedUuid2}/{$companyUuid}/"));
258+
// Testes mistos: UUIDs prefixados + IDs ECOSYSTEM
259+
self::assertSame('/v11/test/<PREFIXED-ID>/<PREFIXED-ID>', Uri::sanitize("/v11/test/{$prefixedUuid}/{$ecosystemId}"));
260+
self::assertSame('/v12/test/<PREFIXED-ID>/<PREFIXED-ID>/<PREFIXED-ID>', Uri::sanitize("/v12/test/{$billUuid}/{$randomEcosystemId}/{$userUuid}"));
261+
self::assertSame('/v13/test/<PREFIXED-ID>/<PREFIXED-ID>/<PREFIXED-ID>/', Uri::sanitize("/v13/test/{$ecosystemId}/{$prefixedUuid2}/{$randomEcosystemId2}/"));
246262

247263
// Casos edge: diferentes contextos de API
248-
self::assertSame('/users/<PREFIXED-UUID>/profile', Uri::sanitize("/users/{$prefixedUuid}/profile"));
249-
self::assertSame('/api/v1/bills/<PREFIXED-UUID>/details', Uri::sanitize("/api/v1/bills/{$billUuid}/details"));
250-
self::assertSame('/companies/<PREFIXED-UUID>/admin/<PREFIXED-UUID>/settings', Uri::sanitize("/companies/{$prefixedUuid2}/admin/{$prefixedUuid}/settings"));
264+
self::assertSame('/users/<PREFIXED-ID>/profile', Uri::sanitize("/users/{$prefixedUuid}/profile"));
265+
self::assertSame('/api/v1/bills/<PREFIXED-ID>/details', Uri::sanitize("/api/v1/bills/{$billUuid}/details"));
266+
self::assertSame('/ecosystems/<PREFIXED-ID>/platform/<PREFIXED-ID>', Uri::sanitize("/ecosystems/{$randomEcosystemId}/platform/{$randomEcosystemId2}"));
267+
self::assertSame('/companies/<PREFIXED-ID>/admin/<PREFIXED-ID>/settings', Uri::sanitize("/companies/{$prefixedUuid2}/admin/{$ecosystemId}/settings"));
251268

252269
// Teste sem barra final
253-
self::assertSame('/test/<PREFIXED-UUID>', Uri::sanitize("/test/{$prefixedUuid}"));
254-
255-
// Testes com prefixos de diferentes tamanhos
256-
self::assertSame('/short/<PREFIXED-UUID>', Uri::sanitize("/short/{$prefixedUuid}"));
257-
self::assertSame('/long/<PREFIXED-UUID>/path', Uri::sanitize("/long/{$prefixedUuid2}/path"));
270+
self::assertSame('/test/<PREFIXED-ID>', Uri::sanitize("/test/{$prefixedUuid}"));
271+
self::assertSame('/ecosystem/<PREFIXED-ID>', Uri::sanitize("/ecosystem/{$randomEcosystemId}"));
258272
}
259273
}

0 commit comments

Comments
 (0)