Changeset 60148 for trunk/tests/phpunit/tests/multisite/bootstrap.php
- Timestamp:
- 04/09/2025 01:29:39 PM (5 weeks ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tests/phpunit/tests/multisite/bootstrap.php
r52010 r60148 1 1 <?php 2 2 3 if ( is_multisite() ) : 4 5 /** 6 * Tests specific to the bootstrap process of Multisite. 3 /** 4 * Tests specific to the bootstrap process of Multisite. 5 * 6 * @group ms-bootstrap 7 * @group ms-required 8 * @group multisite 9 */ 10 class Tests_Multisite_Bootstrap extends WP_UnitTestCase { 11 12 protected static $network_ids; 13 protected static $site_ids; 14 15 public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) { 16 self::$network_ids = array( 17 'wordpress.org/' => array( 18 'domain' => 'wordpress.org', 19 'path' => '/', 20 ), 21 'make.wordpress.org/' => array( 22 'domain' => 'make.wordpress.org', 23 'path' => '/', 24 ), 25 'wordpress.org/one/' => array( 26 'domain' => 'wordpress.org', 27 'path' => '/one/', 28 ), 29 'wordpress.org/one/b/' => array( 30 'domain' => 'wordpress.org', 31 'path' => '/one/b/', 32 ), 33 'wordpress.net/' => array( 34 'domain' => 'wordpress.net', 35 'path' => '/', 36 ), 37 'www.wordpress.net/' => array( 38 'domain' => 'www.wordpress.net', 39 'path' => '/', 40 ), 41 'www.wordpress.net/two/' => array( 42 'domain' => 'www.wordpress.net', 43 'path' => '/two/', 44 ), 45 'wordpress.net/three/' => array( 46 'domain' => 'wordpress.net', 47 'path' => '/three/', 48 ), 49 ); 50 51 foreach ( self::$network_ids as &$id ) { 52 $id = $factory->network->create( $id ); 53 } 54 unset( $id ); 55 56 self::$site_ids = array( 57 'wordpress.org/' => array( 58 'domain' => 'wordpress.org', 59 'path' => '/', 60 'network_id' => self::$network_ids['wordpress.org/'], 61 ), 62 'wordpress.org/foo/' => array( 63 'domain' => 'wordpress.org', 64 'path' => '/foo/', 65 'network_id' => self::$network_ids['wordpress.org/'], 66 ), 67 'wordpress.org/foo/bar/' => array( 68 'domain' => 'wordpress.org', 69 'path' => '/foo/bar/', 70 'network_id' => self::$network_ids['wordpress.org/'], 71 ), 72 'make.wordpress.org/' => array( 73 'domain' => 'make.wordpress.org', 74 'path' => '/', 75 'network_id' => self::$network_ids['make.wordpress.org/'], 76 ), 77 'make.wordpress.org/foo/' => array( 78 'domain' => 'make.wordpress.org', 79 'path' => '/foo/', 80 'network_id' => self::$network_ids['make.wordpress.org/'], 81 ), 82 'www.w.org/' => array( 83 'domain' => 'www.w.org', 84 'path' => '/', 85 ), 86 'www.w.org/foo/' => array( 87 'domain' => 'www.w.org', 88 'path' => '/foo/', 89 ), 90 'www.w.org/foo/bar/' => array( 91 'domain' => 'www.w.org', 92 'path' => '/foo/bar/', 93 ), 94 ); 95 96 foreach ( self::$site_ids as &$id ) { 97 $id = $factory->blog->create( $id ); 98 } 99 unset( $id ); 100 } 101 102 public static function wpTearDownAfterClass() { 103 global $wpdb; 104 105 foreach ( self::$site_ids as $id ) { 106 wp_delete_site( $id ); 107 } 108 109 foreach ( self::$network_ids as $id ) { 110 $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->sitemeta} WHERE site_id = %d", $id ) ); 111 $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->site} WHERE id= %d", $id ) ); 112 } 113 114 wp_update_network_site_counts(); 115 } 116 117 /** 118 * @ticket 27003 119 * @dataProvider data_get_network_by_path 7 120 * 8 * @group ms-bootstrap 9 * @group multisite 10 */ 11 class Tests_Multisite_Bootstrap extends WP_UnitTestCase { 12 protected static $network_ids; 13 protected static $site_ids; 14 15 public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) { 16 self::$network_ids = array( 17 'wordpress.org/' => array( 18 'domain' => 'wordpress.org', 19 'path' => '/', 20 ), 21 'make.wordpress.org/' => array( 22 'domain' => 'make.wordpress.org', 23 'path' => '/', 24 ), 25 'wordpress.org/one/' => array( 26 'domain' => 'wordpress.org', 27 'path' => '/one/', 28 ), 29 'wordpress.org/one/b/' => array( 30 'domain' => 'wordpress.org', 31 'path' => '/one/b/', 32 ), 33 'wordpress.net/' => array( 34 'domain' => 'wordpress.net', 35 'path' => '/', 36 ), 37 'www.wordpress.net/' => array( 38 'domain' => 'www.wordpress.net', 39 'path' => '/', 40 ), 41 'www.wordpress.net/two/' => array( 42 'domain' => 'www.wordpress.net', 43 'path' => '/two/', 44 ), 45 'wordpress.net/three/' => array( 46 'domain' => 'wordpress.net', 47 'path' => '/three/', 48 ), 49 ); 50 51 foreach ( self::$network_ids as &$id ) { 52 $id = $factory->network->create( $id ); 53 } 54 unset( $id ); 55 56 self::$site_ids = array( 57 'wordpress.org/' => array( 58 'domain' => 'wordpress.org', 59 'path' => '/', 60 'network_id' => self::$network_ids['wordpress.org/'], 61 ), 62 'wordpress.org/foo/' => array( 63 'domain' => 'wordpress.org', 64 'path' => '/foo/', 65 'network_id' => self::$network_ids['wordpress.org/'], 66 ), 67 'wordpress.org/foo/bar/' => array( 68 'domain' => 'wordpress.org', 69 'path' => '/foo/bar/', 70 'network_id' => self::$network_ids['wordpress.org/'], 71 ), 72 'make.wordpress.org/' => array( 73 'domain' => 'make.wordpress.org', 74 'path' => '/', 75 'network_id' => self::$network_ids['make.wordpress.org/'], 76 ), 77 'make.wordpress.org/foo/' => array( 78 'domain' => 'make.wordpress.org', 79 'path' => '/foo/', 80 'network_id' => self::$network_ids['make.wordpress.org/'], 81 ), 82 'www.w.org/' => array( 83 'domain' => 'www.w.org', 84 'path' => '/', 85 ), 86 'www.w.org/foo/' => array( 87 'domain' => 'www.w.org', 88 'path' => '/foo/', 89 ), 90 'www.w.org/foo/bar/' => array( 91 'domain' => 'www.w.org', 92 'path' => '/foo/bar/', 93 ), 94 ); 95 96 foreach ( self::$site_ids as &$id ) { 97 $id = $factory->blog->create( $id ); 98 } 99 unset( $id ); 100 } 101 102 public static function wpTearDownAfterClass() { 103 global $wpdb; 104 105 foreach ( self::$site_ids as $id ) { 106 wp_delete_site( $id ); 107 } 108 109 foreach ( self::$network_ids as $id ) { 110 $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->sitemeta} WHERE site_id = %d", $id ) ); 111 $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->site} WHERE id= %d", $id ) ); 112 } 113 114 wp_update_network_site_counts(); 115 } 116 117 /** 118 * @ticket 27003 119 * @dataProvider data_get_network_by_path 120 * 121 * @param string $expected_key The array key associated with expected data for the test. 122 * @param string $domain The requested domain. 123 * @param string $path The requested path. 124 * @param string $message The message to pass for failed tests. 125 */ 126 public function test_get_network_by_path( $expected_key, $domain, $path, $message ) { 127 $network = get_network_by_path( $domain, $path ); 128 $this->assertSame( self::$network_ids[ $expected_key ], $network->id, $message ); 129 } 130 131 public function data_get_network_by_path() { 132 return array( 133 array( 'wordpress.org/', 'wordpress.org', '/', 'A standard domain and path request should work.' ), 134 array( 'wordpress.net/', 'wordpress.net', '/notapath/', 'A missing path on a top level domain should find the correct network.' ), 135 array( 'www.wordpress.net/', 'www.wordpress.net', '/notapath/', 'A missing path should find the correct network.' ), 136 array( 'wordpress.org/one/', 'www.wordpress.org', '/one/', 'Should find the path despite the www.' ), 137 array( 'wordpress.org/one/', 'wordpress.org', '/one/page/', 'A request with two path segments should find the correct network.' ), 138 array( 'wordpress.org/one/b/', 'wordpress.org', '/one/b/', 'A request with two valid path segments should find the correct network.' ), 139 array( 'wordpress.org/', 'site1.wordpress.org', '/one/', 'Should not find path because domains do not match.' ), 140 array( 'wordpress.net/three/', 'wordpress.net', '/three/', 'A network can have a path.' ), 141 array( 'www.wordpress.net/two/', 'www.wordpress.net', '/two/', 'A www network with a path can coexist with a non-www network.' ), 142 array( 'wordpress.net/', 'site1.wordpress.net', '/notapath/', 'An invalid subdomain should find the top level network domain.' ), 143 array( 'wordpress.net/', 'site1.wordpress.net', '/three/', 'An invalid subdomain and path should find the top level network domain.' ), 144 array( 'wordpress.net/', 'x.y.wordpress.net', '/', 'An invalid two level subdomain should find the top level network domain.' ), 145 ); 146 } 147 148 /** 149 * @ticket 37217 150 * @dataProvider data_get_network_by_path_with_zero_path_segments 151 * 152 * @param string $expected_key The array key associated with expected data for the test. 153 * @param string $domain The requested domain. 154 * @param string $path The requested path. 155 * @param string $message The message to pass for failed tests. 156 */ 157 public function test_get_network_by_path_with_zero_path_segments( $expected_key, $domain, $path, $message ) { 158 add_filter( 'network_by_path_segments_count', '__return_zero' ); 159 160 $network = get_network_by_path( $domain, $path ); 161 162 remove_filter( 'network_by_path_segments_count', '__return_zero' ); 163 164 $this->assertSame( self::$network_ids[ $expected_key ], $network->id, $message ); 165 } 166 167 public function data_get_network_by_path_with_zero_path_segments() { 168 return array( 169 array( 'wordpress.org/', 'wordpress.org', '/', 'A standard domain and path request should work.' ), 170 array( 'wordpress.net/', 'wordpress.net', '/notapath/', 'A network matching a top level domain should be found regardless of path.' ), 171 array( 'www.wordpress.net/', 'www.wordpress.net', '/notapath/', 'A network matching a domain should be found regardless of path.' ), 172 array( 'wordpress.org/', 'www.wordpress.org', '/one/', 'Should find the network despite the www and regardless of path.' ), 173 array( 'wordpress.org/', 'site1.wordpress.org', '/one/', 'Should find the network with the corresponding top level domain regardless of path.' ), 174 array( 'www.wordpress.net/', 'www.wordpress.net', '/two/', 'A www network can coexist with a non-www network.' ), 175 array( 'make.wordpress.org/', 'make.wordpress.org', '/notapath/', 'A subdomain network should be found regardless of path.' ), 176 array( 'wordpress.net/', 'x.y.wordpress.net', '/', 'An invalid two level subdomain should find the top level network domain.' ), 177 ); 178 } 179 180 /** 181 * Even if a matching network is available, it should not match if the the filtered 182 * value for network path segments is fewer than the number of paths passed. 183 */ 184 public function test_get_network_by_path_with_forced_single_path_segment_returns_single_path_network() { 185 add_filter( 'network_by_path_segments_count', array( $this, 'filter_network_path_segments' ) ); 186 $network = get_network_by_path( 'wordpress.org', '/one/b/' ); 187 remove_filter( 'network_by_path_segments_count', array( $this, 'filter_network_path_segments' ) ); 188 189 $this->assertSame( self::$network_ids['wordpress.org/one/'], $network->id ); 190 } 191 192 public function filter_network_path_segments() { 193 return 1; 194 } 195 196 /** 197 * @ticket 27003 198 * @ticket 27927 199 * @dataProvider data_get_site_by_path 200 * 201 * @param string $expected_key The array key associated with expected data for the test. 202 * @param string $domain The requested domain. 203 * @param string $path The requested path. 204 * @param int $segments Optional. Number of segments to use in `get_site_by_path()`. 205 */ 206 public function test_get_site_by_path( $expected_key, $domain, $path, $segments = null ) { 207 $site = get_site_by_path( $domain, $path, $segments ); 208 209 if ( $expected_key ) { 210 $this->assertEquals( self::$site_ids[ $expected_key ], $site->blog_id ); 211 } else { 212 $this->assertFalse( $site ); 213 } 214 } 215 216 public function data_get_site_by_path() { 217 return array( 218 array( 'wordpress.org/', 'wordpress.org', '/notapath/' ), 219 array( 'wordpress.org/', 'www.wordpress.org', '/notapath/' ), 220 array( 'wordpress.org/foo/bar/', 'wordpress.org', '/foo/bar/baz/' ), 221 array( 'wordpress.org/foo/bar/', 'www.wordpress.org', '/foo/bar/baz/' ), 222 array( 'wordpress.org/foo/bar/', 'wordpress.org', '/foo/bar/baz/', 3 ), 223 array( 'wordpress.org/foo/bar/', 'www.wordpress.org', '/foo/bar/baz/', 3 ), 224 array( 'wordpress.org/foo/bar/', 'wordpress.org', '/foo/bar/baz/', 2 ), 225 array( 'wordpress.org/foo/bar/', 'www.wordpress.org', '/foo/bar/baz/', 2 ), 226 array( 'wordpress.org/foo/', 'wordpress.org', '/foo/bar/baz/', 1 ), 227 array( 'wordpress.org/foo/', 'www.wordpress.org', '/foo/bar/baz/', 1 ), 228 array( 'wordpress.org/', 'wordpress.org', '/', 0 ), 229 array( 'wordpress.org/', 'www.wordpress.org', '/', 0 ), 230 array( 'make.wordpress.org/foo/', 'make.wordpress.org', '/foo/bar/baz/quz/', 4 ), 231 array( 'make.wordpress.org/foo/', 'www.make.wordpress.org', '/foo/bar/baz/quz/', 4 ), 232 array( 'www.w.org/', 'www.w.org', '/', 0 ), 233 array( 'www.w.org/', 'www.w.org', '/notapath' ), 234 array( 'www.w.org/foo/bar/', 'www.w.org', '/foo/bar/baz/' ), 235 array( 'www.w.org/foo/', 'www.w.org', '/foo/bar/baz/', 1 ), 236 237 // A site installed with www will not be found by the root domain. 238 array( false, 'w.org', '/' ), 239 array( false, 'w.org', '/notapath/' ), 240 array( false, 'w.org', '/foo/bar/baz/' ), 241 array( false, 'w.org', '/foo/bar/baz/', 1 ), 242 243 // A site will not be found by its root domain when an invalid subdomain is requested. 244 array( false, 'invalid.wordpress.org', '/' ), 245 array( false, 'invalid.wordpress.org', '/foo/bar/' ), 246 ); 247 } 248 249 /** 250 * @ticket 27884 251 * @dataProvider data_multisite_bootstrap 252 * 253 * @param string $site_key The array key associated with the expected site for the test. 254 * @param string $network_key The array key associated with the expected network for the test. 255 * @param string $domain The requested domain. 256 * @param string $path The requested path. 257 */ 258 public function test_multisite_bootstrap( $site_key, $network_key, $domain, $path ) { 259 global $current_blog; 260 261 $expected = array( 262 'network_id' => self::$network_ids[ $network_key ], 263 'site_id' => self::$site_ids[ $site_key ], 264 ); 265 266 ms_load_current_site_and_network( $domain, $path ); 267 $actual = array( 268 'network_id' => $current_blog->site_id, 269 'site_id' => $current_blog->blog_id, 270 ); 271 ms_load_current_site_and_network( WP_TESTS_DOMAIN, '/' ); 272 273 $this->assertEqualSetsWithIndex( $expected, $actual ); 274 } 275 276 public function data_multisite_bootstrap() { 277 return array( 278 array( 'wordpress.org/', 'wordpress.org/', 'wordpress.org', '/' ), 279 array( 'wordpress.org/', 'wordpress.org/', 'wordpress.org', '/2014/04/23/hello-world/' ), 280 array( 'wordpress.org/', 'wordpress.org/', 'wordpress.org', '/sample-page/' ), 281 array( 'wordpress.org/', 'wordpress.org/', 'wordpress.org', '/?p=1' ), 282 array( 'wordpress.org/', 'wordpress.org/', 'wordpress.org', '/wp-admin/' ), 283 array( 'wordpress.org/foo/', 'wordpress.org/', 'wordpress.org', '/foo/' ), 284 array( 'wordpress.org/foo/', 'wordpress.org/', 'wordpress.org', '/FOO/' ), 285 array( 'wordpress.org/foo/', 'wordpress.org/', 'wordpress.org', '/foo/2014/04/23/hello-world/' ), 286 array( 'wordpress.org/foo/', 'wordpress.org/', 'wordpress.org', '/foo/sample-page/' ), 287 array( 'wordpress.org/foo/', 'wordpress.org/', 'wordpress.org', '/foo/?p=1' ), 288 array( 'wordpress.org/foo/', 'wordpress.org/', 'wordpress.org', '/foo/wp-admin/' ), 289 array( 'make.wordpress.org/', 'make.wordpress.org/', 'make.wordpress.org', '/' ), 290 array( 'make.wordpress.org/foo/', 'make.wordpress.org/', 'make.wordpress.org', '/foo/' ), 291 ); 292 } 293 294 /** 295 * @ticket 27884 296 */ 297 public function test_multisite_bootstrap_additional_path_segments() { 298 global $current_blog; 299 300 $expected = array( 301 'network_id' => self::$network_ids['wordpress.org/'], 302 'site_id' => self::$site_ids['wordpress.org/foo/bar/'], 303 ); 304 add_filter( 'site_by_path_segments_count', array( $this, 'filter_path_segments_to_two' ) ); 305 ms_load_current_site_and_network( 'wordpress.org', '/foo/bar/' ); 306 $actual = array( 307 'network_id' => $current_blog->site_id, 308 'site_id' => $current_blog->blog_id, 309 ); 310 remove_filter( 'site_by_path_segments_count', array( $this, 'filter_path_segments_to_two' ) ); 311 ms_load_current_site_and_network( WP_TESTS_DOMAIN, '/' ); 312 313 $this->assertEqualSetsWithIndex( $expected, $actual ); 314 } 315 316 /** 317 * @ticket 37053 318 */ 319 public function test_get_site_by_path_returns_wp_site() { 320 add_filter( 'pre_get_site_by_path', array( $this, 'filter_pre_get_site_by_path' ), 10, 3 ); 321 322 $site = get_site_by_path( 'example.com', '/foo/' ); 323 324 remove_filter( 'pre_get_site_by_path', array( $this, 'filter_pre_get_site_by_path' ), 10 ); 325 326 $this->assertInstanceOf( 'WP_Site', $site ); 327 } 328 329 public function filter_path_segments_to_two() { 330 return 2; 331 } 332 333 public function filter_pre_get_site_by_path( $site, $domain, $path ) { 334 $site = new stdClass(); 335 $site->blog_id = 100; 336 $site->domain = $domain; 337 $site->path = $path; 338 $site->site_id = 1; 339 340 return $site; 341 } 342 } 343 344 endif; 121 * @param string $expected_key The array key associated with expected data for the test. 122 * @param string $domain The requested domain. 123 * @param string $path The requested path. 124 * @param string $message The message to pass for failed tests. 125 */ 126 public function test_get_network_by_path( $expected_key, $domain, $path, $message ) { 127 $network = get_network_by_path( $domain, $path ); 128 $this->assertSame( self::$network_ids[ $expected_key ], $network->id, $message ); 129 } 130 131 public function data_get_network_by_path() { 132 return array( 133 array( 'wordpress.org/', 'wordpress.org', '/', 'A standard domain and path request should work.' ), 134 array( 'wordpress.net/', 'wordpress.net', '/notapath/', 'A missing path on a top level domain should find the correct network.' ), 135 array( 'www.wordpress.net/', 'www.wordpress.net', '/notapath/', 'A missing path should find the correct network.' ), 136 array( 'wordpress.org/one/', 'www.wordpress.org', '/one/', 'Should find the path despite the www.' ), 137 array( 'wordpress.org/one/', 'wordpress.org', '/one/page/', 'A request with two path segments should find the correct network.' ), 138 array( 'wordpress.org/one/b/', 'wordpress.org', '/one/b/', 'A request with two valid path segments should find the correct network.' ), 139 array( 'wordpress.org/', 'site1.wordpress.org', '/one/', 'Should not find path because domains do not match.' ), 140 array( 'wordpress.net/three/', 'wordpress.net', '/three/', 'A network can have a path.' ), 141 array( 'www.wordpress.net/two/', 'www.wordpress.net', '/two/', 'A www network with a path can coexist with a non-www network.' ), 142 array( 'wordpress.net/', 'site1.wordpress.net', '/notapath/', 'An invalid subdomain should find the top level network domain.' ), 143 array( 'wordpress.net/', 'site1.wordpress.net', '/three/', 'An invalid subdomain and path should find the top level network domain.' ), 144 array( 'wordpress.net/', 'x.y.wordpress.net', '/', 'An invalid two level subdomain should find the top level network domain.' ), 145 ); 146 } 147 148 /** 149 * @ticket 37217 150 * @dataProvider data_get_network_by_path_with_zero_path_segments 151 * 152 * @param string $expected_key The array key associated with expected data for the test. 153 * @param string $domain The requested domain. 154 * @param string $path The requested path. 155 * @param string $message The message to pass for failed tests. 156 */ 157 public function test_get_network_by_path_with_zero_path_segments( $expected_key, $domain, $path, $message ) { 158 add_filter( 'network_by_path_segments_count', '__return_zero' ); 159 160 $network = get_network_by_path( $domain, $path ); 161 162 remove_filter( 'network_by_path_segments_count', '__return_zero' ); 163 164 $this->assertSame( self::$network_ids[ $expected_key ], $network->id, $message ); 165 } 166 167 public function data_get_network_by_path_with_zero_path_segments() { 168 return array( 169 array( 'wordpress.org/', 'wordpress.org', '/', 'A standard domain and path request should work.' ), 170 array( 'wordpress.net/', 'wordpress.net', '/notapath/', 'A network matching a top level domain should be found regardless of path.' ), 171 array( 'www.wordpress.net/', 'www.wordpress.net', '/notapath/', 'A network matching a domain should be found regardless of path.' ), 172 array( 'wordpress.org/', 'www.wordpress.org', '/one/', 'Should find the network despite the www and regardless of path.' ), 173 array( 'wordpress.org/', 'site1.wordpress.org', '/one/', 'Should find the network with the corresponding top level domain regardless of path.' ), 174 array( 'www.wordpress.net/', 'www.wordpress.net', '/two/', 'A www network can coexist with a non-www network.' ), 175 array( 'make.wordpress.org/', 'make.wordpress.org', '/notapath/', 'A subdomain network should be found regardless of path.' ), 176 array( 'wordpress.net/', 'x.y.wordpress.net', '/', 'An invalid two level subdomain should find the top level network domain.' ), 177 ); 178 } 179 180 /** 181 * Even if a matching network is available, it should not match if the the filtered 182 * value for network path segments is fewer than the number of paths passed. 183 */ 184 public function test_get_network_by_path_with_forced_single_path_segment_returns_single_path_network() { 185 add_filter( 'network_by_path_segments_count', array( $this, 'filter_network_path_segments' ) ); 186 $network = get_network_by_path( 'wordpress.org', '/one/b/' ); 187 remove_filter( 'network_by_path_segments_count', array( $this, 'filter_network_path_segments' ) ); 188 189 $this->assertSame( self::$network_ids['wordpress.org/one/'], $network->id ); 190 } 191 192 public function filter_network_path_segments() { 193 return 1; 194 } 195 196 /** 197 * @ticket 27003 198 * @ticket 27927 199 * @dataProvider data_get_site_by_path 200 * 201 * @param string $expected_key The array key associated with expected data for the test. 202 * @param string $domain The requested domain. 203 * @param string $path The requested path. 204 * @param int $segments Optional. Number of segments to use in `get_site_by_path()`. 205 */ 206 public function test_get_site_by_path( $expected_key, $domain, $path, $segments = null ) { 207 $site = get_site_by_path( $domain, $path, $segments ); 208 209 if ( $expected_key ) { 210 $this->assertEquals( self::$site_ids[ $expected_key ], $site->blog_id ); 211 } else { 212 $this->assertFalse( $site ); 213 } 214 } 215 216 public function data_get_site_by_path() { 217 return array( 218 array( 'wordpress.org/', 'wordpress.org', '/notapath/' ), 219 array( 'wordpress.org/', 'www.wordpress.org', '/notapath/' ), 220 array( 'wordpress.org/foo/bar/', 'wordpress.org', '/foo/bar/baz/' ), 221 array( 'wordpress.org/foo/bar/', 'www.wordpress.org', '/foo/bar/baz/' ), 222 array( 'wordpress.org/foo/bar/', 'wordpress.org', '/foo/bar/baz/', 3 ), 223 array( 'wordpress.org/foo/bar/', 'www.wordpress.org', '/foo/bar/baz/', 3 ), 224 array( 'wordpress.org/foo/bar/', 'wordpress.org', '/foo/bar/baz/', 2 ), 225 array( 'wordpress.org/foo/bar/', 'www.wordpress.org', '/foo/bar/baz/', 2 ), 226 array( 'wordpress.org/foo/', 'wordpress.org', '/foo/bar/baz/', 1 ), 227 array( 'wordpress.org/foo/', 'www.wordpress.org', '/foo/bar/baz/', 1 ), 228 array( 'wordpress.org/', 'wordpress.org', '/', 0 ), 229 array( 'wordpress.org/', 'www.wordpress.org', '/', 0 ), 230 array( 'make.wordpress.org/foo/', 'make.wordpress.org', '/foo/bar/baz/quz/', 4 ), 231 array( 'make.wordpress.org/foo/', 'www.make.wordpress.org', '/foo/bar/baz/quz/', 4 ), 232 array( 'www.w.org/', 'www.w.org', '/', 0 ), 233 array( 'www.w.org/', 'www.w.org', '/notapath' ), 234 array( 'www.w.org/foo/bar/', 'www.w.org', '/foo/bar/baz/' ), 235 array( 'www.w.org/foo/', 'www.w.org', '/foo/bar/baz/', 1 ), 236 237 // A site installed with www will not be found by the root domain. 238 array( false, 'w.org', '/' ), 239 array( false, 'w.org', '/notapath/' ), 240 array( false, 'w.org', '/foo/bar/baz/' ), 241 array( false, 'w.org', '/foo/bar/baz/', 1 ), 242 243 // A site will not be found by its root domain when an invalid subdomain is requested. 244 array( false, 'invalid.wordpress.org', '/' ), 245 array( false, 'invalid.wordpress.org', '/foo/bar/' ), 246 ); 247 } 248 249 /** 250 * @ticket 27884 251 * @dataProvider data_multisite_bootstrap 252 * 253 * @param string $site_key The array key associated with the expected site for the test. 254 * @param string $network_key The array key associated with the expected network for the test. 255 * @param string $domain The requested domain. 256 * @param string $path The requested path. 257 */ 258 public function test_multisite_bootstrap( $site_key, $network_key, $domain, $path ) { 259 global $current_blog; 260 261 $expected = array( 262 'network_id' => self::$network_ids[ $network_key ], 263 'site_id' => self::$site_ids[ $site_key ], 264 ); 265 266 ms_load_current_site_and_network( $domain, $path ); 267 268 $actual = array( 269 'network_id' => $current_blog->site_id, 270 'site_id' => $current_blog->blog_id, 271 ); 272 273 ms_load_current_site_and_network( WP_TESTS_DOMAIN, '/' ); 274 275 $this->assertEqualSetsWithIndex( $expected, $actual ); 276 } 277 278 public function data_multisite_bootstrap() { 279 return array( 280 array( 'wordpress.org/', 'wordpress.org/', 'wordpress.org', '/' ), 281 array( 'wordpress.org/', 'wordpress.org/', 'wordpress.org', '/2014/04/23/hello-world/' ), 282 array( 'wordpress.org/', 'wordpress.org/', 'wordpress.org', '/sample-page/' ), 283 array( 'wordpress.org/', 'wordpress.org/', 'wordpress.org', '/?p=1' ), 284 array( 'wordpress.org/', 'wordpress.org/', 'wordpress.org', '/wp-admin/' ), 285 array( 'wordpress.org/foo/', 'wordpress.org/', 'wordpress.org', '/foo/' ), 286 array( 'wordpress.org/foo/', 'wordpress.org/', 'wordpress.org', '/FOO/' ), 287 array( 'wordpress.org/foo/', 'wordpress.org/', 'wordpress.org', '/foo/2014/04/23/hello-world/' ), 288 array( 'wordpress.org/foo/', 'wordpress.org/', 'wordpress.org', '/foo/sample-page/' ), 289 array( 'wordpress.org/foo/', 'wordpress.org/', 'wordpress.org', '/foo/?p=1' ), 290 array( 'wordpress.org/foo/', 'wordpress.org/', 'wordpress.org', '/foo/wp-admin/' ), 291 array( 'make.wordpress.org/', 'make.wordpress.org/', 'make.wordpress.org', '/' ), 292 array( 'make.wordpress.org/foo/', 'make.wordpress.org/', 'make.wordpress.org', '/foo/' ), 293 ); 294 } 295 296 /** 297 * @ticket 27884 298 */ 299 public function test_multisite_bootstrap_additional_path_segments() { 300 global $current_blog; 301 302 $expected = array( 303 'network_id' => self::$network_ids['wordpress.org/'], 304 'site_id' => self::$site_ids['wordpress.org/foo/bar/'], 305 ); 306 307 add_filter( 'site_by_path_segments_count', array( $this, 'filter_path_segments_to_two' ) ); 308 ms_load_current_site_and_network( 'wordpress.org', '/foo/bar/' ); 309 310 $actual = array( 311 'network_id' => $current_blog->site_id, 312 'site_id' => $current_blog->blog_id, 313 ); 314 315 remove_filter( 'site_by_path_segments_count', array( $this, 'filter_path_segments_to_two' ) ); 316 ms_load_current_site_and_network( WP_TESTS_DOMAIN, '/' ); 317 318 $this->assertEqualSetsWithIndex( $expected, $actual ); 319 } 320 321 /** 322 * @ticket 37053 323 */ 324 public function test_get_site_by_path_returns_wp_site() { 325 add_filter( 'pre_get_site_by_path', array( $this, 'filter_pre_get_site_by_path' ), 10, 3 ); 326 327 $site = get_site_by_path( 'example.com', '/foo/' ); 328 329 remove_filter( 'pre_get_site_by_path', array( $this, 'filter_pre_get_site_by_path' ), 10 ); 330 331 $this->assertInstanceOf( 'WP_Site', $site ); 332 } 333 334 public function filter_path_segments_to_two() { 335 return 2; 336 } 337 338 public function filter_pre_get_site_by_path( $site, $domain, $path ) { 339 $site = new stdClass(); 340 $site->blog_id = 100; 341 $site->domain = $domain; 342 $site->path = $path; 343 $site->site_id = 1; 344 345 return $site; 346 } 347 }
Note: See TracChangeset
for help on using the changeset viewer.