assertSame('https://example.com/photo.jpg', $payload->url); $this->assertNull($payload->token); $this->assertNull($payload->photos); $expectedArray = [ 'url' => 'https://example.com/photo.jpg', 'token' => null, 'photos' => null, ]; $this->assertEquals($expectedArray, $payload->toArray()); } #[Test] public function canBeCreatedWithTokenOnly(): void { $payload = new PhotoAttachmentRequestPayload(token: 'uploaded_token_abc'); $this->assertSame('uploaded_token_abc', $payload->token); $this->assertNull($payload->url); $this->assertNull($payload->photos); $expectedArray = [ 'token' => 'uploaded_token_abc', 'url' => null, 'photos' => null, ]; $this->assertEquals($expectedArray, $payload->toArray()); } #[Test] public function canBeCreatedWithPhotosOnly(): void { $photos = [ new PhotoToken('token_1'), new PhotoToken('token_2'), ]; $payload = new PhotoAttachmentRequestPayload(photos: $photos); $this->assertSame($photos, $payload->photos); $this->assertNull($payload->url); $this->assertNull($payload->token); $expectedArray = [ 'photos' => [ ['token' => 'token_1'], ['token' => 'token_2'], ], 'url' => null, 'token' => null, ]; $this->assertEquals($expectedArray, $payload->toArray()); } #[Test] public function constructorThrowsExceptionForInvalidArguments(): void { $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('Provide one of "url", "token", or "photos" for PhotoAttachmentRequestPayload.'); new PhotoAttachmentRequestPayload(null, null, null); } }