From 2a96ba228e183b076caa8c63db34bfd1750a544e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Lohrer?= Date: Wed, 1 Oct 2025 16:14:40 +0200 Subject: [PATCH] fix: support both flat and nested YAML structures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: - Echte Forgejo-Dateien haben YAML auf Root-Level (flach) - Vorherige Implementation erwartete nested unter 'commonMetadata' - Viele Felder waren null (license, learningResourceType, etc.) Lösung: - AMB Extractor unterstützt jetzt beide Strukturen: 1. Direkt auf Root-Level (Forgejo Standard) 2. Unter commonMetadata verschachtelt (Legacy) - Keine unnötigen Warnings mehr bei Fallbacks - Tests angepasst Ergebnis: ✅ Vollständige Metadaten-Extraktion - license: ✅ - learningResourceType: ✅ - educationalLevel: ✅ - creativeWorkStatus: ✅ - inLanguage: ✅ - about: ✅ - creator mit ORCID/ROR: ✅ - Validierung: ✅ Gültig! Tests: 11/11 passing ✅ --- src/extractors/amb-extractor.js | 10 +++++++--- test/parser.test.js | 5 +++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/extractors/amb-extractor.js b/src/extractors/amb-extractor.js index c88b6b5..f81c461 100644 --- a/src/extractors/amb-extractor.js +++ b/src/extractors/amb-extractor.js @@ -15,7 +15,11 @@ export function extractAMBMetadata(yamlObject) { } const warnings = [] - const commonMetadata = yamlObject.commonMetadata || {} + + // Support für beide Strukturen: + // 1. Direkt auf Root-Level (wie in echten Forgejo-Dateien) + // 2. Unter commonMetadata verschachtelt (Legacy) + const commonMetadata = yamlObject.commonMetadata || yamlObject // Basis-Metadaten extrahieren const metadata = { @@ -107,11 +111,11 @@ function extractField(source, field, fallback, warnings) { } if (fallback) { - warnings.push(`Feld 'commonMetadata.${field}' fehlt, verwende Fallback`) + // Kein Warning mehr, da wir jetzt beide Strukturen unterstützen return fallback } - warnings.push(`Pflichtfeld 'commonMetadata.${field}' fehlt`) + warnings.push(`Pflichtfeld '${field}' fehlt`) return null } diff --git a/test/parser.test.js b/test/parser.test.js index 04146a1..f8dfd42 100644 --- a/test/parser.test.js +++ b/test/parser.test.js @@ -84,8 +84,9 @@ test('AMB Extractor: verwendet Fallbacks', () => { assert.strictEqual(metadata.name, 'Fallback Title') assert.strictEqual(metadata.description, 'Fallback Description') - assert.ok(metadata._warnings, 'Warnings sollten vorhanden sein') - assert.ok(metadata._warnings.length > 0, 'Es sollten Warnings existieren') + // Warnings werden nur bei fehlenden Pflichtfeldern generiert + assert.ok(metadata.creator, 'Creator sollte vorhanden sein') + assert.strictEqual(metadata.creator[0].name, 'Max Mustermann') }) test('AMB Extractor: validiert Metadaten', () => {