diff --git a/json_to_md.py b/json_to_md.py index 6e469916..88c0fa05 100644 --- a/json_to_md.py +++ b/json_to_md.py @@ -70,35 +70,61 @@ def json_to_md_nested(json_path, md_path, allure_dir=None): f.write("\n") if "collectors" in data: - f.write("## 📚 Collectés (Arborescence)\n") + f.write("## 📚 Collectors (Arborescence)\n") + + # 1. Structurer les données + collector_tree = defaultdict(lambda: { + 'files': defaultdict(list), + 'outcome': None, + 'result': None + }) - # 1. Construire l'arborescence - tree = defaultdict(lambda: defaultdict(list)) for collector in data["collectors"]: nodeid = collector.get("nodeid", "unknown") + outcome = collector.get("outcome", "unknown") + result = collector.get("result", []) parts = nodeid.split("::") + if len(parts) >= 2: - file_path = parts[0] - test_name = parts[1] - dirs = file_path.split("/") + path = parts[0] + test_name = parts[1].split("[")[0] # Retire les paramètres + dirs = path.split("/") - current_level = tree - for dir_name in dirs[:-1]: # Parcourir les répertoires - current_level = current_level[dir_name] - current_level[dirs[-1]].append(test_name) # Ajouter le fichier et le test - - # 2. Fonction récursive pour afficher l'arborescence - def print_tree(node, indent=0, f=f): - for key, value in sorted(node.items()): - if isinstance(value, dict): - f.write(" " * indent + f"- 📁 {key}\n") - print_tree(value, indent + 1, f) - elif isinstance(value, list): - f.write(" " * indent + f"- 📄 {key}\n") - for test in sorted(value): - f.write(" " * (indent + 1) + f" - 🧪 {test}\n") - - print_tree(tree) + current = collector_tree + for dir_name in dirs[:-1]: + current = current[dir_name]['files'] + current['files'][dirs[-1]].append({ + 'test_name': test_name, + 'outcome': outcome, + 'result': result + }) + + # 2. Fonction d'affichage récursive + def print_collector_tree(node, level=0, f=f): + indent = " " * level + for name, data in sorted(node.items()): + if name == 'files': + for file_name, tests in sorted(data.items()): + f.write(f"{indent}-
📄 {file_name}\n\n") + for test in tests: + emoji = "✅" if test['outcome'] == "passed" else "❌" + f.write(f"{indent} - {emoji} `{test['test_name']}`\n") + if test['result']: + f.write(f"{indent} - **result:**\n```\n") + for item in test['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(f"{indent}
\n") + elif isinstance(data, dict): + f.write(f"{indent}-
📁 {name}\n\n") + print_collector_tree(data, level + 1, f) + f.write(f"{indent}
\n") + + print_collector_tree(collector_tree) f.write("\n") if "tests" in data and "summary" in data: