1f343dfaf2
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
133 lines
4.0 KiB
PHP
133 lines
4.0 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace WPMultiCity\Tests;
|
|
|
|
use WPMultiCity\Helpers;
|
|
|
|
final class HelpersTest extends TestCase
|
|
{
|
|
public function test_get_term_by_slug_returns_wp_term_when_found(): void
|
|
{
|
|
$term = new \WP_Term();
|
|
$term->term_id = 42;
|
|
$term->slug = 'tyumen';
|
|
$term->taxonomy = 'town';
|
|
|
|
\Brain\Monkey\Functions\expect('get_term_by')
|
|
->once()
|
|
->with('slug', 'tyumen', 'town')
|
|
->andReturn($term);
|
|
|
|
$result = Helpers::get_term_by_slug('tyumen');
|
|
|
|
self::assertInstanceOf(\WP_Term::class, $result);
|
|
self::assertSame(42, $result->term_id);
|
|
self::assertSame('tyumen', $result->slug);
|
|
}
|
|
|
|
public function test_get_term_by_slug_returns_null_when_not_found(): void
|
|
{
|
|
\Brain\Monkey\Functions\expect('get_term_by')
|
|
->once()
|
|
->with('slug', 'nonexistent', 'town')
|
|
->andReturn(false);
|
|
|
|
self::assertNull(Helpers::get_term_by_slug('nonexistent'));
|
|
}
|
|
|
|
public function test_get_term_by_slug_caches_results_within_request(): void
|
|
{
|
|
\Brain\Monkey\Functions\expect('get_term_by')
|
|
->once()
|
|
->with('slug', 'tyumen', 'town')
|
|
->andReturn(false);
|
|
|
|
Helpers::get_term_by_slug('tyumen');
|
|
Helpers::get_term_by_slug('tyumen');
|
|
Helpers::get_term_by_slug('tyumen');
|
|
|
|
// Mockery ->once() at teardown verifies the cache stopped repeated calls.
|
|
self::assertTrue(true);
|
|
}
|
|
|
|
public function test_current_town_returns_slug_when_uri_matches_existing_town(): void
|
|
{
|
|
$_SERVER['REQUEST_URI'] = '/tyumen/some-service/';
|
|
|
|
\Brain\Monkey\Functions\expect('get_terms')
|
|
->once()
|
|
->with('town', \Mockery::on(function ($args) {
|
|
return ($args['hide_empty'] ?? null) === false
|
|
&& ($args['fields'] ?? null) === 'id=>slug';
|
|
}))
|
|
->andReturn([10 => 'spb', 11 => 'tyumen']);
|
|
|
|
self::assertSame('tyumen', Helpers::current_town());
|
|
}
|
|
|
|
public function test_current_town_returns_null_when_uri_does_not_match_and_no_filter(): void
|
|
{
|
|
$_SERVER['REQUEST_URI'] = '/some-random-page/';
|
|
|
|
\Brain\Monkey\Functions\expect('get_terms')
|
|
->andReturn([10 => 'spb', 11 => 'tyumen']);
|
|
|
|
self::assertNull(Helpers::current_town());
|
|
}
|
|
|
|
public function test_current_town_uses_main_town_slug_filter_when_uri_has_no_match(): void
|
|
{
|
|
$_SERVER['REQUEST_URI'] = '/';
|
|
|
|
\Brain\Monkey\Functions\expect('get_terms')
|
|
->andReturn([10 => 'spb', 11 => 'tyumen']);
|
|
\Brain\Monkey\Filters\expectApplied('wpmc_main_town_slug')
|
|
->once()
|
|
->with(null)
|
|
->andReturn('spb');
|
|
|
|
self::assertSame('spb', Helpers::current_town());
|
|
}
|
|
|
|
public function test_current_town_uri_match_wins_over_main_town_filter(): void
|
|
{
|
|
$_SERVER['REQUEST_URI'] = '/tyumen/';
|
|
|
|
\Brain\Monkey\Functions\expect('get_terms')
|
|
->andReturn([10 => 'spb', 11 => 'tyumen']);
|
|
// main_town filter should not be consulted when URI matches.
|
|
\Brain\Monkey\Filters\expectApplied('wpmc_main_town_slug')->never();
|
|
|
|
self::assertSame('tyumen', Helpers::current_town());
|
|
}
|
|
|
|
public function test_current_town_slug_filter_overrides_final_value(): void
|
|
{
|
|
$_SERVER['REQUEST_URI'] = '/';
|
|
|
|
\Brain\Monkey\Functions\expect('get_terms')
|
|
->andReturn([]);
|
|
\Brain\Monkey\Filters\expectApplied('wpmc_current_town_slug')
|
|
->once()
|
|
->andReturn('override-slug');
|
|
|
|
self::assertSame('override-slug', Helpers::current_town());
|
|
}
|
|
|
|
public function test_current_town_memoizes_within_request(): void
|
|
{
|
|
$_SERVER['REQUEST_URI'] = '/tyumen/';
|
|
|
|
\Brain\Monkey\Functions\expect('get_terms')
|
|
->once()
|
|
->andReturn([10 => 'spb', 11 => 'tyumen']);
|
|
|
|
Helpers::current_town();
|
|
Helpers::current_town();
|
|
Helpers::current_town();
|
|
|
|
self::assertTrue(true);
|
|
}
|
|
}
|