it-praxisportal/courses/javascript/05_objekte_und_destructuring/test_aufgabe.js

83 lines
2.8 KiB
JavaScript

// 🧪 JS 03: Testsuite für Objekte, Destructuring & Rest/Spread
// Test 1: erstelleBenutzer
const user1 = erstelleBenutzer("Max Mustermann", "max@beispiel.de");
assert.deepStrictEqual(
user1,
{ name: "Max Mustermann", email: "max@beispiel.de", rolle: "user" },
"erstelleBenutzer() sollte Standard-Rolle 'user' und korrekte Attribute besitzen"
);
const adminUser = erstelleBenutzer("Alice Admin", "alice@corp.de", "admin");
assert.deepStrictEqual(
adminUser,
{ name: "Alice Admin", email: "alice@corp.de", rolle: "admin" },
"erstelleBenutzer() sollte benutzerdefinierte Rolle 'admin' unterstützen"
);
// Test 2: extrahiereDetails
const details1 = extrahiereDetails({ name: "Anna Schmidt", email: "anna@web.de", rolle: "user" });
assert.strictEqual(
details1,
"Anna Schmidt (anna@web.de)",
"extrahiereDetails() sollte 'Name (Email)' zurückgeben"
);
const details2 = extrahiereDetails({ name: "Bob", email: "bob@dev.io", alter: 30 });
assert.strictEqual(
details2,
"Bob (bob@dev.io)",
"extrahiereDetails() sollte auch mit zusätzlichen Objekt-Eigenschaften funktionieren"
);
// Test 3: fuegeAdresseHinzu & Immutability Check
const basisBenutzer = { name: "Sarah", email: "sarah@mail.de" };
const adresse = { stadt: "Hamburg", plz: "20095" };
const kombiniert = fuegeAdresseHinzu(basisBenutzer, adresse);
assert.deepStrictEqual(
kombiniert,
{ name: "Sarah", email: "sarah@mail.de", stadt: "Hamburg", plz: "20095" },
"fuegeAdresseHinzu() sollte Benutzer und Adresse zu einem neuen Objekt verschmelzen"
);
assert.strictEqual(
basisBenutzer.stadt,
undefined,
"fuegeAdresseHinzu() darf das Originalobjekt nicht mutieren (Immutability)"
);
// Test 4: zaehleEigenschaften
assert.strictEqual(zaehleEigenschaften({ a: 1, b: 2, c: 3 }), 3, "zaehleEigenschaften({a:1, b:2, c:3}) sollte 3 ergeben");
assert.strictEqual(zaehleEigenschaften({}), 0, "zaehleEigenschaften({}) für leeres Objekt sollte 0 sein");
assert.strictEqual(
zaehleEigenschaften({ id: 101, title: "Laptop", preis: 999, verfuegbar: true }),
4,
"zaehleEigenschaften() sollte 4 Eigenschaften korrekt zählen"
);
// Test 5: berechneWarenkorbGesamtwert
const warenkorb = [
{ titel: "Buch", preis: 20, anzahl: 2 },
{ titel: "Maus", preis: 15, anzahl: 3 },
{ titel: "Kabel", preis: 5, anzahl: 1 }
];
assert.strictEqual(
berechneWarenkorbGesamtwert(warenkorb),
90,
"berechneWarenkorbGesamtwert() sollte 20*2 + 15*3 + 5*1 = 90 berechnen"
);
const warenkorbMitDefault = [{ titel: "Monitor", preis: 199 }];
assert.strictEqual(
berechneWarenkorbGesamtwert(warenkorbMitDefault),
199,
"berechneWarenkorbGesamtwert() sollte anzahl = 1 als Fallback nutzen"
);
assert.strictEqual(
berechneWarenkorbGesamtwert([]),
0,
"berechneWarenkorbGesamtwert([]) für leeren Warenkorb sollte 0 sein"
);
console.log("✅ Alle 10 Tests in JS 03 erfolgreich bestanden!");