@@ -407,23 +407,83 @@ public function test_feed_canonical_with_not_exists_query() {
407407 }
408408
409409 /**
410+ * Test canonical redirects for attachment pages when the option is disabled.
411+ *
410412 * @ticket 57913
413+ * @ticket 59866
414+ *
415+ * @dataProvider data_canonical_attachment_page_redirect_with_option_disabled
411416 */
412- public function test_canonical_attachment_page_redirect_with_option_disabled () {
417+ public function test_canonical_attachment_page_redirect_with_option_disabled ( $ expected , $ user = null , $ parent_post_status = '' ) {
413418 add_filter ( 'pre_option_wp_attachment_pages_enabled ' , '__return_false ' );
414419
420+ if ( '' !== $ parent_post_status ) {
421+ $ parent_post_id = self ::factory ()->post ->create (
422+ array (
423+ 'post_status ' => $ parent_post_status ,
424+ )
425+ );
426+ } else {
427+ $ parent_post_id = 0 ;
428+ }
429+
415430 $ filename = DIR_TESTDATA . '/images/test-image.jpg ' ;
416431 $ contents = file_get_contents ( $ filename );
417432 $ upload = wp_upload_bits ( wp_basename ( $ filename ), null , $ contents );
418433
419- $ attachment_id = $ this ->_make_attachment ( $ upload );
434+ $ attachment_id = $ this ->_make_attachment ( $ upload , $ parent_post_id );
435+ $ attachment_url = wp_get_attachment_url ( $ attachment_id );
420436 $ attachment_page = get_permalink ( $ attachment_id );
421437
438+ // Set as anonymous/logged out user.
439+ if ( null !== $ user ) {
440+ wp_set_current_user ( $ user );
441+ }
442+
422443 $ this ->go_to ( $ attachment_page );
423444
424- $ url = redirect_canonical ( $ attachment_page , false );
425- $ expected = wp_get_attachment_url ( $ attachment_id );
445+ $ url = redirect_canonical ( $ attachment_page , false );
446+ if ( is_string ( $ expected ) ) {
447+ $ expected = str_replace ( '%%attachment_url%% ' , $ attachment_url , $ expected );
448+ }
426449
427450 $ this ->assertSame ( $ expected , $ url );
428451 }
452+
453+ /**
454+ * Data provider for test_canonical_attachment_page_redirect_with_option_disabled().
455+ *
456+ * @return array[]
457+ */
458+ public function data_canonical_attachment_page_redirect_with_option_disabled () {
459+ return array (
460+ 'logged out user, no parent ' => array (
461+ '%%attachment_url%% ' ,
462+ 0 ,
463+ ),
464+ 'logged in user, no parent ' => array (
465+ '%%attachment_url%% ' ,
466+ ),
467+ 'logged out user, private parent ' => array (
468+ null ,
469+ 0 ,
470+ 'private ' ,
471+ ),
472+ 'logged in user, private parent ' => array (
473+ '%%attachment_url%% ' ,
474+ null ,
475+ 'private ' ,
476+ ),
477+ 'logged out user, public parent ' => array (
478+ '%%attachment_url%% ' ,
479+ 0 ,
480+ 'publish ' ,
481+ ),
482+ 'logged in user, public parent ' => array (
483+ '%%attachment_url%% ' ,
484+ null ,
485+ 'publish ' ,
486+ ),
487+ );
488+ }
429489}
0 commit comments