fix: support both flat and nested YAML structures

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 
This commit is contained in:
Jörg Lohrer 2025-10-01 16:14:40 +02:00
parent 9fe34cc743
commit 2a96ba228e
2 changed files with 10 additions and 5 deletions

View file

@ -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
}

View file

@ -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', () => {