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 0000000..0677912 Binary files /dev/null and b/out/belegworkflow/BelegworkflowTest.class differ 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