toString())->toBe($validUlid); expect((string) $assetId)->toBe($validUlid); }); it('throws exception for invalid ULID format', function () { expect(fn () => AssetId::fromString('invalid-id')) ->toThrow(InvalidArgumentException::class, 'Invalid Asset ID format'); }); it('can generate new AssetId with Clock', function () { $clock = new SystemClock(); $assetId = AssetId::generate($clock); expect($assetId)->toBeInstanceOf(AssetId::class); expect($assetId->toString())->toMatch('/^[0-9A-Z]{26}$/'); }); it('generates unique IDs', function () { $clock = new SystemClock(); $id1 = AssetId::generate($clock); $id2 = AssetId::generate($clock); expect($id1->toString())->not->toBe($id2->toString()); }); it('can compare two AssetIds for equality', function () { $id1 = AssetId::fromString('01ARZ3NDEKTSV4RRFFQ69G5FAV'); $id2 = AssetId::fromString('01ARZ3NDEKTSV4RRFFQ69G5FAV'); $id3 = AssetId::fromString('01ARZ3NDEKTSV4RRFFQ69G5FAW'); expect($id1->equals($id2))->toBeTrue(); expect($id1->equals($id3))->toBeFalse(); }); });