fix: preserve invalid metadata payloads

This commit is contained in:
Keith Solomon
2026-04-26 14:55:07 -05:00
parent 3b09c3f410
commit 4cfc1036bb
2 changed files with 88 additions and 14 deletions
@@ -71,6 +71,51 @@ class MetadataUrlTransformerTest extends TestCase {
);
}
public function test_it_leaves_invalid_serialized_strings_unchanged(): void {
$transformer = new MetadataUrlTransformer( new UrlTransformer() );
$value = 'a:1:{s:3:"url";s:37:"https://example.test/uploads/hero.jpg";} trailing';
self::assertSame( $value, $transformer->transformValue( $value, $this->mappings() ) );
}
public function test_it_leaves_whitespace_wrapped_serialized_strings_unchanged(): void {
$transformer = new MetadataUrlTransformer( new UrlTransformer() );
// phpcs:ignore -- Test fixture requires native serialized metadata.
$value = ' ' . serialize( array( 'url' => 'https://example.test/uploads/hero.jpg' ) ) . ' ';
self::assertSame( $value, $transformer->transformValue( $value, $this->mappings() ) );
}
public function test_it_preserves_serialized_false_and_null_values(): void {
$transformer = new MetadataUrlTransformer( new UrlTransformer() );
self::assertSame( 'b:0;', $transformer->transformValue( 'b:0;', $this->mappings() ) );
self::assertSame( 'N;', $transformer->transformValue( 'N;', $this->mappings() ) );
}
public function test_it_leaves_serialized_objects_unchanged(): void {
$transformer = new MetadataUrlTransformer( new UrlTransformer() );
$value = 'O:8:"stdClass":1:{s:3:"url";s:28:"https://example.test/inside";}';
self::assertSame( $value, $transformer->transformValue( $value, $this->mappings() ) );
}
public function test_it_leaves_invalid_json_strings_unchanged(): void {
$transformer = new MetadataUrlTransformer( new UrlTransformer() );
$value = '{"url":"https://example.test/missing"';
self::assertSame( $value, $transformer->transformValue( $value, $this->mappings() ) );
}
public function test_it_transforms_nested_json_arrays(): void {
$transformer = new MetadataUrlTransformer( new UrlTransformer() );
self::assertSame(
'[{"url":"https:\/\/staging.example.test\/one"},{"count":2}]',
$transformer->transformValue( '[{"url":"https:\/\/example.test\/one"},{"count":2}]', $this->mappings() )
);
}
public function test_it_transforms_plain_string_metadata(): void {
$transformer = new MetadataUrlTransformer( new UrlTransformer() );