resolve($message)); } #[Test] public function itReadsTenantIdsFromValueObjects(): void { $resolver = new TenantMessageTenantIdResolver(); $message = new readonly class(TenantId::fromString('b2c3d4e5-f6a7-8901-bcde-f12345678901')) { public function __construct( public TenantId $tenantId, ) { } }; self::assertSame('b2c3d4e5-f6a7-8901-bcde-f12345678901', $resolver->resolve($message)); } #[Test] public function itReturnsNullWhenTheMessageIsNotTenantScoped(): void { $resolver = new TenantMessageTenantIdResolver(); $message = new readonly class('') { public function __construct( public string $batchId, ) { } }; self::assertNull($resolver->resolve($message)); } }