diff --git a/Shared/Infrastructure/Scripts/test-specific-cases.php b/Shared/Infrastructure/Scripts/test-specific-cases.php new file mode 100644 index 00000000..cbd9c594 --- /dev/null +++ b/Shared/Infrastructure/Scripts/test-specific-cases.php @@ -0,0 +1,187 @@ +set_charset("utf8mb4"); + +// IDs a probar (casos variados) +$test_ids = [20, 23, 65, 377, 98, 107, 144]; + +function detectIssues($html) { + $issues = []; + libxml_use_internal_errors(true); + $doc = new DOMDocument("1.0", "UTF-8"); + $doc->loadHTML('
' . $html . '
', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); + libxml_clear_errors(); + + $validChildren = ["li", "script", "template"]; + foreach (["ul", "ol"] as $tag) { + foreach ($doc->getElementsByTagName($tag) as $list) { + foreach ($list->childNodes as $child) { + if ($child->nodeType === XML_ELEMENT_NODE) { + $childTag = strtolower($child->nodeName); + if (!in_array($childTag, $validChildren)) { + $issues[] = "<$tag> contiene <$childTag>"; + } + } + } + } + } + return $issues; +} + +function fixMalformedLists($html) { + $result = ['fixed' => false, 'html' => $html, 'changes' => 0]; + + libxml_use_internal_errors(true); + $doc = new DOMDocument("1.0", "UTF-8"); + $doc->loadHTML('
' . $html . '
', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); + libxml_clear_errors(); + + $lists = []; + foreach ($doc->getElementsByTagName('ul') as $ul) { $lists[] = $ul; } + foreach ($doc->getElementsByTagName('ol') as $ol) { $lists[] = $ol; } + + $changes = 0; + $validChildren = ["li", "script", "template"]; + + foreach ($lists as $list) { + $nodesToProcess = []; + foreach ($list->childNodes as $child) { + if ($child->nodeType === XML_ELEMENT_NODE) { + $tagName = strtolower($child->nodeName); + if (!in_array($tagName, $validChildren)) { + $nodesToProcess[] = $child; + } + } + } + + foreach ($nodesToProcess as $node) { + $tagName = strtolower($node->nodeName); + $prevLi = null; + $prev = $node->previousSibling; + + while ($prev) { + if ($prev->nodeType === XML_ELEMENT_NODE && strtolower($prev->nodeName) === 'li') { + $prevLi = $prev; + break; + } + $prev = $prev->previousSibling; + } + + if ($prevLi) { + $prevLi->appendChild($node); + $changes++; + } else { + $newLi = $doc->createElement('li'); + $list->insertBefore($newLi, $node); + $newLi->appendChild($node); + $changes++; + } + } + } + + if ($changes > 0) { + $wrapper = $doc->getElementById('w'); + if ($wrapper) { + $innerHTML = ''; + foreach ($wrapper->childNodes as $child) { + $innerHTML .= $doc->saveHTML($child); + } + $result['html'] = $innerHTML; + $result['fixed'] = true; + $result['changes'] = $changes; + } + } + + return $result; +} + +echo "=====================================================\n"; +echo " PRUEBA DE CORRECCIÓN EN CASOS VARIADOS\n"; +echo "=====================================================\n\n"; + +$ids_str = implode(',', $test_ids); +$query = "SELECT id, page, html FROM datos_seo_pagina WHERE id IN ($ids_str)"; +$result = $conn->query($query); + +$all_passed = true; + +while ($row = $result->fetch_assoc()) { + $id = $row['id']; + $url = $row['page']; + $html = $row['html']; + + echo "─────────────────────────────────────────────────\n"; + echo "POST ID: $id\n"; + echo "URL: $url\n\n"; + + // Detectar problemas antes + $issues_before = detectIssues($html); + echo "ANTES:\n"; + echo " Problemas: " . count($issues_before) . "\n"; + $unique_types = array_unique($issues_before); + foreach ($unique_types as $type) { + echo " - $type\n"; + } + + // Aplicar corrección + $fixResult = fixMalformedLists($html); + + // Detectar problemas después + $issues_after = detectIssues($fixResult['html']); + + echo "\nDESPUÉS:\n"; + echo " Cambios aplicados: {$fixResult['changes']}\n"; + echo " Problemas restantes: " . count($issues_after) . "\n"; + + if (count($issues_after) > 0) { + echo " ⚠️ Problemas NO resueltos:\n"; + foreach (array_unique($issues_after) as $type) { + echo " - $type\n"; + } + $all_passed = false; + } + + // Verificar integridad del HTML + $tags_before = [ + 'ul' => substr_count($html, ' substr_count($html, ' substr_count($html, ' substr_count($fixResult['html'], ' substr_count($fixResult['html'], ' substr_count($fixResult['html'], ': {$tags_before['ul']} → {$tags_after['ul']} "; + echo ($tags_before['ul'] === $tags_after['ul'] ? "✓" : "⚠️ CAMBIÓ") . "\n"; + echo "
    : {$tags_before['ol']} → {$tags_after['ol']} "; + echo ($tags_before['ol'] === $tags_after['ol'] ? "✓" : "⚠️ CAMBIÓ") . "\n"; + echo "
  1. : {$tags_before['li']} → {$tags_after['li']} "; + echo ($tags_before['li'] === $tags_after['li'] ? "✓" : "⚠️ CAMBIÓ") . "\n"; + + // Resultado + if (count($issues_after) === 0 && + $tags_before['ul'] === $tags_after['ul'] && + $tags_before['ol'] === $tags_after['ol']) { + echo "\n✅ RESULTADO: CORRECCIÓN EXITOSA\n"; + } else { + echo "\n❌ RESULTADO: REQUIERE REVISIÓN\n"; + $all_passed = false; + } +} + +echo "\n=====================================================\n"; +if ($all_passed) { + echo "✅ TODOS LOS CASOS PASARON LA PRUEBA\n"; +} else { + echo "⚠️ ALGUNOS CASOS REQUIEREN REVISIÓN\n"; +} +echo "=====================================================\n"; + +$conn->close();