isEmpty())->toBeTrue() ->and($details->getValues())->toBe([]); }); it('stores and retrieves string map entries correctly', function (): void { // GIVEN $map = [ 'is_active' => 'false', 'count' => '42', 'role' => 'admin', ]; // WHEN $details = new SecurityAuditLogDetails($map); // THEN expect($details->isEmpty())->toBeFalse() ->and($details->get('is_active'))->toBe('false') ->and($details->get('count'))->toBe('42') ->and($details->get('role'))->toBe('admin') ->and($details->get('non_existent'))->toBeNull() ->and($details->getValues())->toBe($map); }); it('handles equality correctly', function (): void { // GIVEN $details1 = new SecurityAuditLogDetails(['key' => 'value']); $details2 = new SecurityAuditLogDetails(['key' => 'value']); $details3 = new SecurityAuditLogDetails(['key' => 'other']); // THEN expect($details1->equals($details2))->toBeTrue() ->and($details1->equals($details3))->toBeFalse() ->and($details1->equals('key=value'))->toBeFalse(); }); });