From 94ed0fa1e26f233d4f575998136e8442e0541dfa Mon Sep 17 00:00:00 2001 From: Andrey Helldar Date: Tue, 31 Mar 2026 17:07:36 +0300 Subject: [PATCH] Split tests --- tests/Unit/Request/CustomTest.php | 4 ++-- tests/Unit/Request/IpTest.php | 34 ++++++++++++++++++++++++------ tests/Unit/Request/TrackIdTest.php | 26 ++++++++++++++++++----- tests/Unit/Request/UserIdTest.php | 21 +++++++++++++----- 4 files changed, 66 insertions(+), 19 deletions(-) diff --git a/tests/Unit/Request/CustomTest.php b/tests/Unit/Request/CustomTest.php index 7237257..48fd490 100644 --- a/tests/Unit/Request/CustomTest.php +++ b/tests/Unit/Request/CustomTest.php @@ -16,7 +16,7 @@ $telemetry->custom($headerName, function (Request $req) { expect($req)->toBeInstanceOf(Request::class); - return 1234; // will be cast to string by TelemetryRequest::set + return 1234; }); expect($request->headers->get($headerName))->toBe('1234'); @@ -32,7 +32,7 @@ $telemetry = new TrackerRequest($request, $header); $telemetry->custom($headerName, function () use (&$called) { - $called = true; // must remain false if existing header is used + $called = true; return 'should-not-be-used'; }); diff --git a/tests/Unit/Request/IpTest.php b/tests/Unit/Request/IpTest.php index 1c0f337..0815eef 100644 --- a/tests/Unit/Request/IpTest.php +++ b/tests/Unit/Request/IpTest.php @@ -5,30 +5,50 @@ use DragonCode\RequestTracker\TrackerHeader; use DragonCode\RequestTracker\TrackerRequest; -it('gets ip with correct precedence and sets header via ip()', function () { +test('If telemetry header exists, it wins', function () { $header = new TrackerHeader; - // 1) If telemetry header exists, it wins $request = makeRequest([$header->ip => '203.0.113.10']); $telemetry = new TrackerRequest($request, $header); + expect($telemetry->getIp())->toBe('203.0.113.10'); +}); + +test('Else HTTP_X_REAL_IP (non-standard header name checked by the class)', function () { + $header = new TrackerHeader; - // 2) Else HTTP_X_REAL_IP (non-standard header name checked by the class) $request = makeRequest(); $request->headers->set('HTTP_X_REAL_IP', '198.51.100.20'); $telemetry = new TrackerRequest($request, $header); + expect($telemetry->getIp())->toBe('198.51.100.20'); +}); + +test('Else client ip (REMOTE_ADDR)', function () { + $header = new TrackerHeader; - // 3) Else client ip (REMOTE_ADDR) $request = makeRequest([], ['REMOTE_ADDR' => '192.0.2.30']); $telemetry = new TrackerRequest($request, $header); + expect($telemetry->getIp())->toBe('192.0.2.30'); +}); - // 4) ip() without argument sets header from getIp() +test('ip() without argument sets header from getIp()', function () { + $header = new TrackerHeader; + + $request = makeRequest(); + $telemetry = new TrackerRequest($request, $header); $telemetry->ip(); - expect($request->headers->get($header->ip))->toBe('192.0.2.30'); - // 5) ip() with value overrides and sets header + expect($request->headers->get($header->ip))->toBe('127.0.0.1'); +}); + +test('ip() with value overrides and sets header', function () { + $header = new TrackerHeader; + + $request = makeRequest(); + $telemetry = new TrackerRequest($request, $header); $telemetry->ip('10.0.0.1'); + expect($request->headers->get($header->ip))->toBe('10.0.0.1'); }); diff --git a/tests/Unit/Request/TrackIdTest.php b/tests/Unit/Request/TrackIdTest.php index 0c48c8b..b2fe06c 100644 --- a/tests/Unit/Request/TrackIdTest.php +++ b/tests/Unit/Request/TrackIdTest.php @@ -6,27 +6,43 @@ use DragonCode\RequestTracker\TrackerRequest; use Ramsey\Uuid\Uuid; -it('gets or sets trace id, generating a UUID v4 when absent', function () { +test('If header exists, return it', function () { $header = new TrackerHeader; - // 1) If header exists, return it $request = makeRequest([$header->traceId => 'trace-123']); $telemetry = new TrackerRequest($request, $header); + expect($telemetry->getTraceId())->toBe('trace-123'); +}); + +test('When absent, generate UUID', function () { + $header = new TrackerHeader; - // 2) When absent, generate UUID v4 $request = makeRequest(); $telemetry = new TrackerRequest($request, $header); $generated = $telemetry->getTraceId(); + expect(Uuid::isValid($generated))->toBeTrue() ->and(Uuid::fromString($generated)->getVersion())->toBe(7); +}); + +test('traceId() without param sets header using getTraceId()', function () { + $header = new TrackerHeader; - // 3) traceId() without param sets header using getTraceId() + $request = makeRequest(); + $telemetry = new TrackerRequest($request, $header); $telemetry->traceId(); + expect($request->headers->has($header->traceId))->toBeTrue() ->and(Uuid::isValid($request->headers->get($header->traceId)))->toBeTrue(); +}); + +test('traceId() with explicit value sets header', function () { + $header = new TrackerHeader; - // 4) traceId() with explicit value sets header + $request = makeRequest(); + $telemetry = new TrackerRequest($request, $header); $telemetry->traceId('manual-id'); + expect($request->headers->get($header->traceId))->toBe('manual-id'); }); diff --git a/tests/Unit/Request/UserIdTest.php b/tests/Unit/Request/UserIdTest.php index 3bda6bb..73ff3e5 100644 --- a/tests/Unit/Request/UserIdTest.php +++ b/tests/Unit/Request/UserIdTest.php @@ -5,30 +5,41 @@ use DragonCode\RequestTracker\TrackerHeader; use DragonCode\RequestTracker\TrackerRequest; -it('sets and gets user id with string and int, falling back to existing header or 0', function () { +test('Explicit string', function () { $header = new TrackerHeader; - // 1) Explicit string $request = makeRequest(); $telemetry = new TrackerRequest($request, $header); $telemetry->userId('42'); + expect($request->headers->get($header->userId))->toBe('42') ->and($telemetry->getUserId())->toBe('42'); +}); + +test('Explicit int should be cast to string', function () { + $header = new TrackerHeader; - // 2) Explicit int should be cast to string $request = makeRequest(); $telemetry = new TrackerRequest($request, $header); $telemetry->userId(7); + expect($request->headers->get($header->userId))->toBe('7'); +}); + +test('Fallback to existing header when null', function () { + $header = new TrackerHeader; - // 3) Fallback to existing header when null $request = makeRequest([$header->userId => '555']); $telemetry = new TrackerRequest($request, $header); $telemetry->userId(null); + expect($request->headers->get($header->userId))->toBe('555') ->and($telemetry->getUserId())->toBe('555'); +}); + +test('getUserId() returns 0 when nothing present', function () { + $header = new TrackerHeader; - // 4) getUserId() returns '0' when nothing present $request = makeRequest(); $telemetry = new TrackerRequest($request, $header); expect($telemetry->getUserId())->toBeNull();