Split and organize multisite unit tests
* Move `ms.php` to `multisite.php` * Create `multisite.php` under directories `option/` and `user/` to better match existing structure. * Create a `multisite/` directory containing `bootstrap.php`, `site.php`, and `network.php` for very multisite specific testing. * Add unit test groups ms-site, ms-user, ms-option, ms-network, and ms-bootstrap. Fixes #29896 git-svn-id: https://develop.svn.wordpress.org/trunk@29916 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
0d58d32462
commit
f0b35fe7d5
72
tests/phpunit/tests/multisite.php
Normal file
72
tests/phpunit/tests/multisite.php
Normal file
@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
if ( is_multisite() ) :
|
||||
|
||||
/**
|
||||
* A set of unit tests for WordPress Multisite
|
||||
*
|
||||
* @group multisite
|
||||
*/
|
||||
class Tests_Multisite extends WP_UnitTestCase {
|
||||
protected $suppress = false;
|
||||
|
||||
function setUp() {
|
||||
global $wpdb;
|
||||
parent::setUp();
|
||||
$this->suppress = $wpdb->suppress_errors();
|
||||
|
||||
$_SERVER['REMOTE_ADDR'] = '';
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
global $wpdb;
|
||||
parent::tearDown();
|
||||
$wpdb->suppress_errors( $this->suppress );
|
||||
}
|
||||
|
||||
function test_wpmu_log_new_registrations() {
|
||||
global $wpdb;
|
||||
|
||||
$user = new WP_User( 1 );
|
||||
$ip = preg_replace( '/[^0-9., ]/', '',$_SERVER['REMOTE_ADDR'] );
|
||||
|
||||
wpmu_log_new_registrations(1,1);
|
||||
|
||||
// currently there is no wrapper function for the registration_log
|
||||
$reg_blog = $wpdb->get_col( "SELECT email FROM {$wpdb->registration_log} WHERE {$wpdb->registration_log}.blog_id = 1 AND IP LIKE '" . $ip . "'" );
|
||||
$this->assertEquals( $user->user_email, $reg_blog[ count( $reg_blog )-1 ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 21570
|
||||
*/
|
||||
function test_aggressiveness_of_is_email_address_unsafe() {
|
||||
update_site_option( 'banned_email_domains', array( 'bar.com', 'foo.co' ) );
|
||||
|
||||
foreach ( array( 'test@bar.com', 'test@foo.bar.com', 'test@foo.co', 'test@subdomain.foo.co' ) as $email_address ) {
|
||||
$this->assertTrue( is_email_address_unsafe( $email_address ), "$email_address should be UNSAFE" );
|
||||
}
|
||||
|
||||
foreach ( array( 'test@foobar.com', 'test@foo-bar.com', 'test@foo.com', 'test@subdomain.foo.com' ) as $email_address ) {
|
||||
$this->assertFalse( is_email_address_unsafe( $email_address ), "$email_address should be SAFE" );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 25046
|
||||
*/
|
||||
function test_case_sensitivity_of_is_email_address_unsafe() {
|
||||
update_site_option( 'banned_email_domains', array( 'baR.com', 'Foo.co', 'barfoo.COM', 'BAZ.com' ) );
|
||||
|
||||
foreach ( array( 'test@Bar.com', 'tEst@bar.com', 'test@barFoo.com', 'tEst@foo.bar.com', 'test@baz.Com' ) as $email_address ) {
|
||||
$this->assertTrue( is_email_address_unsafe( $email_address ), "$email_address should be UNSAFE" );
|
||||
}
|
||||
|
||||
foreach ( array( 'test@Foobar.com', 'test@Foo-bar.com', 'tEst@foobar.com', 'test@Subdomain.Foo.com', 'test@fooBAz.com' ) as $email_address ) {
|
||||
$this->assertFalse( is_email_address_unsafe( $email_address ), "$email_address should be SAFE" );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
endif;
|
273
tests/phpunit/tests/multisite/bootstrap.php
Normal file
273
tests/phpunit/tests/multisite/bootstrap.php
Normal file
@ -0,0 +1,273 @@
|
||||
<?php
|
||||
|
||||
if ( is_multisite() ) :
|
||||
|
||||
/**
|
||||
* Tests specific to the bootstrap process of Multisite.
|
||||
*
|
||||
* @group ms-bootstrap
|
||||
* @group multisite
|
||||
*/
|
||||
class Tests_Multisite_Bootstrap extends WP_UnitTestCase {
|
||||
protected $suppress = false;
|
||||
|
||||
function setUp() {
|
||||
global $wpdb;
|
||||
parent::setUp();
|
||||
$this->suppress = $wpdb->suppress_errors();
|
||||
|
||||
$_SERVER[ 'REMOTE_ADDR' ] = '';
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
global $wpdb;
|
||||
parent::tearDown();
|
||||
$wpdb->suppress_errors( $this->suppress );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @ticket 27003
|
||||
*/
|
||||
function test_get_network_by_path() {
|
||||
global $wpdb;
|
||||
|
||||
$ids = array(
|
||||
'wordpress.org/' => array( 'domain' => 'wordpress.org', 'path' => '/' ),
|
||||
'wordpress.org/one/' => array( 'domain' => 'wordpress.org', 'path' => '/one/' ),
|
||||
'wordpress.net/' => array( 'domain' => 'wordpress.net', 'path' => '/' ),
|
||||
'www.wordpress.net/' => array( 'domain' => 'www.wordpress.net', 'path' => '/' ),
|
||||
'www.wordpress.net/two/' => array( 'domain' => 'www.wordpress.net', 'path' => '/two/' ),
|
||||
'wordpress.net/three/' => array( 'domain' => 'wordpress.net', 'path' => '/three/' ),
|
||||
);
|
||||
|
||||
foreach ( $ids as &$id ) {
|
||||
$id = $this->factory->network->create( $id );
|
||||
}
|
||||
unset( $id );
|
||||
|
||||
$this->assertEquals( $ids['www.wordpress.net/'],
|
||||
get_network_by_path( 'www.wordpress.net', '/notapath/' )->id );
|
||||
|
||||
$this->assertEquals( $ids['www.wordpress.net/two/'],
|
||||
get_network_by_path( 'www.wordpress.net', '/two/' )->id );
|
||||
|
||||
// This should find /one/ despite the www.
|
||||
$this->assertEquals( $ids['wordpress.org/one/'],
|
||||
get_network_by_path( 'www.wordpress.org', '/one/' )->id );
|
||||
|
||||
// This should not find /one/ because the domains don't match.
|
||||
$this->assertEquals( $ids['wordpress.org/'],
|
||||
get_network_by_path( 'site1.wordpress.org', '/one/' )->id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.net/three/'],
|
||||
get_network_by_path( 'wordpress.net', '/three/' )->id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.net/'],
|
||||
get_network_by_path( 'wordpress.net', '/notapath/' )->id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.net/'],
|
||||
get_network_by_path( 'site1.wordpress.net', '/notapath/' )->id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.net/'],
|
||||
get_network_by_path( 'site1.wordpress.net', '/three/' )->id );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 27003
|
||||
* @ticket 27927
|
||||
*/
|
||||
function test_get_site_by_path() {
|
||||
$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/' ),
|
||||
'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/' ),
|
||||
);
|
||||
|
||||
foreach ( $ids as &$id ) {
|
||||
$id = $this->factory->blog->create( $id );
|
||||
}
|
||||
unset( $id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.org/'],
|
||||
get_site_by_path( 'wordpress.org', '/notapath/' )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.org/'],
|
||||
get_site_by_path( 'www.wordpress.org', '/notapath/' )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.org/foo/bar/'],
|
||||
get_site_by_path( 'wordpress.org', '/foo/bar/baz/' )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.org/foo/bar/'],
|
||||
get_site_by_path( 'www.wordpress.org', '/foo/bar/baz/' )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.org/foo/bar/'],
|
||||
get_site_by_path( 'wordpress.org', '/foo/bar/baz/', 3 )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.org/foo/bar/'],
|
||||
get_site_by_path( 'www.wordpress.org', '/foo/bar/baz/', 3 )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.org/foo/bar/'],
|
||||
get_site_by_path( 'wordpress.org', '/foo/bar/baz/', 2 )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.org/foo/bar/'],
|
||||
get_site_by_path( 'www.wordpress.org', '/foo/bar/baz/', 2 )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.org/foo/'],
|
||||
get_site_by_path( 'wordpress.org', '/foo/bar/baz/', 1 )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.org/foo/'],
|
||||
get_site_by_path( 'www.wordpress.org', '/foo/bar/baz/', 1 )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.org/'],
|
||||
get_site_by_path( 'wordpress.org', '/', 0 )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['wordpress.org/'],
|
||||
get_site_by_path( 'www.wordpress.org', '/', 0 )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['make.wordpress.org/foo/'],
|
||||
get_site_by_path( 'make.wordpress.org', '/foo/bar/baz/qux/', 4 )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['make.wordpress.org/foo/'],
|
||||
get_site_by_path( 'www.make.wordpress.org', '/foo/bar/baz/qux/', 4 )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['www.w.org/'],
|
||||
get_site_by_path( 'www.w.org', '/', 0 )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['www.w.org/'],
|
||||
get_site_by_path( 'www.w.org', '/notapath/' )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['www.w.org/foo/bar/'],
|
||||
get_site_by_path( 'www.w.org', '/foo/bar/baz/' )->blog_id );
|
||||
|
||||
$this->assertEquals( $ids['www.w.org/foo/'],
|
||||
get_site_by_path( 'www.w.org', '/foo/bar/baz/', 1 )->blog_id );
|
||||
|
||||
// A site installed with www will not be found by the root domain.
|
||||
$this->assertFalse( get_site_by_path( 'w.org', '/' ) );
|
||||
$this->assertFalse( get_site_by_path( 'w.org', '/notapath/' ) );
|
||||
$this->assertFalse( get_site_by_path( 'w.org', '/foo/bar/baz/' ) );
|
||||
$this->assertFalse( get_site_by_path( 'w.org', '/foo/bar/baz/', 1 ) );
|
||||
|
||||
// A site will not be found by its root domain when an invalid subdomain is requested.
|
||||
$this->assertFalse( get_site_by_path( 'invalid.wordpress.org', '/' ) );
|
||||
$this->assertFalse( get_site_by_path( 'invalid.wordpress.org', '/foo/bar/' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 27884
|
||||
*/
|
||||
function test_multisite_bootstrap() {
|
||||
global $current_blog;
|
||||
|
||||
$network_ids = array(
|
||||
'wordpress.org/' => array( 'domain' => 'wordpress.org', 'path' => '/' ),
|
||||
'make.wordpress.org/' => array( 'domain' => 'make.wordpress.org', 'path' => '/' ),
|
||||
);
|
||||
|
||||
foreach ( $network_ids as &$id ) {
|
||||
$id = $this->factory->network->create( $id );
|
||||
}
|
||||
unset( $id );
|
||||
|
||||
$ids = array(
|
||||
'wordpress.org/' => array( 'domain' => 'wordpress.org', 'path' => '/', 'site_id' => $network_ids['wordpress.org/'] ),
|
||||
'wordpress.org/foo/' => array( 'domain' => 'wordpress.org', 'path' => '/foo/', 'site_id' => $network_ids['wordpress.org/'] ),
|
||||
'wordpress.org/foo/bar/' => array( 'domain' => 'wordpress.org', 'path' => '/foo/bar/', 'site_id' => $network_ids['wordpress.org/'] ),
|
||||
'make.wordpress.org/' => array( 'domain' => 'make.wordpress.org', 'path' => '/', 'site_id' => $network_ids['make.wordpress.org/'] ),
|
||||
'make.wordpress.org/foo/' => array( 'domain' => 'make.wordpress.org', 'path' => '/foo/', 'site_id' => $network_ids['make.wordpress.org/'] ),
|
||||
);
|
||||
|
||||
foreach ( $ids as &$id ) {
|
||||
$id = $this->factory->blog->create( $id );
|
||||
}
|
||||
unset( $id );
|
||||
|
||||
$this->_setup_host_request( 'wordpress.org', '/' );
|
||||
$this->assertEquals( $ids['wordpress.org/'], $current_blog->blog_id );
|
||||
$this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
$this->_setup_host_request( 'wordpress.org', '/2014/04/23/hello-world/' );
|
||||
$this->assertEquals( $ids['wordpress.org/'], $current_blog->blog_id );
|
||||
$this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
$this->_setup_host_request( 'wordpress.org', '/sample-page/' );
|
||||
$this->assertEquals( $ids['wordpress.org/'], $current_blog->blog_id );
|
||||
$this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
$this->_setup_host_request( 'wordpress.org', '/?p=1' );
|
||||
$this->assertEquals( $ids['wordpress.org/'], $current_blog->blog_id );
|
||||
$this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
$this->_setup_host_request( 'wordpress.org', '/wp-admin/' );
|
||||
$this->assertEquals( $ids['wordpress.org/'], $current_blog->blog_id );
|
||||
$this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
$this->_setup_host_request( 'wordpress.org', '/foo/' );
|
||||
$this->assertEquals( $ids['wordpress.org/foo/'], $current_blog->blog_id );
|
||||
$this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
$this->_setup_host_request( 'wordpress.org', '/FOO/' );
|
||||
$this->assertEquals( $ids['wordpress.org/foo/'], $current_blog->blog_id );
|
||||
$this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
$this->_setup_host_request( 'wordpress.org', '/foo/2014/04/23/hello-world/' );
|
||||
$this->assertEquals( $ids['wordpress.org/foo/'], $current_blog->blog_id );
|
||||
$this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
$this->_setup_host_request( 'wordpress.org', '/foo/sample-page/' );
|
||||
$this->assertEquals( $ids['wordpress.org/foo/'], $current_blog->blog_id );
|
||||
$this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
$this->_setup_host_request( 'wordpress.org', '/foo/?p=1' );
|
||||
$this->assertEquals( $ids['wordpress.org/foo/'], $current_blog->blog_id );
|
||||
$this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
$this->_setup_host_request( 'wordpress.org', '/foo/wp-admin/' );
|
||||
$this->assertEquals( $ids['wordpress.org/foo/'], $current_blog->blog_id );
|
||||
$this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
// @todo not currently passing.
|
||||
//$this->_setup_host_request( 'wordpress.org', '/foo/bar/' );
|
||||
//$this->assertEquals( $ids['wordpress.org/foo/bar/'], $current_blog->blog_id );
|
||||
//$this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
$this->_setup_host_request( 'make.wordpress.org', '/' );
|
||||
$this->assertEquals( $ids['make.wordpress.org/'], $current_blog->blog_id );
|
||||
$this->assertEquals( $network_ids['make.wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
$this->_setup_host_request( 'make.wordpress.org', '/foo/' );
|
||||
$this->assertEquals( $ids['make.wordpress.org/foo/'], $current_blog->blog_id );
|
||||
$this->assertEquals( $network_ids['make.wordpress.org/'], $current_blog->site_id );
|
||||
|
||||
// Request the original tests domain and path to unpollute the stack.
|
||||
$this->_setup_host_request( WP_TESTS_DOMAIN, '/' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset various globals required for a 'clean' multisite boot.
|
||||
*
|
||||
* The $wpdb and $table_prefix globals are required for ms-settings.php to
|
||||
* load properly.
|
||||
*
|
||||
* @param string $domain HTTP_HOST of the bootstrap request.
|
||||
* @param string $path REQUEST_URI of the boot strap request.
|
||||
*/
|
||||
function _setup_host_request( $domain, $path ) {
|
||||
global $current_site, $current_blog, $table_prefix, $wpdb;
|
||||
|
||||
$table_prefix = WP_TESTS_TABLE_PREFIX;
|
||||
$current_site = $current_blog = null;
|
||||
$_SERVER['HTTP_HOST'] = $domain;
|
||||
$_SERVER['REQUEST_URI'] = $path;
|
||||
|
||||
include ABSPATH . '/wp-includes/ms-settings.php';
|
||||
}
|
||||
}
|
||||
|
||||
endif;
|
187
tests/phpunit/tests/multisite/network.php
Normal file
187
tests/phpunit/tests/multisite/network.php
Normal file
@ -0,0 +1,187 @@
|
||||
<?php
|
||||
|
||||
if ( is_multisite() ) :
|
||||
|
||||
/**
|
||||
* Tests specific to networks in multisite.
|
||||
*
|
||||
* @group ms-network
|
||||
* @group multisite
|
||||
*/
|
||||
class Tests_Multisite_Network extends WP_UnitTestCase {
|
||||
protected $plugin_hook_count = 0;
|
||||
protected $suppress = false;
|
||||
|
||||
function setUp() {
|
||||
global $wpdb;
|
||||
parent::setUp();
|
||||
$this->suppress = $wpdb->suppress_errors();
|
||||
|
||||
$_SERVER[ 'REMOTE_ADDR' ] = '';
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
global $wpdb;
|
||||
parent::tearDown();
|
||||
$wpdb->suppress_errors( $this->suppress );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 22917
|
||||
*/
|
||||
function test_enable_live_network_site_counts_filter() {
|
||||
$site_count_start = get_blog_count();
|
||||
// false for large networks by default
|
||||
add_filter( 'enable_live_network_counts', '__return_false' );
|
||||
$this->factory->blog->create_many( 4 );
|
||||
|
||||
// count only updated when cron runs, so unchanged
|
||||
$this->assertEquals( $site_count_start, (int) get_blog_count() );
|
||||
|
||||
add_filter( 'enable_live_network_counts', '__return_true' );
|
||||
$site_ids = $this->factory->blog->create_many( 4 );
|
||||
|
||||
$this->assertEquals( $site_count_start + 9, (int) get_blog_count() );
|
||||
|
||||
//clean up
|
||||
remove_filter( 'enable_live_network_counts', '__return_false' );
|
||||
remove_filter( 'enable_live_network_counts', '__return_true' );
|
||||
foreach ( $site_ids as $site_id ) {
|
||||
wpmu_delete_blog( $site_id, true );
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @ticket 22917
|
||||
*/
|
||||
function test_enable_live_network_user_counts_filter() {
|
||||
// false for large networks by default
|
||||
add_filter( 'enable_live_network_counts', '__return_false' );
|
||||
|
||||
// Refresh the cache
|
||||
wp_update_network_counts();
|
||||
$start_count = get_user_count();
|
||||
|
||||
wpmu_create_user( 'user', 'pass', 'email' );
|
||||
|
||||
// No change, cache not refreshed
|
||||
$count = get_user_count();
|
||||
|
||||
$this->assertEquals( $start_count, $count );
|
||||
|
||||
wp_update_network_counts();
|
||||
$start_count = get_user_count();
|
||||
|
||||
add_filter( 'enable_live_network_counts', '__return_true' );
|
||||
|
||||
wpmu_create_user( 'user2', 'pass2', 'email2' );
|
||||
|
||||
$count = get_user_count();
|
||||
$this->assertEquals( $start_count + 1, $count );
|
||||
|
||||
remove_filter( 'enable_live_network_counts', '__return_false' );
|
||||
remove_filter( 'enable_live_network_counts', '__return_true' );
|
||||
}
|
||||
|
||||
function test_active_network_plugins() {
|
||||
$path = "hello.php";
|
||||
|
||||
// local activate, should be invisible for the network
|
||||
activate_plugin($path); // $network_wide = false
|
||||
$active_plugins = wp_get_active_network_plugins();
|
||||
$this->assertEquals( Array(), $active_plugins );
|
||||
|
||||
add_action( 'deactivated_plugin', array( $this, '_helper_deactivate_hook' ) );
|
||||
|
||||
// activate the plugin sitewide
|
||||
activate_plugin($path, '', $network_wide = true);
|
||||
$active_plugins = wp_get_active_network_plugins();
|
||||
$this->assertEquals( Array(WP_PLUGIN_DIR . '/hello.php'), $active_plugins );
|
||||
|
||||
//deactivate the plugin
|
||||
deactivate_plugins($path);
|
||||
$active_plugins = wp_get_active_network_plugins();
|
||||
$this->assertEquals( Array(), $active_plugins );
|
||||
|
||||
$this->assertEquals( 1, $this->plugin_hook_count ); // testing actions and silent mode
|
||||
|
||||
activate_plugin($path, '', $network_wide = true);
|
||||
deactivate_plugins($path, true); // silent
|
||||
|
||||
$this->assertEquals( 1, $this->plugin_hook_count ); // testing actions and silent mode
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 28651
|
||||
*/
|
||||
function test_duplicate_network_active_plugin() {
|
||||
$path = "hello.php";
|
||||
$mock = new MockAction();
|
||||
add_action( 'activate_' . $path, array ( $mock, 'action' ) );
|
||||
|
||||
// should activate on the first try
|
||||
activate_plugin( $path, '', true );
|
||||
$active_plugins = wp_get_active_network_plugins();
|
||||
$this->assertCount( 1, $active_plugins );
|
||||
$this->assertEquals( 1, $mock->get_call_count() );
|
||||
|
||||
// should do nothing on the second try
|
||||
activate_plugin( $path, '', true );
|
||||
$active_plugins = wp_get_active_network_plugins();
|
||||
$this->assertCount( 1, $active_plugins );
|
||||
$this->assertEquals( 1, $mock->get_call_count() );
|
||||
|
||||
remove_action( 'activate_' . $path, array ( $mock, 'action' ) );
|
||||
}
|
||||
|
||||
function _helper_deactivate_hook() {
|
||||
$this->plugin_hook_count++;
|
||||
}
|
||||
|
||||
function test_get_user_count() {
|
||||
// Refresh the cache
|
||||
wp_update_network_counts();
|
||||
$start_count = get_user_count();
|
||||
|
||||
// Only false for large networks as of 3.7
|
||||
add_filter( 'enable_live_network_counts', '__return_false' );
|
||||
$this->factory->user->create( array( 'role' => 'administrator' ) );
|
||||
|
||||
$count = get_user_count(); // No change, cache not refreshed
|
||||
$this->assertEquals( $start_count, $count );
|
||||
|
||||
wp_update_network_counts(); // Magic happens here
|
||||
|
||||
$count = get_user_count();
|
||||
$this->assertEquals( $start_count + 1, $count );
|
||||
remove_filter( 'enable_live_network_counts', '__return_false' );
|
||||
}
|
||||
|
||||
function test_wp_schedule_update_network_counts() {
|
||||
$this->assertFalse(wp_next_scheduled('update_network_counts'));
|
||||
|
||||
// We can't use wp_schedule_update_network_counts() because WP_INSTALLING is set
|
||||
wp_schedule_event(time(), 'twicedaily', 'update_network_counts');
|
||||
|
||||
$this->assertInternalType('int', wp_next_scheduled('update_network_counts'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedDeprecated get_dashboard_blog
|
||||
*/
|
||||
function test_get_dashboard_blog() {
|
||||
// if there is no dashboard blog set, current blog is used
|
||||
$dashboard_blog = get_dashboard_blog();
|
||||
$this->assertEquals( 1, $dashboard_blog->blog_id );
|
||||
|
||||
$user_id = $this->factory->user->create( array( 'role' => 'administrator' ) );
|
||||
$blog_id = $this->factory->blog->create( array( 'user_id' => $user_id ) );
|
||||
$this->assertInternalType( 'int', $blog_id );
|
||||
|
||||
// set the dashboard blog to another one
|
||||
update_site_option( 'dashboard_blog', $blog_id );
|
||||
$dashboard_blog = get_dashboard_blog();
|
||||
$this->assertEquals( $blog_id, $dashboard_blog->blog_id );
|
||||
}
|
||||
}
|
||||
|
||||
endif;
|
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,15 @@
|
||||
<?php
|
||||
|
||||
if ( is_multisite() ) :
|
||||
|
||||
/**
|
||||
* Tests specific to network and site options in Multisite.
|
||||
*
|
||||
* @group option
|
||||
* @group ms-option
|
||||
* @group multisite
|
||||
*/
|
||||
class Tests_Option_BlogOption extends WP_UnitTestCase {
|
||||
class Tests_Multisite_Option extends WP_UnitTestCase {
|
||||
protected $suppress = false;
|
||||
|
||||
function setUp() {
|
||||
@ -150,5 +155,68 @@ class Tests_Option_BlogOption extends WP_UnitTestCase {
|
||||
$this->assertFalse( get_blog_option( $blog_id, $key2 ) );
|
||||
//$this->assertFalse( get_option( $key2 ) ); // check get_option()
|
||||
}
|
||||
|
||||
/**
|
||||
* @group multisite
|
||||
*/
|
||||
function test_site_notoptions() {
|
||||
global $wpdb;
|
||||
$notoptions_key = "{$wpdb->siteid}:notoptions";
|
||||
|
||||
$_notoptions = wp_cache_get( 'notoptions', 'site-options' );
|
||||
$this->assertEmpty( $_notoptions );
|
||||
$_notoptions1 = wp_cache_get( $notoptions_key, 'site-options' );
|
||||
$this->assertEmpty( $_notoptions1 );
|
||||
|
||||
get_site_option( 'burrito' );
|
||||
|
||||
$notoptions = wp_cache_get( 'notoptions', 'site-options' );
|
||||
$this->assertEmpty( $notoptions );
|
||||
$notoptions1 = wp_cache_get( $notoptions_key, 'site-options' );
|
||||
$this->assertNotEmpty( $notoptions1 );
|
||||
}
|
||||
|
||||
function test_users_can_register_signup_filter() {
|
||||
|
||||
$registration = get_site_option('registration');
|
||||
$this->assertFalse( users_can_register_signup_filter() );
|
||||
|
||||
update_site_option('registration', 'all');
|
||||
$this->assertTrue( users_can_register_signup_filter() );
|
||||
|
||||
update_site_option('registration', 'user');
|
||||
$this->assertTrue( users_can_register_signup_filter() );
|
||||
|
||||
update_site_option('registration', 'none');
|
||||
$this->assertFalse( users_can_register_signup_filter() );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 21552
|
||||
* @ticket 23418
|
||||
*/
|
||||
function test_sanitize_ms_options() {
|
||||
update_site_option( 'illegal_names', array( '', 'Woo', '' ) );
|
||||
update_site_option( 'limited_email_domains', array( 'woo', '', 'boo.com', 'foo.net.biz..' ) );
|
||||
update_site_option( 'banned_email_domains', array( 'woo', '', 'boo.com', 'foo.net.biz..' ) );
|
||||
|
||||
$this->assertEquals( array( 'Woo' ), get_site_option( 'illegal_names' ) );
|
||||
$this->assertEquals( array( 'woo', 'boo.com' ), get_site_option( 'limited_email_domains' ) );
|
||||
$this->assertEquals( array( 'woo', 'boo.com' ), get_site_option( 'banned_email_domains' ) );
|
||||
|
||||
update_site_option( 'illegal_names', 'foo bar' );
|
||||
update_site_option( 'limited_email_domains', "foo\nbar" );
|
||||
update_site_option( 'banned_email_domains', "foo\nbar" );
|
||||
|
||||
$this->assertEquals( array( 'foo', 'bar' ), get_site_option( 'illegal_names' ) );
|
||||
$this->assertEquals( array( 'foo', 'bar' ), get_site_option( 'limited_email_domains' ) );
|
||||
$this->assertEquals( array( 'foo', 'bar' ), get_site_option( 'banned_email_domains' ) );
|
||||
|
||||
foreach ( array( 'illegal_names', 'limited_email_domains', 'banned_email_domains' ) as $option ) {
|
||||
update_site_option( $option, array() );
|
||||
$this->assertSame( '', get_site_option( $option ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
endif;
|
@ -90,28 +90,4 @@ class Tests_Option_SiteOption extends WP_UnitTestCase {
|
||||
$this->assertEquals( get_site_option( $option, $default ), $default );
|
||||
$this->assertFalse( get_site_option( $option ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @group multisite
|
||||
*/
|
||||
function test_site_notoptions() {
|
||||
if ( ! is_multisite() ) {
|
||||
$this->markTestSkipped( 'Should only run in multisite' );
|
||||
}
|
||||
|
||||
global $wpdb;
|
||||
$notoptions_key = "{$wpdb->siteid}:notoptions";
|
||||
|
||||
$_notoptions = wp_cache_get( 'notoptions', 'site-options' );
|
||||
$this->assertEmpty( $_notoptions );
|
||||
$_notoptions1 = wp_cache_get( $notoptions_key, 'site-options' );
|
||||
$this->assertEmpty( $_notoptions1 );
|
||||
|
||||
get_site_option( 'burrito' );
|
||||
|
||||
$notoptions = wp_cache_get( 'notoptions', 'site-options' );
|
||||
$this->assertEmpty( $notoptions );
|
||||
$notoptions1 = wp_cache_get( $notoptions_key, 'site-options' );
|
||||
$this->assertNotEmpty( $notoptions1 );
|
||||
}
|
||||
}
|
||||
|
238
tests/phpunit/tests/user/multisite.php
Normal file
238
tests/phpunit/tests/user/multisite.php
Normal file
@ -0,0 +1,238 @@
|
||||
<?php
|
||||
|
||||
if ( is_multisite() ) :
|
||||
|
||||
/**
|
||||
* Tests specific to users in multisite.
|
||||
*
|
||||
* @group user
|
||||
* @group ms-user
|
||||
* @group multisite
|
||||
*/
|
||||
class Tests_Multisite_User extends WP_UnitTestCase {
|
||||
protected $suppress = false;
|
||||
|
||||
function setUp() {
|
||||
global $wpdb;
|
||||
parent::setUp();
|
||||
$this->suppress = $wpdb->suppress_errors();
|
||||
|
||||
$_SERVER[ 'REMOTE_ADDR' ] = '';
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
global $wpdb;
|
||||
parent::tearDown();
|
||||
$wpdb->suppress_errors( $this->suppress );
|
||||
}
|
||||
|
||||
function test_remove_user_from_blog() {
|
||||
$user1 = $this->factory->user->create_and_get();
|
||||
$user2 = $this->factory->user->create_and_get();
|
||||
|
||||
$post_id = $this->factory->post->create( array( 'post_author' => $user1->ID ) );
|
||||
|
||||
remove_user_from_blog( $user1->ID, 1, $user2->ID );
|
||||
|
||||
$post = get_post( $post_id );
|
||||
|
||||
$this->assertNotEquals( $user1->ID, $post->post_author );
|
||||
$this->assertEquals( $user2->ID, $post->post_author );
|
||||
}
|
||||
|
||||
function test_get_blogs_of_user() {
|
||||
// Logged out users don't have blogs.
|
||||
$this->assertEquals( array(), get_blogs_of_user( 0 ) );
|
||||
|
||||
$user1_id = $this->factory->user->create( array( 'role' => 'administrator' ) );
|
||||
$blog_ids = $this->factory->blog->create_many( 10, array( 'user_id' => $user1_id ) );
|
||||
|
||||
foreach ( $blog_ids as $blog_id )
|
||||
$this->assertInternalType( 'int', $blog_id );
|
||||
|
||||
$blogs_of_user = array_keys( get_blogs_of_user( $user1_id, false ) );
|
||||
sort( $blogs_of_user );
|
||||
$this->assertEquals ( array_merge( array( 1 ), $blog_ids), $blogs_of_user );
|
||||
|
||||
$this->assertTrue( remove_user_from_blog( $user1_id, 1 ) );
|
||||
|
||||
$blogs_of_user = array_keys( get_blogs_of_user( $user1_id, false ) );
|
||||
sort( $blogs_of_user );
|
||||
$this->assertEquals ( $blog_ids, $blogs_of_user );
|
||||
|
||||
foreach ( get_blogs_of_user( $user1_id, false ) as $blog ) {
|
||||
$this->assertTrue( isset( $blog->userblog_id ) );
|
||||
$this->assertTrue( isset( $blog->blogname ) );
|
||||
$this->assertTrue( isset( $blog->domain ) );
|
||||
$this->assertTrue( isset( $blog->path ) );
|
||||
$this->assertTrue( isset( $blog->site_id ) );
|
||||
$this->assertTrue( isset( $blog->siteurl ) );
|
||||
$this->assertTrue( isset( $blog->archived ) );
|
||||
$this->assertTrue( isset( $blog->spam ) );
|
||||
$this->assertTrue( isset( $blog->deleted ) );
|
||||
}
|
||||
|
||||
// Non-existent users don't have blogs.
|
||||
wpmu_delete_user( $user1_id );
|
||||
$user = new WP_User( $user1_id );
|
||||
$this->assertFalse( $user->exists(), 'WP_User->exists' );
|
||||
$this->assertEquals( array(), get_blogs_of_user( $user1_id ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedDeprecated is_blog_user
|
||||
*/
|
||||
function test_is_blog_user() {
|
||||
global $wpdb;
|
||||
|
||||
$user1_id = $this->factory->user->create( array( 'role' => 'administrator' ) );
|
||||
|
||||
$old_current = get_current_user_id();
|
||||
wp_set_current_user( $user1_id );
|
||||
|
||||
$this->assertTrue( is_blog_user() );
|
||||
$this->assertTrue( is_blog_user( $wpdb->blogid ) );
|
||||
|
||||
$blog_ids = array();
|
||||
|
||||
$blog_ids = $this->factory->blog->create_many( 5 );
|
||||
foreach ( $blog_ids as $blog_id ) {
|
||||
$this->assertInternalType( 'int', $blog_id );
|
||||
$this->assertTrue( is_blog_user( $blog_id ) );
|
||||
$this->assertTrue( remove_user_from_blog( $user1_id, $blog_id ) );
|
||||
$this->assertFalse( is_blog_user( $blog_id ) );
|
||||
}
|
||||
|
||||
wp_set_current_user( $old_current );
|
||||
}
|
||||
|
||||
function test_is_user_member_of_blog() {
|
||||
global $wpdb;
|
||||
|
||||
$user1_id = $this->factory->user->create( array( 'role' => 'administrator' ) );
|
||||
|
||||
$old_current = get_current_user_id();
|
||||
wp_set_current_user( $user1_id );
|
||||
|
||||
$this->assertTrue( is_user_member_of_blog() );
|
||||
$this->assertTrue( is_user_member_of_blog( 0, 0 ) );
|
||||
$this->assertTrue( is_user_member_of_blog( 0, $wpdb->blogid ) );
|
||||
$this->assertTrue( is_user_member_of_blog( $user1_id ) );
|
||||
$this->assertTrue( is_user_member_of_blog( $user1_id, $wpdb->blogid ) );
|
||||
|
||||
$blog_ids = $this->factory->blog->create_many( 5 );
|
||||
foreach ( $blog_ids as $blog_id ) {
|
||||
$this->assertInternalType( 'int', $blog_id );
|
||||
$this->assertTrue( is_user_member_of_blog( $user1_id, $blog_id ) );
|
||||
$this->assertTrue( remove_user_from_blog( $user1_id, $blog_id ) );
|
||||
$this->assertFalse( is_user_member_of_blog( $user1_id, $blog_id ) );
|
||||
}
|
||||
|
||||
wpmu_delete_user( $user1_id );
|
||||
$user = new WP_User( $user1_id );
|
||||
$this->assertFalse( $user->exists(), 'WP_User->exists' );
|
||||
$this->assertFalse( is_user_member_of_blog( $user1_id ), 'is_user_member_of_blog' );
|
||||
|
||||
wp_set_current_user( $old_current );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 23192
|
||||
*/
|
||||
function test_is_user_spammy() {
|
||||
$user_id = $this->factory->user->create( array(
|
||||
'role' => 'author',
|
||||
'user_login' => 'testuser1',
|
||||
) );
|
||||
|
||||
$spam_username = (string) $user_id;
|
||||
$spam_user_id = $this->factory->user->create( array(
|
||||
'role' => 'author',
|
||||
'user_login' => $spam_username,
|
||||
) );
|
||||
update_user_status( $spam_user_id, 'spam', '1' );
|
||||
|
||||
$this->assertTrue( is_user_spammy( $spam_username ) );
|
||||
$this->assertFalse( is_user_spammy( 'testuser1' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 20601
|
||||
*/
|
||||
function test_user_member_of_blog() {
|
||||
global $wp_rewrite;
|
||||
|
||||
$this->factory->blog->create();
|
||||
$user_id = $this->factory->user->create();
|
||||
$this->factory->blog->create( array( 'user_id' => $user_id ) );
|
||||
|
||||
$blogs = get_blogs_of_user( $user_id );
|
||||
$this->assertCount( 2, $blogs );
|
||||
$first = reset( $blogs )->userblog_id;
|
||||
remove_user_from_blog( $user_id, $first );
|
||||
|
||||
$blogs = get_blogs_of_user( $user_id );
|
||||
$second = reset( $blogs )->userblog_id;
|
||||
$this->assertCount( 1, $blogs );
|
||||
|
||||
switch_to_blog( $first );
|
||||
$wp_rewrite->init();
|
||||
|
||||
$this->go_to( get_author_posts_url( $user_id ) );
|
||||
$this->assertQueryTrue( 'is_404' );
|
||||
|
||||
switch_to_blog( $second );
|
||||
$wp_rewrite->init();
|
||||
|
||||
$this->go_to( get_author_posts_url( $user_id ) );
|
||||
$this->assertQueryTrue( 'is_author', 'is_archive' );
|
||||
|
||||
add_user_to_blog( $first, $user_id, 'administrator' );
|
||||
$blogs = get_blogs_of_user( $user_id );
|
||||
$this->assertCount( 2, $blogs );
|
||||
|
||||
switch_to_blog( $first );
|
||||
$wp_rewrite->init();
|
||||
|
||||
$this->go_to( get_author_posts_url( $user_id ) );
|
||||
$this->assertQueryTrue( 'is_author', 'is_archive' );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 27205
|
||||
*/
|
||||
function test_granting_super_admins() {
|
||||
if ( isset( $GLOBALS['super_admins'] ) ) {
|
||||
$old_global = $GLOBALS['super_admins'];
|
||||
unset( $GLOBALS['super_admins'] );
|
||||
}
|
||||
|
||||
$user_id = $this->factory->user->create();
|
||||
|
||||
$this->assertFalse( is_super_admin( $user_id ) );
|
||||
$this->assertFalse( revoke_super_admin( $user_id ) );
|
||||
$this->assertTrue( grant_super_admin( $user_id ) );
|
||||
$this->assertTrue( is_super_admin( $user_id ) );
|
||||
$this->assertFalse( grant_super_admin( $user_id ) );
|
||||
$this->assertTrue( revoke_super_admin( $user_id ) );
|
||||
|
||||
// None of these operations should set the $super_admins global.
|
||||
$this->assertFalse( isset( $GLOBALS['super_admins'] ) );
|
||||
|
||||
// Try with two users.
|
||||
$second_user = $this->factory->user->create();
|
||||
$this->assertTrue( grant_super_admin( $user_id ) );
|
||||
$this->assertTrue( grant_super_admin( $second_user ) );
|
||||
$this->assertTrue( is_super_admin( $second_user ) );
|
||||
$this->assertTrue( is_super_admin( $user_id ) );
|
||||
$this->assertTrue( revoke_super_admin( $user_id ) );
|
||||
$this->assertTrue( revoke_super_admin( $second_user ) );
|
||||
|
||||
if ( isset( $old_global ) ) {
|
||||
$GLOBALS['super_admins'] = $old_global;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
endif ;
|
Loading…
x
Reference in New Issue
Block a user