diff --git a/server/services/unterkunft/preis.js b/server/services/unterkunft/preis.js index 71beb29..41fb925 100644 --- a/server/services/unterkunft/preis.js +++ b/server/services/unterkunft/preis.js @@ -73,7 +73,7 @@ export function pruefePosten(posten, steuerart) { if (!p || typeof p !== 'object') return fehler('Ungültiger Posten.') const text = typeof p.text === 'string' ? p.text.trim() : '' if (!text || text.length > textMax) return fehler(`Der Text eines Postens muss 1 bis ${textMax} Zeichen lang sein.`) - if (!Number.isSafeInteger(p.menge) || p.menge < 1 || p.menge > 1000) return fehler('Die Menge muss eine positive ganze Zahl sein.') + if (!Number.isSafeInteger(p.menge) || p.menge < 1 || p.menge > 20000) return fehler('Die Menge muss eine positive ganze Zahl sein.') if (!Number.isSafeInteger(p.einzelCent) || Math.abs(p.einzelCent) > 10_000_000) return fehler('Der Einzelpreis ist ungültig.') if (!SAETZE.includes(p.ustProzent)) return fehler('Der Steuersatz muss 0, 7 oder 19 sein.') if (steuerart === 'kleinunternehmer' && p.ustProzent !== 0) return fehler('Bei Kleinunternehmern ist keine Umsatzsteuer erlaubt.') diff --git a/test/unterkunftPreis.test.js b/test/unterkunftPreis.test.js index 7a8bb23..04d9d28 100644 --- a/test/unterkunftPreis.test.js +++ b/test/unterkunftPreis.test.js @@ -145,7 +145,8 @@ test('preiseVollstaendig', () => { test('pruefePosten: negative Summe, Grenzen', () => { const ok = { text: 'a', menge: 1, einzelCent: 1000, ustProzent: 7 } assert.ok(pruefePosten([{ ...ok, einzelCent: -500 }], 'regel').fehler.posten) - assert.ok(pruefePosten([{ ...ok, menge: 1001 }], 'regel').fehler.posten) + assert.ok(pruefePosten([{ ...ok, menge: 20001 }], 'regel').fehler.posten) + assert.ok(pruefePosten([{ ...ok, menge: 20000 }], 'regel').posten) assert.ok(pruefePosten([{ ...ok, einzelCent: 10_000_001 }], 'regel').fehler.posten) assert.ok(pruefePosten([{ ...ok, menge: 2 ** 53 }], 'regel').fehler.posten) }) @@ -167,3 +168,9 @@ test('preiseVollstaendig: strenge Faelle', () => { assert.equal(f({ direktrabattProzent: 2.5 }), false) assert.equal(f({ direktrabattProzent: 50 }), true) }) + +test('berechnePreis: 20 Personen ueber 548 Naechte besteht pruefePosten', () => { + const r = berechnePreis({ preise: PREISE, von: '2026-11-01', bis: plusTage('2026-11-01', 548), personen: 20 }) + assert.equal(r.posten[1].menge, 18 * 548) + assert.ok(pruefePosten(r.posten, 'regel').posten) +})