From 3c0f1cee075d09167ceaa0f10f92d511f3f6a912 Mon Sep 17 00:00:00 2001 From: Christian Khazanovych <3028363@stud.th-mannheim.de> Date: Wed, 24 Jun 2026 17:38:34 +0200 Subject: [PATCH] Gruppe K: Belegworkflow Tests hinzugefuegt - 10/10 bestanden --- data/angebot_counter.txt | 1 + data/angebote.csv | 9 ++ data/rechnung_counter.txt | 1 + data/rechnungen.csv | 5 + out/belegworkflow/BelegworkflowTest.class | Bin 0 -> 5120 bytes .../java/belegworkflow/BelegworkflowTest.java | 145 ++++++++++++++++++ 6 files changed, 161 insertions(+) create mode 100644 data/angebot_counter.txt create mode 100644 data/angebote.csv create mode 100644 data/rechnung_counter.txt create mode 100644 data/rechnungen.csv create mode 100644 out/belegworkflow/BelegworkflowTest.class create mode 100644 src/test/java/belegworkflow/BelegworkflowTest.java diff --git a/data/angebot_counter.txt b/data/angebot_counter.txt new file mode 100644 index 0000000..f11c82a --- /dev/null +++ b/data/angebot_counter.txt @@ -0,0 +1 @@ +9 \ No newline at end of file diff --git a/data/angebote.csv b/data/angebote.csv new file mode 100644 index 0000000..dda9032 --- /dev/null +++ b/data/angebote.csv @@ -0,0 +1,9 @@ +AN-2026-000001;2026-06-24;K-000001;2026-07-24;OFFEN;0.00;0.00;0.00 +AN-2026-000002;2026-06-24;K-000001;2026-07-24;OFFEN;0.00;0.00;0.00 +AN-2026-000003;2026-06-24;K-000001;2026-07-24;UEBERFUEHRT;0.00;0.00;0.00 +AN-2026-000004;2026-06-24;K-000099;2026-07-24;OFFEN;0.00;0.00;0.00 +AN-2026-000005;2026-06-24;K-000001;2026-07-24;UEBERFUEHRT;0.00;0.00;0.00 +AN-2026-000006;2026-06-24;K-000001;2026-07-24;UEBERFUEHRT;0.00;0.00;0.00 +AN-2026-000007;2026-06-24;K-000001;2026-07-24;UEBERFUEHRT;0.00;0.00;0.00 +AN-2026-000008;2026-06-24;K-000001;2026-07-24;UEBERFUEHRT;0.00;0.00;0.00 +AN-2026-000009;2026-06-24;K-000001;2026-07-24;OFFEN;20.00;3.80;23.80 diff --git a/data/rechnung_counter.txt b/data/rechnung_counter.txt new file mode 100644 index 0000000..7813681 --- /dev/null +++ b/data/rechnung_counter.txt @@ -0,0 +1 @@ +5 \ No newline at end of file diff --git a/data/rechnungen.csv b/data/rechnungen.csv new file mode 100644 index 0000000..754e51b --- /dev/null +++ b/data/rechnungen.csv @@ -0,0 +1,5 @@ +R-2026-000001;2026-06-24;K-000001;2026-06-24;2026-06-24;2026-07-08;AN-2026-000003;OFFEN;true;0.00;0.00;0.00 +R-2026-000002;2026-06-24;K-000001;2026-06-24;2026-06-24;2026-07-08;AN-2026-000005;OFFEN;false;0.00;0.00;0.00 +R-2026-000003;2026-06-24;K-000001;2026-06-24;2026-06-24;2026-07-08;AN-2026-000006;OFFEN;false;0.00;0.00;0.00 +R-2026-000004;2026-06-24;K-000001;2026-06-24;2026-06-24;2026-07-08;AN-2026-000007;OFFEN;false;20.00;3.80;23.80 +R-2026-000005;2026-06-24;K-000001;2026-06-24;2026-06-24;2026-07-08;AN-2026-000008;OFFEN;false;20.00;3.80;23.80 diff --git a/out/belegworkflow/BelegworkflowTest.class b/out/belegworkflow/BelegworkflowTest.class new file mode 100644 index 0000000000000000000000000000000000000000..067791214fcd0de4594126686c2d98df79a2331d GIT binary patch literal 5120 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 Ae*gdg literal 0 HcmV?d00001 diff --git a/src/test/java/belegworkflow/BelegworkflowTest.java b/src/test/java/belegworkflow/BelegworkflowTest.java new file mode 100644 index 0000000..b23216e --- /dev/null +++ b/src/test/java/belegworkflow/BelegworkflowTest.java @@ -0,0 +1,145 @@ +package belegworkflow; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class BelegworkflowTest { + + private BelegworkflowService service; + private List testPositionen; + + @BeforeEach + void setUp() throws Exception { + service = new BelegworkflowService(); + testPositionen = List.of(new Dokumentposition( + "P-000001", "Testprodukt", + 2, new BigDecimal("10.00"), new BigDecimal("0.19") + )); + } + + @Test + @DisplayName("TC-01: Angebot erstellen -> Angebotsnummer AN- vergeben (F-01, F-02)") + void tc01AngebotErstellen() { + Angebot a = service.erstelleAngebot("K-000001", testPositionen, + LocalDate.now().plusDays(30)); + assertNotNull(a); + assertTrue(a.getBelegnummer().startsWith("AN-")); + assertEquals(AngebotStatus.OFFEN, a.getStatus()); + } + + @Test + @DisplayName("TC-02: Angebot ohne Kunde wird abgelehnt (F-01)") + void tc02AngebotOhneKunde() { + Angebot a = service.erstelleAngebot("", testPositionen, + LocalDate.now().plusDays(30)); + assertNull(a); + } + + @Test + @DisplayName("TC-03: Angebot ohne Positionen wird abgelehnt (F-01)") + void tc03AngebotOhnePositionen() { + Angebot a = service.erstelleAngebot("K-000001", List.of(), + LocalDate.now().plusDays(30)); + assertNull(a); + } + + @Test + @DisplayName("TC-04: Summenberechnung korrekt (F-03, GR-06)") + void tc04Summenberechnung() { + Angebot a = service.erstelleAngebot("K-000001", testPositionen, + LocalDate.now().plusDays(30)); + assertNotNull(a); + assertEquals(new BigDecimal("20.00"), a.getSummeNetto()); + assertEquals(new BigDecimal("3.80"), a.getSummeSteuer()); + assertEquals(new BigDecimal("23.80"), a.getSummeBrutto()); + } + + @Test + @DisplayName("TC-05: Rechnung aus Angebot -> Angebot wird auf UEBERFUEHRT gesetzt (F-05)") + void tc05RechnungAusAngebot() { + Angebot a = service.erstelleAngebot("K-000001", testPositionen, + LocalDate.now().plusDays(30)); + assertNotNull(a); + Rechnung r = service.erstelleRechnungAusAngebot(a.getBelegnummer(), + LocalDate.now(), LocalDate.now(), LocalDate.now().plusDays(14)); + assertNotNull(r); + assertTrue(r.getBelegnummer().startsWith("R-")); + assertEquals(AngebotStatus.UEBERFUEHRT, a.getStatus()); + } + + @Test + @DisplayName("TC-06: Rechnungsnummer ist fortlaufend (F-07, GR-01)") + void tc06RechnungsnummerFortlaufend() { + Angebot a1 = service.erstelleAngebot("K-000001", testPositionen, + LocalDate.now().plusDays(30)); + Angebot a2 = service.erstelleAngebot("K-000001", testPositionen, + LocalDate.now().plusDays(30)); + assertNotNull(a1); + assertNotNull(a2); + + Rechnung r1 = service.erstelleRechnungAusAngebot(a1.getBelegnummer(), + LocalDate.now(), LocalDate.now(), LocalDate.now().plusDays(14)); + Rechnung r2 = service.erstelleRechnungAusAngebot(a2.getBelegnummer(), + LocalDate.now(), LocalDate.now(), LocalDate.now().plusDays(14)); + + assertNotNull(r1); + assertNotNull(r2); + assertNotEquals(r1.getBelegnummer(), r2.getBelegnummer()); + } + + @Test + @DisplayName("TC-07: Rechnung aus ueberführtem Angebot wird abgelehnt (F-05)") + void tc07RechnungAusUeberfuehrtemAngebot() { + Angebot a = service.erstelleAngebot("K-000001", testPositionen, + LocalDate.now().plusDays(30)); + assertNotNull(a); + service.erstelleRechnungAusAngebot(a.getBelegnummer(), + LocalDate.now(), LocalDate.now(), LocalDate.now().plusDays(14)); + + Rechnung r2 = service.erstelleRechnungAusAngebot(a.getBelegnummer(), + LocalDate.now(), LocalDate.now(), LocalDate.now().plusDays(14)); + assertNull(r2); + } + + @Test + @DisplayName("TC-08: Festgeschriebene Rechnung kann nicht geaendert werden (F-10)") + void tc08FestgeschriebeneRechnung() { + Angebot a = service.erstelleAngebot("K-000001", testPositionen, + LocalDate.now().plusDays(30)); + assertNotNull(a); + Rechnung r = service.erstelleRechnungAusAngebot(a.getBelegnummer(), + LocalDate.now(), LocalDate.now(), LocalDate.now().plusDays(14)); + assertNotNull(r); + + service.finalisiereRechnung(r.getBelegnummer()); + assertTrue(r.isFestgeschrieben()); + + r.setStatus(RechnungStatus.BEZAHLT); + assertEquals(RechnungStatus.OFFEN, r.getStatus()); + } + + @Test + @DisplayName("TC-09: Kunde ist referenziert wird erkannt (F-12)") + void tc09KundeReferenziert() { + service.erstelleAngebot("K-000099", testPositionen, + LocalDate.now().plusDays(30)); + assertTrue(service.istKundeReferenziert("K-000099")); + assertFalse(service.istKundeReferenziert("K-999999")); + } + + @Test + @DisplayName("TC-10: Produkt ist referenziert wird erkannt (F-12)") + void tc10ProduktReferenziert() { + service.erstelleAngebot("K-000001", testPositionen, + LocalDate.now().plusDays(30)); + assertTrue(service.istProduktReferenziert("P-000001")); + assertFalse(service.istProduktReferenziert("P-999999")); + } +} \ No newline at end of file