|
2 | 2 |
|
3 | 3 | declare(strict_types=1); |
4 | 4 |
|
5 | | -use DragonCode\Telemetry\TelemetryHeader; |
6 | | -use DragonCode\Telemetry\TelemetryRequest; |
7 | | -use Ramsey\Uuid\Uuid; |
8 | | - |
9 | | -it('sets and gets user id with string and int, falling back to existing header or 0', function () { |
10 | | - $header = new TelemetryHeader; |
11 | | - |
12 | | - // 1) Explicit string |
13 | | - $request = makeRequest(); |
14 | | - $telemetry = new TelemetryRequest($request, $header); |
15 | | - $telemetry->userId('42'); |
16 | | - expect($request->headers->get($header->userId))->toBe('42') |
17 | | - ->and($telemetry->getUserId())->toBe('42'); |
18 | | - |
19 | | - // 2) Explicit int should be cast to string |
20 | | - $request = makeRequest(); |
21 | | - $telemetry = new TelemetryRequest($request, $header); |
22 | | - $telemetry->userId(7); |
23 | | - expect($request->headers->get($header->userId))->toBe('7'); |
24 | | - |
25 | | - // 3) Fallback to existing header when null |
26 | | - $request = makeRequest([$header->userId => '555']); |
27 | | - $telemetry = new TelemetryRequest($request, $header); |
28 | | - $telemetry->userId(null); |
29 | | - expect($request->headers->get($header->userId))->toBe('555') |
30 | | - ->and($telemetry->getUserId())->toBe('555'); |
31 | | - |
32 | | - // 4) getUserId() returns '0' when nothing present |
33 | | - $request = makeRequest(); |
34 | | - $telemetry = new TelemetryRequest($request, $header); |
35 | | - expect($telemetry->getUserId())->toBe('0'); |
36 | | -}); |
37 | | - |
38 | | -it('gets ip with correct precedence and sets header via ip()', function () { |
39 | | - $header = new TelemetryHeader; |
40 | | - |
41 | | - // 1) If telemetry header exists, it wins |
42 | | - $request = makeRequest([$header->ip => '203.0.113.10']); |
43 | | - $telemetry = new TelemetryRequest($request, $header); |
44 | | - expect($telemetry->getIp())->toBe('203.0.113.10'); |
45 | | - |
46 | | - // 2) Else HTTP_X_REAL_IP (non-standard header name checked by the class) |
47 | | - $request = makeRequest(); |
48 | | - $request->headers->set('HTTP_X_REAL_IP', '198.51.100.20'); |
49 | | - $telemetry = new TelemetryRequest($request, $header); |
50 | | - expect($telemetry->getIp())->toBe('198.51.100.20'); |
51 | | - |
52 | | - // 3) Else client ip (REMOTE_ADDR) |
53 | | - $request = makeRequest([], ['REMOTE_ADDR' => '192.0.2.30']); |
54 | | - $telemetry = new TelemetryRequest($request, $header); |
55 | | - expect($telemetry->getIp())->toBe('192.0.2.30'); |
56 | | - |
57 | | - // 4) ip() without argument sets header from getIp() |
58 | | - $telemetry->ip(); |
59 | | - expect($request->headers->get($header->ip))->toBe('192.0.2.30'); |
60 | | - |
61 | | - // 5) ip() with value overrides and sets header |
62 | | - $telemetry->ip('10.0.0.1'); |
63 | | - expect($request->headers->get($header->ip))->toBe('10.0.0.1'); |
64 | | -}); |
65 | | - |
66 | | -it('gets or sets track id, generating a UUID v4 when absent', function () { |
67 | | - $header = new TelemetryHeader; |
68 | | - |
69 | | - // 1) If header exists, return it |
70 | | - $request = makeRequest([$header->trackId => 'track-123']); |
71 | | - $telemetry = new TelemetryRequest($request, $header); |
72 | | - expect($telemetry->getTrackId())->toBe('track-123'); |
73 | | - |
74 | | - // 2) When absent, generate UUID v4 |
75 | | - $request = makeRequest(); |
76 | | - $telemetry = new TelemetryRequest($request, $header); |
77 | | - $generated = $telemetry->getTrackId(); |
78 | | - expect(Uuid::isValid($generated))->toBeTrue() |
79 | | - ->and(Uuid::fromString($generated)->getVersion())->toBe(4); |
80 | | - |
81 | | - // 3) trackId() without param sets header using getTrackId() |
82 | | - $telemetry->trackId(); |
83 | | - expect($request->headers->has($header->trackId))->toBeTrue() |
84 | | - ->and(Uuid::isValid($request->headers->get($header->trackId)))->toBeTrue(); |
85 | | - |
86 | | - // 4) trackId() with explicit value sets header |
87 | | - $telemetry->trackId('manual-id'); |
88 | | - expect($request->headers->get($header->trackId))->toBe('manual-id'); |
89 | | -}); |
90 | | - |
91 | | -it('returns the same Request instance via getRequest()', function () { |
92 | | - $header = new TelemetryHeader; |
93 | | - $request = makeRequest(); |
94 | | - $telemetry = new TelemetryRequest($request, $header); |
95 | | - |
96 | | - expect($telemetry->getRequest())->toBe($request); |
97 | | -}); |
| 5 | +// Tests for TelemetryRequest have been split into grouped files under tests/Unit/Request. |
0 commit comments