Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions tests/Unit/Request/CustomTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand All @@ -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';
});
Expand Down
34 changes: 27 additions & 7 deletions tests/Unit/Request/IpTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
});
26 changes: 21 additions & 5 deletions tests/Unit/Request/TrackIdTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
});
21 changes: 16 additions & 5 deletions tests/Unit/Request/UserIdTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down