128 lines
3.7 KiB
PHP
128 lines
3.7 KiB
PHP
<?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' => '',
|
|
],
|
|
],
|
|
];
|
|
}
|
|
}
|
|
|