83 lines
2.8 KiB
JavaScript
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!");
|