Files
wp-multi-city/tests/RouterTest.php
T
2026-05-16 19:57:28 +05:00

95 lines
3.0 KiB
PHP

<?php
declare(strict_types=1);
namespace WPMultiCity\Tests;
use WPMultiCity\Router;
final class RouterTest extends TestCase
{
public function test_register_attaches_wp_action_at_priority_9999(): void
{
Router::register();
self::assertSame(
9999,
has_action('wp', [Router::class, 'route']),
'Router::register() must hook wp action at priority 9999'
);
}
public function test_register_attaches_query_vars_filter(): void
{
Router::register();
self::assertNotFalse(
has_filter('query_vars', [Router::class, 'add_town_query_var']),
'Router::register() must hook query_vars filter'
);
}
public function test_add_town_query_var_appends_town(): void
{
$vars = ['p', 'page_id'];
$result = Router::add_town_query_var($vars);
self::assertContains('town', $result);
}
public function test_route_skips_when_is_admin(): void
{
\Brain\Monkey\Functions\expect('get_terms')->never();
\Brain\Monkey\Functions\when('is_admin')->justReturn(true);
Router::route();
self::assertArrayNotHasKey('wp_query', $GLOBALS);
}
public function test_route_skips_when_current_town_is_null(): void
{
\Brain\Monkey\Functions\expect('url_to_postid')->never();
\Brain\Monkey\Functions\when('is_admin')->justReturn(false);
$_SERVER['REQUEST_URI'] = '/something-not-a-city/';
\Brain\Monkey\Functions\when('get_terms')->justReturn([10 => 'spb']);
\Brain\Monkey\Functions\when('get_field')->justReturn(false);
Router::route();
self::assertArrayNotHasKey('wp_query', $GLOBALS);
}
public function test_route_skips_when_current_town_equals_main_town(): void
{
\Brain\Monkey\Functions\expect('url_to_postid')->never();
\Brain\Monkey\Functions\when('is_admin')->justReturn(false);
$_SERVER['REQUEST_URI'] = '/spb/';
\Brain\Monkey\Functions\when('get_terms')->justReturn([10 => 'spb']);
\Brain\Monkey\Functions\when('get_field')->alias(function ($name) {
if ($name === 'main_town_slug') return 'spb';
return false;
});
Router::route();
self::assertArrayNotHasKey('wp_query', $GLOBALS);
}
public function test_route_skips_when_path_not_routable(): void
{
\Brain\Monkey\Functions\expect('url_to_postid')->never();
\Brain\Monkey\Functions\when('is_admin')->justReturn(false);
$_SERVER['REQUEST_URI'] = '/tyumen/privacy/';
\Brain\Monkey\Functions\when('get_terms')->justReturn([11 => 'tyumen']);
\Brain\Monkey\Functions\when('get_field')->alias(function ($name) {
if ($name === 'main_town_slug') return 'spb';
if ($name === 'page_no_rep') return [['link' => '/privacy/']];
return false;
});
Router::route();
self::assertArrayNotHasKey('wp_query', $GLOBALS);
}
}