182 lines
8.4 KiB
PHP
182 lines
8.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Belevo\EnelixEMS\Tests;
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
final class WarmwassererwaermerModulstrukturTest extends TestCase
|
|
{
|
|
private const MODULPFAD = __DIR__ . '/../Warmwassererwaermer/';
|
|
|
|
public function testModulIstVollstaendigUndMetadatenSindGueltig(): void
|
|
{
|
|
foreach (['module.json', 'form.json', 'module.php'] as $datei) {
|
|
self::assertFileExists(self::MODULPFAD . $datei);
|
|
}
|
|
|
|
$metadaten = json_decode(
|
|
(string) file_get_contents(self::MODULPFAD . 'module.json'),
|
|
true,
|
|
512,
|
|
JSON_THROW_ON_ERROR
|
|
);
|
|
self::assertSame('VerbraucherWarmwassererwaermer', $metadaten['name']);
|
|
self::assertSame('Enelix', $metadaten['vendor']);
|
|
self::assertSame(['Wassererwärmer'], $metadaten['aliases']);
|
|
self::assertSame(3, $metadaten['type']);
|
|
self::assertMatchesRegularExpression('/^\{[0-9A-F-]{36}\}$/', $metadaten['id']);
|
|
}
|
|
|
|
public function testAlle21PropertiesSindRegistriertUndImFormularDokumentiert(): void
|
|
{
|
|
$basis = (string) file_get_contents(__DIR__ . '/../libs/VerbraucherBasisTrait.php');
|
|
$modul = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
preg_match_all('/RegisterProperty(?:Integer|Float|Boolean|String)\(\'([^\']+)\'/', $basis . $modul, $treffer);
|
|
$properties = array_values(array_unique($treffer[1]));
|
|
|
|
self::assertCount(21, $properties);
|
|
|
|
$formular = (string) file_get_contents(self::MODULPFAD . 'form.json');
|
|
foreach ($properties as $property) {
|
|
self::assertStringContainsString('"name": "' . $property . '"', $formular, $property);
|
|
}
|
|
}
|
|
|
|
public function testRegelungIstEreignisbasiertUndSperrtLastwechselFuenfSekunden(): void
|
|
{
|
|
$inhalt = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
|
|
self::assertStringContainsString("RegisterPropertyInteger('LastwechselSperrzeit', 5)", $inhalt);
|
|
self::assertStringNotContainsString("RegisterPropertyInteger('Interval'", $inhalt);
|
|
self::assertStringNotContainsString("RegisterPropertyInteger('IdleCounterMax'", $inhalt);
|
|
self::assertStringNotContainsString("ReadPropertyInteger('Interval')", $inhalt);
|
|
self::assertStringContainsString("'LastwechselFreigabe'", $inhalt);
|
|
self::assertStringContainsString('LetzteTemperaturberechnung', $inhalt);
|
|
self::assertStringContainsString('$angebot = [$aktuelleLeistung];', $inhalt);
|
|
self::assertStringNotContainsString("RegisterVariableBoolean('Idle'", $inhalt);
|
|
self::assertStringNotContainsString("RegisterVariableInteger('IdleCounter'", $inhalt);
|
|
self::assertStringNotContainsString('ZustandIdle', $inhalt);
|
|
self::assertStringContainsString("['Idle', 'IdleCounter']", $inhalt);
|
|
}
|
|
|
|
public function testModulVerwendetAusschliesslichDenVertrag30(): void
|
|
{
|
|
$inhalt = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
self::assertStringContainsString('implements VerbraucherSchnittstelle', $inhalt);
|
|
self::assertStringContainsString('ManagerdatenEmpfangen(array $daten)', $inhalt);
|
|
self::assertStringContainsString('Nachrichtenvertrag::pruefeManagerdaten', $inhalt);
|
|
self::assertStringContainsString('Nachrichtenvertrag::pruefeVerbraucherdaten', $inhalt);
|
|
self::assertStringNotContainsString("RegisterVariableString('PowerSteps'", $inhalt);
|
|
self::assertStringNotContainsString("RegisterPropertyInteger('ManagerID'", $inhalt);
|
|
self::assertStringContainsString("'AutomatischeVerbraucherZuordnung'", $inhalt);
|
|
self::assertStringContainsString("'VerbraucherZuordnung'", $inhalt);
|
|
}
|
|
|
|
public function testVierzehnDiagnosevariablenWerdenBedarfsgesteuertAngelegtUndGeloescht(): void
|
|
{
|
|
$inhalt = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
preg_match('/private const DIAGNOSE_VARIABLEN = \[(.*?)\];/s', $inhalt, $treffer);
|
|
self::assertArrayHasKey(1, $treffer);
|
|
preg_match_all('/\'([^\']+)\'/', $treffer[1], $variablen);
|
|
|
|
self::assertCount(14, $variablen[1]);
|
|
foreach (['Istleistung', 'Sollleistung', 'Stoerung', 'Stoertext', 'AktiveStufe', 'BezogeneEnergie'] as $ident) {
|
|
self::assertContains($ident, $variablen[1]);
|
|
self::assertStringContainsString("Zustand" . $ident, $inhalt);
|
|
}
|
|
self::assertStringContainsString("ReadPropertyBoolean('DiagnosevariablenAnzeigen')", $inhalt);
|
|
self::assertStringContainsString('registriereVerbraucherDiagnose', $inhalt);
|
|
self::assertStringContainsString('UnregisterVariable($ident)', $inhalt);
|
|
self::assertStringContainsString("ReadPropertyBoolean('LoggingEin')", $inhalt);
|
|
self::assertStringNotContainsString("case 'LogStatus':", $inhalt);
|
|
}
|
|
|
|
public function testLegionellentemperaturWirdNurBeiAktiverFunktionAngelegt(): void
|
|
{
|
|
$inhalt = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
|
|
self::assertStringContainsString("ReadPropertyBoolean('LegionellenfunktionAktiv')", $inhalt);
|
|
self::assertStringContainsString(
|
|
"RegisterVariableFloat('Legionellentemperatur'",
|
|
$inhalt
|
|
);
|
|
self::assertStringContainsString("UnregisterVariable('Legionellentemperatur')", $inhalt);
|
|
self::assertStringContainsString("ZustandLegionellentemperatur", $inhalt);
|
|
}
|
|
|
|
public function testFormularIstWieGewuenschtGegliedertUndHatKeineAktionsknoepfe(): void
|
|
{
|
|
$formular = json_decode(
|
|
(string) file_get_contents(self::MODULPFAD . 'form.json'),
|
|
true,
|
|
512,
|
|
JSON_THROW_ON_ERROR
|
|
);
|
|
self::assertSame(
|
|
[
|
|
'Manager und Zeitverhalten',
|
|
'Speichereinstellungen',
|
|
'Erweiterte Speichereinstellungen',
|
|
'Erweiterte sonstige Einstellungen',
|
|
],
|
|
array_column($formular['elements'], 'caption')
|
|
);
|
|
self::assertArrayNotHasKey('actions', $formular);
|
|
}
|
|
|
|
public function testTemperatursollwerteSindGeprueftBedienbar(): void
|
|
{
|
|
$inhalt = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
foreach (['Mindesttemperatur', 'Maximaltemperatur', 'Legionellentemperatur'] as $ident) {
|
|
self::assertStringContainsString("EnableAction('" . $ident . "')", $inhalt);
|
|
}
|
|
self::assertStringContainsString('setzeTemperaturSollwert', $inhalt);
|
|
self::assertStringContainsString('Mindesttemperatur < Maximaltemperatur', $inhalt);
|
|
}
|
|
|
|
public function testTemperaturstoergrenzenSindKonfigurierbarUndVonSollwertenGetrennt(): void
|
|
{
|
|
$inhalt = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
self::assertStringContainsString(
|
|
"RegisterPropertyFloat('TemperaturUntergrenze', 0.0)",
|
|
$inhalt
|
|
);
|
|
self::assertStringContainsString(
|
|
"RegisterPropertyFloat('TemperaturObergrenze', 100.0)",
|
|
$inhalt
|
|
);
|
|
self::assertStringContainsString("ReadPropertyFloat('TemperaturUntergrenze')", $inhalt);
|
|
self::assertStringContainsString("ReadPropertyFloat('TemperaturObergrenze')", $inhalt);
|
|
self::assertStringContainsString("'Kennung' => 'Untertemperatur'", $inhalt);
|
|
self::assertStringContainsString("'Kennung' => 'Uebertemperatur'", $inhalt);
|
|
|
|
$formular = json_decode(
|
|
(string) file_get_contents(self::MODULPFAD . 'form.json'),
|
|
true,
|
|
512,
|
|
JSON_THROW_ON_ERROR
|
|
);
|
|
$erweitert = array_values(array_filter(
|
|
$formular['elements'],
|
|
static fn (array $element): bool =>
|
|
$element['caption'] === 'Erweiterte Speichereinstellungen'
|
|
));
|
|
self::assertCount(1, $erweitert);
|
|
self::assertContains('TemperaturUntergrenze', array_column($erweitert[0]['items'], 'name'));
|
|
self::assertContains('TemperaturObergrenze', array_column($erweitert[0]['items'], 'name'));
|
|
}
|
|
|
|
public function testSchaltfolgeIstBreakBeforeMake(): void
|
|
{
|
|
$inhalt = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
$aus = strpos($inhalt, "RequestAction(\$stufe['KontaktID'], false)");
|
|
$ein = strpos($inhalt, "RequestAction(\$stufe['KontaktID'], true)");
|
|
|
|
self::assertIsInt($aus);
|
|
self::assertIsInt($ein);
|
|
self::assertLessThan($ein, $aus);
|
|
}
|
|
}
|