Skip to content

Commit a85a203

Browse files
Split TelemetryRequest tests into dedicated files for better organization and added new test cases for custom header, IP, user ID, track ID, and request retrieval behavior.
1 parent a9ce1e3 commit a85a203

File tree

8 files changed

+164
-93
lines changed

8 files changed

+164
-93
lines changed

tests/Helpers/request.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
function makeRequest(array $headers = [], array $server = []): Request
88
{
99
$serverFromHeaders = [];
10+
1011
foreach ($headers as $key => $value) {
1112
$serverKey = 'HTTP_' . str_replace('-', '_', strtoupper($key));
1213

tests/Unit/CustomTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
// Custom tests have been moved to tests/Unit/Request/CustomTest.php.

tests/Unit/Request/CustomTest.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use DragonCode\Telemetry\TelemetryHeader;
6+
use DragonCode\Telemetry\TelemetryRequest;
7+
use Symfony\Component\HttpFoundation\Request;
8+
9+
it('sets header from callback when header is absent and casts ints to strings', function () {
10+
$headerName = 'Some-Header';
11+
12+
$request = makeRequest();
13+
$header = new TelemetryHeader;
14+
$telemetry = new TelemetryRequest($request, $header);
15+
16+
$telemetry->custom($headerName, function (Request $req) {
17+
expect($req)->toBeInstanceOf(Request::class);
18+
19+
return 1234; // will be cast to string by TelemetryRequest::set
20+
});
21+
22+
expect($request->headers->get($headerName))->toBe('1234');
23+
});
24+
25+
it('preserves existing header and does not call the callback when header is present', function () {
26+
$headerName = 'Some-Header';
27+
28+
$request = makeRequest([$headerName => 'qwerty']);
29+
30+
$called = false;
31+
$header = new TelemetryHeader;
32+
$telemetry = new TelemetryRequest($request, $header);
33+
34+
$telemetry->custom($headerName, function () use (&$called) {
35+
$called = true; // must remain false if existing header is used
36+
37+
return 'should-not-be-used';
38+
});
39+
40+
expect($called)->toBeFalse()
41+
->and($request->headers->get($headerName))->toBe('qwerty');
42+
});
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use DragonCode\Telemetry\TelemetryHeader;
6+
use DragonCode\Telemetry\TelemetryRequest;
7+
8+
it('returns the same Request instance via getRequest()', function () {
9+
$header = new TelemetryHeader;
10+
$request = makeRequest();
11+
$telemetry = new TelemetryRequest($request, $header);
12+
13+
expect($telemetry->getRequest())->toBe($request);
14+
});

tests/Unit/Request/IpTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use DragonCode\Telemetry\TelemetryHeader;
6+
use DragonCode\Telemetry\TelemetryRequest;
7+
8+
it('gets ip with correct precedence and sets header via ip()', function () {
9+
$header = new TelemetryHeader;
10+
11+
// 1) If telemetry header exists, it wins
12+
$request = makeRequest([$header->ip => '203.0.113.10']);
13+
$telemetry = new TelemetryRequest($request, $header);
14+
expect($telemetry->getIp())->toBe('203.0.113.10');
15+
16+
// 2) Else HTTP_X_REAL_IP (non-standard header name checked by the class)
17+
$request = makeRequest();
18+
$request->headers->set('HTTP_X_REAL_IP', '198.51.100.20');
19+
$telemetry = new TelemetryRequest($request, $header);
20+
expect($telemetry->getIp())->toBe('198.51.100.20');
21+
22+
// 3) Else client ip (REMOTE_ADDR)
23+
$request = makeRequest([], ['REMOTE_ADDR' => '192.0.2.30']);
24+
$telemetry = new TelemetryRequest($request, $header);
25+
expect($telemetry->getIp())->toBe('192.0.2.30');
26+
27+
// 4) ip() without argument sets header from getIp()
28+
$telemetry->ip();
29+
expect($request->headers->get($header->ip))->toBe('192.0.2.30');
30+
31+
// 5) ip() with value overrides and sets header
32+
$telemetry->ip('10.0.0.1');
33+
expect($request->headers->get($header->ip))->toBe('10.0.0.1');
34+
});

tests/Unit/Request/TrackIdTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use DragonCode\Telemetry\TelemetryHeader;
6+
use DragonCode\Telemetry\TelemetryRequest;
7+
use Ramsey\Uuid\Uuid;
8+
9+
it('gets or sets track id, generating a UUID v4 when absent', function () {
10+
$header = new TelemetryHeader;
11+
12+
// 1) If header exists, return it
13+
$request = makeRequest([$header->trackId => 'track-123']);
14+
$telemetry = new TelemetryRequest($request, $header);
15+
expect($telemetry->getTrackId())->toBe('track-123');
16+
17+
// 2) When absent, generate UUID v4
18+
$request = makeRequest();
19+
$telemetry = new TelemetryRequest($request, $header);
20+
$generated = $telemetry->getTrackId();
21+
expect(Uuid::isValid($generated))->toBeTrue()
22+
->and(Uuid::fromString($generated)->getVersion())->toBe(4);
23+
24+
// 3) trackId() without param sets header using getTrackId()
25+
$telemetry->trackId();
26+
expect($request->headers->has($header->trackId))->toBeTrue()
27+
->and(Uuid::isValid($request->headers->get($header->trackId)))->toBeTrue();
28+
29+
// 4) trackId() with explicit value sets header
30+
$telemetry->trackId('manual-id');
31+
expect($request->headers->get($header->trackId))->toBe('manual-id');
32+
});

tests/Unit/Request/UserIdTest.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use DragonCode\Telemetry\TelemetryHeader;
6+
use DragonCode\Telemetry\TelemetryRequest;
7+
8+
it('sets and gets user id with string and int, falling back to existing header or 0', function () {
9+
$header = new TelemetryHeader;
10+
11+
// 1) Explicit string
12+
$request = makeRequest();
13+
$telemetry = new TelemetryRequest($request, $header);
14+
$telemetry->userId('42');
15+
expect($request->headers->get($header->userId))->toBe('42')
16+
->and($telemetry->getUserId())->toBe('42');
17+
18+
// 2) Explicit int should be cast to string
19+
$request = makeRequest();
20+
$telemetry = new TelemetryRequest($request, $header);
21+
$telemetry->userId(7);
22+
expect($request->headers->get($header->userId))->toBe('7');
23+
24+
// 3) Fallback to existing header when null
25+
$request = makeRequest([$header->userId => '555']);
26+
$telemetry = new TelemetryRequest($request, $header);
27+
$telemetry->userId(null);
28+
expect($request->headers->get($header->userId))->toBe('555')
29+
->and($telemetry->getUserId())->toBe('555');
30+
31+
// 4) getUserId() returns '0' when nothing present
32+
$request = makeRequest();
33+
$telemetry = new TelemetryRequest($request, $header);
34+
expect($telemetry->getUserId())->toBe('0');
35+
});

tests/Unit/RequestTest.php

Lines changed: 1 addition & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -2,96 +2,4 @@
22

33
declare(strict_types=1);
44

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

Comments
 (0)