Skip to content

Commit 38ba303

Browse files
committed
Test Data: Update unit test to handle ID3 array
1 parent cfc5e2d commit 38ba303

File tree

1 file changed

+25
-266
lines changed

1 file changed

+25
-266
lines changed

tests/phpunit/tests/media/wpAddId3TagData.php

Lines changed: 25 additions & 266 deletions
Original file line numberDiff line numberDiff line change
@@ -16,283 +16,42 @@ public function tear_down() {
1616
}
1717

1818
/**
19-
* Test wp_add_id3_tag_data() with ID3v2 comments.
19+
* Test that wp_add_id3_tag_data handles non-string data without fatal error.
20+
*
21+
* @ticket 63529
2022
*/
21-
public function test_wp_add_id3_tag_data_id3v2_comments() {
23+
public function test_wp_add_id3_tag_data_handles_non_string_data() {
2224
$metadata = array();
23-
$data = array(
24-
'id3v2' => array(
25-
'comments' => array(
26-
'title' => array( 'Test Title' ),
27-
'artist' => array( 'Test Artist' ),
28-
'album' => array( 'Test Album' ),
29-
'year' => array( '2024' ),
30-
'length' => array( '3:45' ), // Should be ignored
31-
),
32-
),
33-
);
34-
35-
wp_add_id3_tag_data( $metadata, $data );
36-
37-
$this->assertEquals( 'Test Title', $metadata['title'] );
38-
$this->assertEquals( 'Test Artist', $metadata['artist'] );
39-
$this->assertEquals( 'Test Album', $metadata['album'] );
40-
$this->assertEquals( '2024', $metadata['year'] );
41-
$this->assertArrayNotHasKey( 'length', $metadata );
42-
}
43-
44-
/**
45-
* Test wp_add_id3_tag_data() with ID3v1 comments.
46-
*/
47-
public function test_wp_add_id3_tag_data_id3v1_comments() {
48-
$metadata = array();
49-
$data = array(
50-
'id3v1' => array(
51-
'comments' => array(
52-
'title' => array( 'Test Title' ),
53-
'artist' => array( 'Test Artist' ),
54-
'album' => array( 'Test Album' ),
55-
),
56-
),
57-
);
58-
59-
wp_add_id3_tag_data( $metadata, $data );
60-
61-
$this->assertEquals( 'Test Title', $metadata['title'] );
62-
$this->assertEquals( 'Test Artist', $metadata['artist'] );
63-
$this->assertEquals( 'Test Album', $metadata['album'] );
64-
}
65-
66-
/**
67-
* Test wp_add_id3_tag_data() with array values.
68-
*/
69-
public function test_wp_add_id3_tag_data_array_values() {
70-
$metadata = array();
71-
$data = array(
72-
'id3v2' => array(
73-
'comments' => array(
74-
'title' => array( 'Part 1', 'Part 2' ),
75-
'artist' => array( 'Artist 1', 'Artist 2' ),
76-
),
77-
),
78-
);
79-
80-
wp_add_id3_tag_data( $metadata, $data );
81-
82-
$this->assertEquals( 'Part 1', $metadata['title'] );
83-
$this->assertEquals( 'Artist 1', $metadata['artist'] );
84-
}
85-
86-
/**
87-
* Test wp_add_id3_tag_data() with APIC image data.
88-
*/
89-
public function test_wp_add_id3_tag_data_apic_image() {
90-
$metadata = array();
91-
$data = array(
92-
'id3v2' => array(
93-
'APIC' => array(
94-
array(
95-
'data' => 'image_data',
96-
'image_mime' => 'image/jpeg',
97-
'image_width' => 800,
98-
'image_height' => 600,
99-
),
100-
),
101-
),
102-
);
103-
104-
wp_add_id3_tag_data( $metadata, $data );
105-
106-
$this->assertArrayHasKey( 'image', $metadata );
107-
$this->assertEquals( 'image_data', $metadata['image']['data'] );
108-
$this->assertEquals( 'image/jpeg', $metadata['image']['mime'] );
109-
$this->assertEquals( 800, $metadata['image']['width'] );
110-
$this->assertEquals( 600, $metadata['image']['height'] );
111-
}
112-
113-
/**
114-
* Test wp_add_id3_tag_data() with comments picture.
115-
*/
116-
public function test_wp_add_id3_tag_data_comments_picture() {
117-
$metadata = array();
118-
$data = array(
119-
'comments' => array(
120-
'picture' => array(
121-
array(
122-
'data' => 'image_data',
123-
'image_mime' => 'image/png',
124-
),
125-
),
126-
),
127-
);
128-
129-
wp_add_id3_tag_data( $metadata, $data );
130-
131-
$this->assertArrayHasKey( 'image', $metadata );
132-
$this->assertEquals( 'image_data', $metadata['image']['data'] );
133-
$this->assertEquals( 'image/png', $metadata['image']['mime'] );
134-
}
135-
136-
/**
137-
* Test wp_add_id3_tag_data() with terms_of_use fix.
138-
*/
139-
public function test_wp_add_id3_tag_data_terms_of_use_fix() {
140-
$metadata = array();
141-
$data = array(
142-
'id3v2' => array(
143-
'comments' => array(
144-
'terms_of_use' => array( 'yright notice. All rights reserved.' ),
145-
),
146-
),
147-
);
148-
149-
wp_add_id3_tag_data( $metadata, $data );
150-
151-
$this->assertEquals( 'Copyright notice. All rights reserved.', $metadata['terms_of_use'] );
152-
}
153-
154-
/**
155-
* Test wp_add_id3_tag_data() with HTML sanitization.
156-
*/
157-
public function test_wp_add_id3_tag_data_html_sanitization() {
158-
$metadata = array();
159-
$data = array(
160-
'id3v2' => array(
161-
'comments' => array(
162-
'title' => array( '<script>alert("XSS")</script>Test Title' ),
163-
'artist' => array( '<a href="javascript:alert(1)">Test Artist</a>' ),
164-
'lyric' => array( '<div class="test"><p>Test lyric</p><script>alert("test");</script><span>More text</span></div>' ),
165-
),
166-
),
167-
);
168-
169-
wp_add_id3_tag_data( $metadata, $data );
170-
171-
// <script> tags are removed, but their content is not kept; only allowed tags and their content remain.
172-
$this->assertEquals( 'alert("XSS")Test Title', $metadata['title'] );
173-
// <a> tags are allowed, but javascript: URLs are stripped from href, so only <a> remains.
174-
$this->assertEquals( '<a href="alert(1)">Test Artist</a>', $metadata['artist'] );
175-
$this->assertEquals( '<div class="test"><p>Test lyric</p>alert("test");<span>More text</span></div>', $metadata['lyric'] );
176-
}
177-
178-
/**
179-
* Test wp_add_id3_tag_data() with empty arrays.
180-
*/
181-
public function test_wp_add_id3_tag_data_empty_arrays() {
182-
$metadata = array();
183-
$data = array(
184-
'id3v2' => array(
185-
'comments' => array(
186-
'title' => array(),
187-
'artist' => array(),
188-
),
189-
),
190-
);
191-
192-
wp_add_id3_tag_data( $metadata, $data );
193-
194-
$this->assertArrayNotHasKey( 'title', $metadata );
195-
$this->assertArrayNotHasKey( 'artist', $metadata );
196-
}
19725

198-
/**
199-
* Test wp_add_id3_tag_data() with special characters.
200-
*/
201-
public function test_wp_add_id3_tag_data_special_characters() {
202-
$metadata = array();
203-
$data = array(
26+
// Simulate ID3 data with array values that cause wp_kses_post to fail
27+
$data = array(
20428
'id3v2' => array(
20529
'comments' => array(
206-
'title' => array( 'Special chars: é, ñ, 漢字, 😀' ),
207-
'artist' => array( 'Artist with & special chars' ),
208-
),
209-
),
210-
);
211-
212-
wp_add_id3_tag_data( $metadata, $data );
213-
214-
$this->assertEquals( 'Special chars: é, ñ, 漢字, 😀', $metadata['title'] );
215-
$this->assertEquals( 'Artist with &amp; special chars', $metadata['artist'] );
216-
}
217-
218-
/**
219-
* Test wp_add_id3_tag_data() with multiple APIC images.
220-
*/
221-
public function test_wp_add_id3_tag_data_multiple_apic() {
222-
$metadata = array();
223-
$data = array(
224-
'id3v2' => array(
225-
'APIC' => array(
226-
array(
227-
'data' => 'front_cover_data',
228-
'image_mime' => 'image/jpeg',
229-
'image_width' => 800,
230-
'image_height' => 600,
231-
),
232-
array(
233-
'data' => 'back_cover_data',
234-
'image_mime' => 'image/png',
235-
'image_width' => 400,
236-
'image_height' => 300,
30+
'artist' => array( 'The Northern Lights Ensemble' ),
31+
'album' => array( 'Horizons and Beyond' ),
32+
'title' => array( 'Aurora Rising' ),
33+
'involved_people' => array(
34+
array(
35+
'role' => 'Mastered by Lead Audio Engineer',
36+
'name' => 'Emma Clarke',
37+
),
38+
array(
39+
'role' => 'Mixed by Senior Sound Designer',
40+
'name' => 'Daniel Perez',
41+
),
23742
),
23843
),
23944
),
24045
);
24146

47+
// This should not cause a fatal error when wp_kses_post receives array values
24248
wp_add_id3_tag_data( $metadata, $data );
24349

244-
$this->assertArrayHasKey( 'image', $metadata );
245-
$this->assertEquals( 'front_cover_data', $metadata['image']['data'] );
246-
$this->assertEquals( 'image/jpeg', $metadata['image']['mime'] );
247-
$this->assertEquals( 800, $metadata['image']['width'] );
248-
$this->assertEquals( 600, $metadata['image']['height'] );
249-
}
250-
251-
/**
252-
* Test wp_add_id3_tag_data() with very long values.
253-
*/
254-
public function test_wp_add_id3_tag_data_long_values() {
255-
$metadata = array();
256-
$long_title = str_repeat( 'a', 1000 );
257-
$data = array(
258-
'id3v2' => array(
259-
'comments' => array(
260-
'title' => array( $long_title ),
261-
'artist' => array( str_repeat( 'b', 500 ) ),
262-
),
263-
),
264-
);
265-
266-
wp_add_id3_tag_data( $metadata, $data );
267-
268-
$this->assertEquals( $long_title, $metadata['title'] );
269-
$this->assertEquals( str_repeat( 'b', 500 ), $metadata['artist'] );
270-
}
271-
272-
/**
273-
* Test wp_add_id3_tag_data() with different character encodings.
274-
*/
275-
public function test_wp_add_id3_tag_data_different_encodings() {
276-
$metadata = array();
277-
$data = array(
278-
'id3v2' => array(
279-
'comments' => array(
280-
'title' => array( 'Title with UTF-8: é, ñ, 漢字' ),
281-
'artist' => array( 'Artist with ISO-8859-1: é, ñ' ),
282-
),
283-
'encoding' => 'UTF-8',
284-
),
285-
'id3v1' => array(
286-
'comments' => array(
287-
'title' => array( 'Title with ISO-8859-1: é, ñ' ),
288-
),
289-
'encoding' => 'ISO-8859-1',
290-
),
291-
);
292-
293-
wp_add_id3_tag_data( $metadata, $data );
294-
295-
$this->assertEquals( 'Title with UTF-8: é, ñ, 漢字', $metadata['title'] );
296-
$this->assertEquals( 'Artist with ISO-8859-1: é, ñ', $metadata['artist'] );
50+
// Verify the function handled the array data gracefully
51+
$this->assertIsArray( $metadata );
52+
$this->assertArrayHasKey( 'artist', $metadata );
53+
$this->assertArrayHasKey( 'album', $metadata );
54+
$this->assertArrayHasKey( 'title', $metadata );
55+
$this->assertArrayHasKey( 'involved_people', $metadata );
29756
}
29857
}

0 commit comments

Comments
 (0)