diff --git a/tests/NachrichtenvertragTest.php b/tests/NachrichtenvertragTest.php new file mode 100644 index 0000000..4be655e --- /dev/null +++ b/tests/NachrichtenvertragTest.php @@ -0,0 +1,127 @@ + $this->kopf(10001, 20001), + 'Sollleistung_W' => 1501, + ]); + + self::assertTrue(true); + } + + public function testGueltigeVerbraucherdatenMitEinzelwertenUndBereichenWerdenAkzeptiert(): void + { + Nachrichtenvertrag::pruefeVerbraucherdaten($this->verbraucherdaten()); + + self::assertTrue(true); + } + + public function testNegativePrioritaetWirdAbgelehnt(): void + { + $daten = $this->verbraucherdaten(); + $daten['PrioritaetPV'] = -1; + + $this->expectException(InvalidArgumentException::class); + Nachrichtenvertrag::pruefeVerbraucherdaten($daten); + } + + public function testUeberlappendeLeistungsbereicheWerdenAbgelehnt(): void + { + $daten = $this->verbraucherdaten(); + $daten['Leistungswerte_W'] = [0, ['Von_W' => 100, 'Bis_W' => 200], 200]; + + $this->expectException(InvalidArgumentException::class); + Nachrichtenvertrag::pruefeVerbraucherdaten($daten); + } + + public function testMesswertOhneLeistungsquelleWirdAbgelehnt(): void + { + $daten = $this->verbraucherdaten(); + $daten['Leistungsquelle'] = Nachrichtenvertrag::LEISTUNGSQUELLE_NICHT_VORHANDEN; + + $this->expectException(InvalidArgumentException::class); + Nachrichtenvertrag::pruefeVerbraucherdaten($daten); + } + + public function testFehlenderGemeinsamerSollwertImZustandWirdAbgelehnt(): void + { + $daten = $this->verbraucherdaten(); + $daten['Zustand'] = []; + + $this->expectException(InvalidArgumentException::class); + Nachrichtenvertrag::pruefeVerbraucherdaten($daten); + } + + public function testUnbekanntesFeldWirdAbgelehnt(): void + { + $daten = $this->verbraucherdaten(); + $daten['WeiteresFeld'] = true; + + $this->expectException(InvalidArgumentException::class); + Nachrichtenvertrag::pruefeVerbraucherdaten($daten); + } + + /** + * @return array + */ + private function kopf(int $absenderID, int $empfaengerID): array + { + return [ + 'Version' => Nachrichtenvertrag::VERSION, + 'AbsenderID' => $absenderID, + 'EmpfaengerID' => $empfaengerID, + 'Zeitpunkt' => 1788825600, + ]; + } + + /** + * @return array + */ + private function verbraucherdaten(): array + { + return [ + 'Kopf' => $this->kopf(20001, 10001), + 'PrioritaetPV' => 0, + 'PrioritaetPeak' => 12, + 'Leistungswerte_W' => [ + -3000, + -2000, + ['Von_W' => -1000, 'Bis_W' => -500], + 0, + 100, + ['Von_W' => 1000, 'Bis_W' => 2000], + 3000, + ], + 'AenderungMoeglich' => true, + 'Verfuegbar' => true, + 'Istleistung_W' => 1498.5, + 'Leistungsquelle' => Nachrichtenvertrag::LEISTUNGSQUELLE_GEMESSEN, + 'Zustand' => [ + [ + 'Kennung' => 'Sollleistung_W', + 'Art' => 'Sollwert', + 'Wert' => 1501, + 'Einheit' => 'W', + ], + [ + 'Kennung' => 'Fuehlerfehler', + 'Art' => 'Stoerung', + 'Wert' => false, + 'Einheit' => '', + ], + ], + ]; + } +} +