feat(wpmc S4): TermMeta registers ACF main_page_alt on taxonomy town

Add acf-stubs.php + TestCase::setUp() require-after-Patchwork pattern so
acf_add_local_field_group is Patchwork-instrumented and re-interceptable
across FieldGroupTest and TermMetaTest in the same PHP process.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Vladimir Bryzgalov
2026-05-16 19:33:39 +05:00
parent b967a3a59f
commit 494061e39f
5 changed files with 132 additions and 5 deletions
+62
View File
@@ -0,0 +1,62 @@
<?php
declare(strict_types=1);
namespace WPMultiCity\Tests;
use WPMultiCity\TermMeta;
final class TermMetaTest extends TestCase
{
public function test_register_attaches_acf_init_action(): void
{
TermMeta::register();
self::assertNotFalse(
has_action('acf/init', [TermMeta::class, 'do_register']),
'TermMeta::register() must hook acf/init'
);
}
public function test_do_register_is_noop_when_acf_missing(): void
{
\Brain\Monkey\Functions\when('function_exists')->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']);
}
}