This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Belevo\EnelixEMS\Tests;
|
||||
|
||||
use Belevo\EnelixEMS\Nachrichtenvertrag;
|
||||
use InvalidArgumentException;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class NachrichtenvertragTest extends TestCase
|
||||
{
|
||||
public function testGueltigeManagerdatenWerdenAkzeptiert(): void
|
||||
{
|
||||
Nachrichtenvertrag::pruefeManagerdaten([
|
||||
'Kopf' => $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<string, mixed>
|
||||
*/
|
||||
private function kopf(int $absenderID, int $empfaengerID): array
|
||||
{
|
||||
return [
|
||||
'Version' => Nachrichtenvertrag::VERSION,
|
||||
'AbsenderID' => $absenderID,
|
||||
'EmpfaengerID' => $empfaengerID,
|
||||
'Zeitpunkt' => 1788825600,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
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' => '',
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user