<?php

declare(strict_types=1);

use App\Services\Operations\BulkSelectionIdentity;

it('produces a stable ids_hash regardless of order and duplicates', function (): void {
    $identity = new BulkSelectionIdentity;

    $a = $identity->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']);
});
