Multisite: Add initial tests for `WP_MS_Sites_List_Table`

Different tests are used for subdomain and subdirectory installs as domain and path are searched differently for each. Only trailing wildcard searches are tested because leading wildcards are not yet supported.

See #36675.


git-svn-id: https://develop.svn.wordpress.org/trunk@37633 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Jeremy Felt 2016-06-03 14:38:01 +00:00
parent e7bbb482d6
commit 91859d2098
1 changed files with 187 additions and 0 deletions

View File

@ -0,0 +1,187 @@
<?php
if ( is_multisite() ) :
/**
* @group admin
* @group network-admin
*/
class Tests_WP_MS_Sites_List_Table extends WP_UnitTestCase {
protected static $site_ids;
/**
* @var WP_MS_Sites_List_Table
*/
var $table = false;
function setUp() {
parent::setUp();
$this->table = _get_list_table( 'WP_MS_Sites_List_Table' );
}
public static function wpSetUpBeforeClass( $factory ) {
self::$site_ids = array(
'wordpress.org/' => array( 'domain' => 'wordpress.org', 'path' => '/' ),
'wordpress.org/foo/' => array( 'domain' => 'wordpress.org', 'path' => '/foo/' ),
'wordpress.org/foo/bar/' => array( 'domain' => 'wordpress.org', 'path' => '/foo/bar/' ),
'wordpress.org/afoo/' => array( 'domain' => 'wordpress.org', 'path' => '/afoo/' ),
'make.wordpress.org/' => array( 'domain' => 'make.wordpress.org', 'path' => '/' ),
'make.wordpress.org/foo/' => array( 'domain' => 'make.wordpress.org', 'path' => '/foo/' ),
'www.w.org/' => array( 'domain' => 'www.w.org', 'path' => '/' ),
'www.w.org/foo/' => array( 'domain' => 'www.w.org', 'path' => '/foo/' ),
'www.w.org/foo/bar/' => array( 'domain' => 'www.w.org', 'path' => '/foo/bar/' ),
'test.example.org/' => array( 'domain' => 'test.example.org', 'path' => '/' ),
'test2.example.org/' => array( 'domain' => 'test2.example.org', 'path' => '/' ),
'test3.example.org/zig/' => array( 'domain' => 'test3.example.org', 'path' => '/zig/' ),
'atest.example.org/' => array( 'domain' => 'atest.example.org', 'path' => '/' ),
);
foreach ( self::$site_ids as &$id ) {
$id = $factory->blog->create( $id );
}
unset( $id );
}
public static function wpTearDownAfterClass() {
foreach ( self::$site_ids as $site_id ) {
wpmu_delete_blog( $site_id, true );
}
}
public function test_ms_sites_list_table_default_items() {
$this->table->prepare_items();
$items = wp_list_pluck( $this->table->items, 'blog_id' );
$items = array_map( 'intval', $items );
$this->assertEqualSets( array( 1 ) + self::$site_ids, $items );
}
public function test_ms_sites_list_table_subdirectory_path_search_items() {
if ( is_subdomain_install() ) {
$this->markTestSkipped( 'Path search is not available for subdomain configurations.' );
}
$_REQUEST['s'] = 'foo';
$this->table->prepare_items();
$items = wp_list_pluck( $this->table->items, 'blog_id' );
$items = array_map( 'intval', $items );
unset( $_REQUEST['s'] );
$expected = array(
self::$site_ids['wordpress.org/foo/'],
self::$site_ids['make.wordpress.org/foo/'],
self::$site_ids['www.w.org/foo/'],
);
$this->assertEqualSets( $expected, $items );
}
public function test_ms_sites_list_table_subdirectory_multiple_path_search_items() {
if ( is_subdomain_install() ) {
$this->markTestSkipped( 'Path search is not available for subdomain configurations.' );
}
$_REQUEST['s'] = 'foo/bar';
$this->table->prepare_items();
$items = wp_list_pluck( $this->table->items, 'blog_id' );
$items = array_map( 'intval', $items );
unset( $_REQUEST['s'] );
$expected = array(
self::$site_ids['wordpress.org/foo/bar/'],
self::$site_ids['www.w.org/foo/bar/'],
);
$this->assertEqualSets( $expected, $items );
}
public function test_ms_sites_list_table_invalid_path_search_items() {
$_REQUEST['s'] = 'foobar';
$this->table->prepare_items();
$items = wp_list_pluck( $this->table->items, 'blog_id' );
$items = array_map( 'intval', $items );
unset( $_REQUEST['s'] );
$this->assertEmpty( $items );
}
public function test_ms_sites_list_table_subdomain_domain_search_items() {
if ( ! is_subdomain_install() ) {
$this->markTestSkipped( 'Domain search is not available for subdirectory configurations.' );
}
$_REQUEST['s'] = 'test';
$this->table->prepare_items();
$items = wp_list_pluck( $this->table->items, 'blog_id' );
$items = array_map( 'intval', $items );
unset( $_REQUEST['s'] );
$expected = array(
self::$site_ids['test.example.org/'],
);
$this->assertEqualSets( $expected, $items );
}
public function test_ms_sites_list_table_subdomain_domain_search_items_with_trailing_wildcard() {
if ( ! is_subdomain_install() ) {
$this->markTestSkipped( 'Domain search is not available for subdirectory configurations.' );
}
$_REQUEST['s'] = 'test*';
$this->table->prepare_items();
$items = wp_list_pluck( $this->table->items, 'blog_id' );
$items = array_map( 'intval', $items );
unset( $_REQUEST['s'] );
$expected = array(
self::$site_ids['test.example.org/'],
self::$site_ids['test2.example.org/'],
self::$site_ids['test3.example.org/zig/'],
);
$this->assertEqualSets( $expected, $items );
}
public function test_ms_sites_list_table_subdirectory_path_search_items_with_trailing_wildcard() {
if ( is_subdomain_install() ) {
$this->markTestSkipped( 'Path search is not available for subdomain configurations.' );
}
$_REQUEST['s'] = 'fo*';
$this->table->prepare_items();
$items = wp_list_pluck( $this->table->items, 'blog_id' );
$items = array_map( 'intval', $items );
unset( $_REQUEST['s'] );
$expected = array(
self::$site_ids['wordpress.org/foo/'],
self::$site_ids['wordpress.org/foo/bar/'],
self::$site_ids['make.wordpress.org/foo/'],
self::$site_ids['www.w.org/foo/'],
self::$site_ids['www.w.org/foo/bar/'],
);
$this->assertEqualSets( $expected, $items );
}
}
endif;