TenantAtlas/tests/Unit/Support/Diff/DiffRowTest.php
2026-03-14 13:31:24 +01:00

45 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
use App\Support\Diff\DiffRow;
use App\Support\Diff\DiffRowStatus;
it('requires a non-empty key and label', function (): void {
expect(fn (): DiffRow => new DiffRow(
key: '',
label: 'Display name',
status: DiffRowStatus::Changed,
))->toThrow(\InvalidArgumentException::class, 'DiffRow key must be a non-empty string.');
expect(fn (): DiffRow => new DiffRow(
key: 'display_name',
label: ' ',
status: DiffRowStatus::Changed,
))->toThrow(\InvalidArgumentException::class, 'DiffRow label must be a non-empty string.');
});
it('stores optional list fragments and meta for rendering', function (): void {
$row = new DiffRow(
key: 'assignments',
label: 'Assignments',
status: DiffRowStatus::Changed,
oldValue: ['old-a', 'shared'],
newValue: ['new-b', 'shared'],
isListLike: true,
addedItems: ['new-b'],
removedItems: ['old-a'],
unchangedItems: ['shared'],
meta: ['hint' => 'policy level'],
);
expect($row->key)->toBe('assignments')
->and($row->label)->toBe('Assignments')
->and($row->status)->toBe(DiffRowStatus::Changed)
->and($row->isListLike)->toBeTrue()
->and($row->addedItems)->toBe(['new-b'])
->and($row->removedItems)->toBe(['old-a'])
->and($row->unchangedItems)->toBe(['shared'])
->and($row->meta)->toBe(['hint' => 'policy level']);
});