fix: tb-assign reattaches only templates no Theme Builder post lists (audit L4)

"Detached" now means for lit/tb-assign what lit/tb-list shows as detached:
DiviThemeBuilder::isListedAnywhere() looks for any _et_template row (live,
draft or Theme Builder library post). A template another Theme Builder post
lists is refused with or without reattach; nothing is written.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
This commit is contained in:
2026-09-27 23:06:35 +02:00
co-authored by Claude Opus 5.5
parent dcae2d4b91
commit e64d32b1f1
6 changed files with 95 additions and 3 deletions
@@ -26,6 +26,38 @@ final class DiviThemeBuilderTest extends TestCase
self::assertNull(DiviThemeBuilder::areaOf('page'));
}
/** Review M-3: one list of every Theme Builder post type. */
public function testPostTypesNameEveryThemeBuilderType(): void
{
self::assertSame(
['et_theme_builder', 'et_template', 'et_header_layout', 'et_body_layout', 'et_footer_layout'],
DiviThemeBuilder::postTypes()
);
}
/** Audit L4: a template is listed when any Theme Builder post's _et_template row names it. */
public function testIsListedAnywhereAsksEveryThemeBuilderPost(): void
{
$db = Mockery::mock(\wpdb::class)->makePartial();
$db->postmeta = 'wp_postmeta';
$sql = [];
$db->allows('get_var')->andReturnUsing(static function (string $query) use (&$sql): ?string {
$sql[] = $query;
return str_contains($query, "'1066'") ? '1' : null;
});
$GLOBALS['wpdb'] = $db;
try {
self::assertTrue((new DiviThemeBuilder())->isListedAnywhere(1066));
self::assertFalse((new DiviThemeBuilder())->isListedAnywhere(2394));
} finally {
unset($GLOBALS['wpdb']);
}
self::assertStringContainsString("meta_key = '_et_template'", $sql[0]);
self::assertStringContainsString('LIMIT 1', $sql[0]);
}
/** F17/F18: Divi wp_die()s without edit_others_posts – the adapter never gets there. */
public function testWithoutEditOthersPostsDiviIsNeverCalled(): void
{