Files
Enelix-EMS/tests/WaermepumpenReglerTest.php
dh 7845c66fd8
Tests / test (push) Successful in 49s
feat: Wärmepumpenmodul integrieren
2026-09-22 14:34:23 +00:00

163 lines
4.6 KiB
PHP

<?php
declare(strict_types=1);
namespace Belevo\EnelixEMS\Tests;
use Belevo\EnelixEMS\Nachrichtenvertrag;
use Belevo\EnelixEMS\WaermepumpenRegler;
use InvalidArgumentException;
use PHPUnit\Framework\TestCase;
final class WaermepumpenReglerTest extends TestCase
{
public function testKontaktwerteBildenNormalSperreUndErhoehungAb(): void
{
self::assertSame(
['Kontakt1' => false, 'Kontakt2' => false],
WaermepumpenRegler::kontaktwerte(0, WaermepumpenRegler::STEUERZUSTAND_NORMAL)
);
self::assertSame(
['Kontakt1' => true, 'Kontakt2' => false],
WaermepumpenRegler::kontaktwerte(1, WaermepumpenRegler::STEUERZUSTAND_SPERRE)
);
self::assertSame(
['Kontakt1' => false, 'Kontakt2' => true],
WaermepumpenRegler::kontaktwerte(1, WaermepumpenRegler::STEUERZUSTAND_ERHOEHUNG)
);
}
public function testLeistungUndBetriebsstatusBestimmenLaufUndIstleistung(): void
{
self::assertTrue(WaermepumpenRegler::laeuft(650.0, 0, 100.0));
self::assertFalse(WaermepumpenRegler::laeuft(50.0, 0, 100.0));
self::assertTrue(WaermepumpenRegler::laeuft(true, 1, 100.0));
self::assertSame(650.0, WaermepumpenRegler::istleistung(650.0, 0, 5000));
self::assertSame(5000.0, WaermepumpenRegler::istleistung(true, 1, 5000));
}
public function testPvBietetStartUndErhoehungNurBeiFreigabeAn(): void
{
self::assertSame(
[0, 5000],
WaermepumpenRegler::leistungsangebot(
5000,
Nachrichtenvertrag::BETRIEBSART_PV,
false,
true,
false,
false,
true,
true,
false
)
);
self::assertSame(
[0],
WaermepumpenRegler::leistungsangebot(
5000,
Nachrichtenvertrag::BETRIEBSART_PV,
false,
true,
false,
true,
true,
false,
false
)
);
}
public function testPeakBietetSperreNurBeiLaufenderUndFreigegebenerPumpeAn(): void
{
self::assertSame(
[0, 5000],
WaermepumpenRegler::leistungsangebot(
5000,
Nachrichtenvertrag::BETRIEBSART_PEAK,
true,
true,
false,
false,
true,
true,
false
)
);
self::assertSame(
[5000],
WaermepumpenRegler::leistungsangebot(
5000,
Nachrichtenvertrag::BETRIEBSART_PEAK,
true,
true,
true,
false,
false,
true,
false
)
);
self::assertSame(
[0],
WaermepumpenRegler::leistungsangebot(
5000,
Nachrichtenvertrag::BETRIEBSART_PEAK,
false,
true,
false,
false,
true,
true,
false
)
);
}
public function testSperrerholungHaeltDenBestaetigtenBetrieb(): void
{
self::assertSame(
[5000],
WaermepumpenRegler::leistungsangebot(
5000,
Nachrichtenvertrag::BETRIEBSART_PEAK,
true,
true,
false,
false,
true,
true,
true
)
);
}
public function testRestzeitWirdNieNegativ(): void
{
self::assertSame(20, WaermepumpenRegler::restzeit(100, 30, 110));
self::assertSame(0, WaermepumpenRegler::restzeit(100, 30, 140));
self::assertSame(0, WaermepumpenRegler::restzeit(0, 30, 10));
}
public function testSperrzeit24hSchneidetAlteIntervalleAb(): void
{
$jetzt = 200000;
$historie = [
['Von' => $jetzt - 90000, 'Bis' => $jetzt - 80000],
['Von' => $jetzt - 1000, 'Bis' => $jetzt - 400],
];
self::assertSame(
7400,
WaermepumpenRegler::sperrsekunden24h($historie, $jetzt, $jetzt - 400)
);
}
public function testUngueltigeKontaktartWirdAbgewiesen(): void
{
$this->expectException(InvalidArgumentException::class);
WaermepumpenRegler::kontaktwerte(99, WaermepumpenRegler::STEUERZUSTAND_NORMAL);
}
}