192 lines
7.7 KiB
PHP
192 lines
7.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Belevo\EnelixEMS\Tests;
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
final class VerbraucherEinStufigModulstrukturTest extends TestCase
|
|
{
|
|
private const MODULPFAD = __DIR__ . '/../../VerbraucherEinStufig/';
|
|
|
|
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('VerbraucherEinStufig', $metadaten['name']);
|
|
self::assertSame('Enelix', $metadaten['vendor']);
|
|
self::assertSame(['Verbraucher 1-Stufig'], $metadaten['aliases']);
|
|
self::assertSame(3, $metadaten['type']);
|
|
self::assertMatchesRegularExpression('/^\{[0-9A-F-]{36}\}$/', $metadaten['id']);
|
|
}
|
|
|
|
public function testFormularEnthaeltDieModulstatus(): void
|
|
{
|
|
$formular = json_decode(
|
|
(string) file_get_contents(self::MODULPFAD . 'form.json'),
|
|
true,
|
|
512,
|
|
JSON_THROW_ON_ERROR
|
|
);
|
|
|
|
self::assertSame([102, 201, 202], array_column($formular['status'], 'code'));
|
|
}
|
|
|
|
public function testPropertiesSindRegistriertUndImFormularVorhanden(): 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::assertSame(
|
|
[
|
|
'PrioritaetPV',
|
|
'PrioritaetPeak',
|
|
'Meldeintervall',
|
|
'VorgabeTimeout',
|
|
'EinstellungenInVisu',
|
|
'LoggingEin',
|
|
'Nennleistung',
|
|
'SchaltkontaktVariableID',
|
|
'SchaltkontaktInvertiert',
|
|
'RueckmeldungVariableID',
|
|
'Mindestlaufzeit',
|
|
'PeakSperreBeiMindestlaufzeitAnbieten',
|
|
'Mindesteinschaltdauer',
|
|
'Mindestausschaltdauer',
|
|
'DiagnosevariablenAnzeigen',
|
|
],
|
|
$properties
|
|
);
|
|
|
|
$formular = (string) file_get_contents(self::MODULPFAD . 'form.json');
|
|
foreach ($properties as $property) {
|
|
self::assertStringContainsString('"name": "' . $property . '"', $formular, $property);
|
|
}
|
|
}
|
|
|
|
public function testGetrennteMindestzeitenErsetzenUmschaltabstand(): void
|
|
{
|
|
$modul = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
|
|
self::assertStringContainsString(
|
|
"RegisterPropertyInteger('Mindesteinschaltdauer', 5)",
|
|
$modul
|
|
);
|
|
self::assertStringContainsString(
|
|
"RegisterPropertyInteger('Mindestausschaltdauer', 5)",
|
|
$modul
|
|
);
|
|
self::assertStringNotContainsString("RegisterPropertyInteger('Umschaltabstand'", $modul);
|
|
self::assertStringNotContainsString("RegisterPropertyInteger('Interval'", $modul);
|
|
self::assertStringNotContainsString("RegisterPropertyInteger('IdleCounterMax'", $modul);
|
|
}
|
|
|
|
public function testRegelungReagiertAufEreignisseUndEinmalTimer(): void
|
|
{
|
|
$modul = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
|
|
self::assertStringContainsString('public function MessageSink', $modul);
|
|
self::assertStringContainsString('RegisterMessage($neueID, self::VM_UPDATE)', $modul);
|
|
foreach (['MindestzeitAbgelaufen', 'VorgabeTimeout', 'Tagesplanung'] as $timer) {
|
|
self::assertStringContainsString("'$timer'", $modul);
|
|
}
|
|
self::assertStringContainsString(
|
|
"SetTimerInterval('Meldezyklus', \$this->ReadPropertyInteger('Meldeintervall') * 1000)",
|
|
$modul
|
|
);
|
|
self::assertStringNotContainsString("case 'Umschaltfreigabe':", $modul);
|
|
self::assertStringNotContainsString("RegisterTimer('Regelzyklus'", $modul);
|
|
}
|
|
|
|
public function testRueckmeldungBestimmtZustandUndSchaltbereitschaft(): void
|
|
{
|
|
$modul = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
|
|
self::assertStringContainsString(
|
|
"ReadPropertyInteger('RueckmeldungVariableID')",
|
|
$modul
|
|
);
|
|
self::assertStringContainsString('bestaetigeZustandswechsel', $modul);
|
|
self::assertStringContainsString("'Kennung' => 'SchaltbefehlAusstehend'", $modul);
|
|
self::assertStringContainsString("'Kennung' => 'Schaltbereit'", $modul);
|
|
self::assertStringContainsString("'Kennung' => 'RestMindestzeit_s'", $modul);
|
|
self::assertStringContainsString(
|
|
'setzeZustand(\'AenderungMoeglich\', $aenderungMoeglich)',
|
|
$modul
|
|
);
|
|
}
|
|
|
|
public function testModulVerwendetVertrag40UndBetriebsartabhaengigesAngebot(): void
|
|
{
|
|
$modul = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
|
|
self::assertStringContainsString('implements VerbraucherSchnittstelle', $modul);
|
|
self::assertStringContainsString('ManagerdatenEmpfangen(array $daten)', $modul);
|
|
self::assertStringContainsString('Nachrichtenvertrag::pruefeManagerdaten', $modul);
|
|
self::assertStringContainsString('Nachrichtenvertrag::pruefeVerbraucherdaten', $modul);
|
|
self::assertStringContainsString("['Betriebsart']", $modul);
|
|
self::assertStringContainsString('BETRIEBSART_PEAK', $modul);
|
|
self::assertStringContainsString("'Betriebsart' =>", $modul);
|
|
self::assertStringNotContainsString("RegisterVariableString('PowerSteps'", $modul);
|
|
self::assertStringNotContainsString("RegisterPropertyInteger('ManagerID'", $modul);
|
|
}
|
|
|
|
public function testFachvariablenUndRueckmeldestatusSindEnthalten(): void
|
|
{
|
|
$modul = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
|
|
self::assertStringContainsString("RegisterVariableBoolean('Schaltzustand'", $modul);
|
|
self::assertStringContainsString("RegisterVariableInteger('Tageslaufzeit'", $modul);
|
|
self::assertStringContainsString("'Kennung' => 'Rueckmeldefehler'", $modul);
|
|
self::assertStringContainsString("'Kennung' => 'Tageslaufzeit_s'", $modul);
|
|
}
|
|
|
|
public function testManagerKenntDieModulIDGenauEinmal(): void
|
|
{
|
|
$manager = (string) file_get_contents(__DIR__ . '/../../Manager/module.php');
|
|
$modulID = '{15879A4E-D0C2-4495-83DE-46E1E462591E}';
|
|
|
|
self::assertSame(1, substr_count($manager, $modulID));
|
|
}
|
|
|
|
public function testDiagnosevariablenSindOptional(): void
|
|
{
|
|
$modul = (string) file_get_contents(self::MODULPFAD . 'module.php');
|
|
|
|
self::assertStringContainsString("ReadPropertyBoolean('DiagnosevariablenAnzeigen')", $modul);
|
|
self::assertStringContainsString('registriereVerbraucherDiagnose', $modul);
|
|
self::assertStringContainsString('UnregisterVariable($ident)', $modul);
|
|
}
|
|
|
|
public function testSeparateSuiteIstImGesamttestEnthalten(): void
|
|
{
|
|
self::assertFileExists(__DIR__ . '/../../phpunit.verbraucher-einstufig.xml');
|
|
|
|
$composer = json_decode(
|
|
(string) file_get_contents(__DIR__ . '/../../composer.json'),
|
|
true,
|
|
512,
|
|
JSON_THROW_ON_ERROR
|
|
);
|
|
self::assertArrayHasKey('check:verbraucher-einstufig', $composer['scripts']);
|
|
|
|
$gesamt = (string) file_get_contents(__DIR__ . '/../../phpunit.xml.dist');
|
|
self::assertStringContainsString('<directory>tests</directory>', $gesamt);
|
|
}
|
|
}
|