diff --git a/json_to_md.py b/json_to_md.py index 058f161a5..41a1456b5 100644 --- a/json_to_md.py +++ b/json_to_md.py @@ -70,37 +70,66 @@ def json_to_md_nested(json_path, md_path, allure_dir=None): f.write("\n") if "collectors" in data: - f.write("## 📚 Collectés (Par Fichier)\n\n") + f.write("## 🌳 Collectés (Arborescence)\n\n") - # 1. Filtrage et nettoyage des collectors valides - valid_collectors = [] + # 1. Construire l'arborescence + tree = {} for collector in data["collectors"]: nodeid = collector.get("nodeid", "") - if "::" in nodeid: # Uniquement les nodeids valides - filename, testname = nodeid.split("::", 1) - filename = filename.replace("tests/", "").replace("tests\\", "") - testname = testname.split("[")[0] # Enlève les paramètres - valid_collectors.append((filename, testname, collector)) - - # 2. Groupement par fichier - files = defaultdict(list) - for filename, testname, collector in valid_collectors: - files[filename].append((testname, collector)) - - # 3. Affichage structuré - for filename, tests in sorted(files.items()): - f.write(f"### 📄 {filename}\n") - for testname, collector in sorted(tests): - outcome = collector.get("outcome", "unknown") - emoji = "✅" if outcome == "passed" else "❌" + if not nodeid or "::" not in nodeid: + continue - f.write(f"- {emoji} `{testname}`\n") - if collector.get("result"): - f.write(" ```\n") - for item in collector["result"]: - f.write(f" {str(item)}\n") - f.write(" ```\n") - f.write("\n") + path, testname = nodeid.split("::", 1) + testname = testname.split("[")[0] # Enlever les paramètres + + # Construire la structure de dossiers + current = tree + parts = path.split("/") + for part in parts[:-1]: # Parcourir les dossiers + if part not in current: + current[part] = {} + current = current[part] + + # Ajouter le test + filename = parts[-1] + if filename not in current: + current[filename] = [] + current[filename].append((testname, collector)) + + # 2. Fonction récursive d'affichage + def print_tree(node, indent=0): + for name, value in sorted(node.items()): + if isinstance(value, list): # Fichier avec tests + f.write(" " * indent + f"
\n") + f.write(" " * indent + f"📄 {name}\n\n") + + for testname, collector in value: + outcome = collector.get("outcome", "unknown") + emoji = "✅" if outcome == "passed" else "❌" + + f.write(" " * (indent+1) + f"
\n") + f.write(" " * (indent+1) + f"{emoji} {testname}\n\n") + f.write(" " * (indent+2) + f"- **outcome:** `{outcome}`\n") + + if collector.get("result"): + f.write(" " * (indent+2) + "- **result:**\n```\n") + for item in collector["result"]: + if isinstance(item, dict): + for k, v in item.items(): + f.write(f" {k}: {v}\n") + else: + f.write(f" {item}\n") + f.write("```\n") + + f.write(" " * (indent+1) + "
\n\n") + f.write(" " * indent + "
\n\n") + else: # Dossier + f.write(" " * indent + f"
\n") + f.write(" " * indent + f"📁 {name}\n\n") + print_tree(value, indent + 1) + f.write(" " * indent + "
\n\n") + + print_tree(tree)