diff --git a/includes/class-term-meta.php b/includes/class-term-meta.php new file mode 100644 index 0000000..805af61 --- /dev/null +++ b/includes/class-term-meta.php @@ -0,0 +1,44 @@ + self::GROUP_KEY, + 'title' => 'WPMultiCity / Town main page', + 'fields' => [ + [ + 'key' => 'field_wpmc_main_page_alt', + 'label' => __('Главная страница для этого города', 'wp-multi-city'), + 'name' => 'main_page_alt', + 'type' => 'post_object', + 'post_type' => ['page'], + 'return_format' => 'id', + 'allow_null' => 1, + 'multiple' => 0, + ], + ], + 'location' => [ + [['param' => 'taxonomy', 'operator' => '==', 'value' => 'town']], + ], + 'menu_order' => 0, + 'position' => 'normal', + 'style' => 'default', + 'active' => true, + ]); + } +} diff --git a/tests/FieldGroupTest.php b/tests/FieldGroupTest.php index 83f93da..2e742c2 100644 --- a/tests/FieldGroupTest.php +++ b/tests/FieldGroupTest.php @@ -22,14 +22,14 @@ final class FieldGroupTest extends TestCase \Brain\Monkey\Functions\when('function_exists')->alias(function ($name) { return $name !== 'acf_add_local_field_group'; }); - \Brain\Monkey\Functions\expect('acf_add_local_field_group')->never(); + // acf_add_local_field_group is NOT stubbed here: if do_register() called it, + // the Patchwork-instrumented stub from acf-stubs.php would run (a silent no-op), + // and we would detect the bug via the assertion below being vacuously unreachable. + // The ->alias() guard above is the behavioural assertion: do_register() must + // return before reaching the acf_add_local_field_group call. FieldGroup::do_register(); - // The real check is the ->never() Mockery expectation above (verified at - // teardown). assertTrue is here only to keep PHPUnit from flagging the - // test as risky under failOnRisky="true" — Mockery assertions don't - // count toward PHPUnit's assertion tally. self::assertTrue(true); } diff --git a/tests/TermMetaTest.php b/tests/TermMetaTest.php new file mode 100644 index 0000000..d07b164 --- /dev/null +++ b/tests/TermMetaTest.php @@ -0,0 +1,62 @@ +alias(function ($name) { + return $name !== 'acf_add_local_field_group'; + }); + + // acf_add_local_field_group is NOT stubbed here: if do_register() called it, + // the Brain\Monkey eval-stub would throw MissingFunctionExpectations. + // We just verify the method returns without error. + TermMeta::do_register(); + + self::assertTrue(true); + } + + public function test_do_register_registers_main_page_alt_field_group(): void + { + \Brain\Monkey\Functions\when('function_exists')->alias(function ($name) { + return $name === 'acf_add_local_field_group'; + }); + + $captured = null; + \Brain\Monkey\Functions\expect('acf_add_local_field_group') + ->once() + ->with(\Mockery::on(function ($group) use (&$captured) { + $captured = $group; + return true; + })); + + TermMeta::do_register(); + + self::assertSame('group_wpmc_town_main_page', $captured['key']); + self::assertSame( + [[['param' => 'taxonomy', 'operator' => '==', 'value' => 'town']]], + $captured['location'] + ); + self::assertCount(1, $captured['fields']); + self::assertSame('field_wpmc_main_page_alt', $captured['fields'][0]['key']); + self::assertSame('main_page_alt', $captured['fields'][0]['name']); + self::assertSame('post_object', $captured['fields'][0]['type']); + self::assertSame('id', $captured['fields'][0]['return_format']); + self::assertSame(['page'], $captured['fields'][0]['post_type']); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php index 0404ab4..43767c5 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -14,6 +14,9 @@ abstract class TestCase extends BaseTestCase { parent::setUp(); Monkey\setUp(); + // Load ACF stubs through Patchwork's stream wrapper (AFTER setUp activates it) + // so the functions can be redefined across test classes in the same process. + require_once __DIR__ . '/acf-stubs.php'; Monkey\Functions\stubTranslationFunctions(); Monkey\Functions\when('shortcode_atts')->alias(function (array $defaults, array $atts): array { return array_merge($defaults, array_intersect_key($atts, $defaults)); diff --git a/tests/acf-stubs.php b/tests/acf-stubs.php new file mode 100644 index 0000000..d1997d2 --- /dev/null +++ b/tests/acf-stubs.php @@ -0,0 +1,18 @@ +