fromIds(['b', 'a', 'a', ' ', 1]); $b = $identity->fromIds([1, 'a', 'b']); expect($a['kind'])->toBe('ids'); expect($a['ids_hash'])->toBeString(); expect($a['ids_hash'])->toBe($b['ids_hash']); expect($a['ids_count'])->toBe(3); }); it('produces a stable query_hash regardless of associative key order', function (): void { $identity = new BulkSelectionIdentity; $payloadA = [ 'filters' => [ 'status' => 'active', 'type' => 'policy', ], 'search' => 'abc', ]; $payloadB = [ 'search' => 'abc', 'filters' => [ 'type' => 'policy', 'status' => 'active', ], ]; $a = $identity->fromQuery($payloadA); $b = $identity->fromQuery($payloadB); expect($a['kind'])->toBe('query'); expect($a['query_hash'])->toBeString(); expect($a['query_hash'])->toBe($b['query_hash']); });