104 lines
4.5 KiB
PHP
104 lines
4.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Belevo\EnelixUtils\Tests;
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
final class EnergiediagrammModulstrukturTest extends TestCase
|
|
{
|
|
public function testModuleMetadataAndFormExposeRequiredConfiguration(): void
|
|
{
|
|
$module = json_decode(
|
|
file_get_contents(__DIR__ . '/../Energiediagramm/module.json'),
|
|
true,
|
|
512,
|
|
JSON_THROW_ON_ERROR
|
|
);
|
|
$form = json_decode(
|
|
file_get_contents(__DIR__ . '/../Energiediagramm/form.json'),
|
|
true,
|
|
512,
|
|
JSON_THROW_ON_ERROR
|
|
);
|
|
|
|
self::assertSame('{F73B8F8D-5E36-4B23-B379-4632A517A1D6}', $module['id']);
|
|
self::assertSame('Energiediagramm', $module['name']);
|
|
self::assertSame('ENELIXENERGY', $module['prefix']);
|
|
|
|
$serialized = json_encode($form, JSON_THROW_ON_ERROR);
|
|
foreach ([
|
|
'ProduktionZaehlerID',
|
|
'EinspeisungZaehlerID',
|
|
'NetzbezugZaehlerID',
|
|
'VerbrauchZaehlerID',
|
|
'EnergieanteileBerechenbar',
|
|
'Standardzeitraum',
|
|
'FarbeEigenverbrauch',
|
|
'FarbeAutarkie',
|
|
] as $property) {
|
|
self::assertStringContainsString($property, $serialized);
|
|
}
|
|
self::assertSame(2, substr_count($serialized, 'SelectColor'));
|
|
}
|
|
|
|
public function testHtmlStartsWithDataAndRespondsToAvailableWidth(): void
|
|
{
|
|
$html = file_get_contents(__DIR__ . '/../Energiediagramm/module.html');
|
|
self::assertNotFalse($html);
|
|
self::assertStringContainsString('__ENELIX_INITIAL_STATE__', $html);
|
|
self::assertStringContainsString('ResizeObserver', $html);
|
|
self::assertStringContainsString('grid-template-columns: minmax(0, 1fr)', $html);
|
|
self::assertStringContainsString('padding: 58px 14px 14px', $html);
|
|
self::assertStringContainsString('padding: 58px 10px 10px', $html);
|
|
self::assertStringContainsString('background-color: var(--card-color, transparent)', $html);
|
|
self::assertStringContainsString('color: var(--content-color, CanvasText)', $html);
|
|
self::assertStringContainsString('function syncColorScheme()', $html);
|
|
self::assertStringContainsString('SetCustomRange', $html);
|
|
self::assertStringNotContainsString("addEventListener('load'", $html);
|
|
}
|
|
|
|
public function testOriginalEnergyPieBackgroundStaysReadableAndNonInteractive(): void
|
|
{
|
|
$html = file_get_contents(__DIR__ . '/../Energiediagramm/module.html');
|
|
self::assertNotFalse($html);
|
|
self::assertMatchesRegularExpression('/#energy-app\\s*\\{[^}]*--card-color: #121216;/s', $html);
|
|
self::assertMatchesRegularExpression('/#energy-app\\s*\\{[^}]*--content-color: #f5f5f7;/s', $html);
|
|
self::assertMatchesRegularExpression('/#energy-app\\s*\\{[^}]*color-scheme: dark;/s', $html);
|
|
self::assertMatchesRegularExpression('/#energy-app\\s*\\{[^}]*isolation: isolate;/s', $html);
|
|
self::assertSame(1, preg_match('/#energy-app::before\\s*\\{([^}]+)\\}/s', $html, $background));
|
|
foreach ([
|
|
'inset: 0',
|
|
'z-index: -1',
|
|
'radial-gradient(520px 420px at 18% 18%, rgba(99, 179, 255, 0.42), transparent 60%)',
|
|
'radial-gradient(560px 460px at 82% 28%, rgba(168, 85, 247, 0.38), transparent 62%)',
|
|
'radial-gradient(620px 520px at 55% 85%, rgba(99, 179, 255, 0.26), transparent 64%)',
|
|
'filter: blur(18px)',
|
|
'pointer-events: none',
|
|
] as $style) {
|
|
self::assertStringContainsString($style, $background[1]);
|
|
}
|
|
self::assertStringContainsString('overflow: auto', $html);
|
|
self::assertStringNotContainsString('touch-action: none', $html);
|
|
}
|
|
|
|
public function testModuleEmbedsInitialPayloadAndEnablesSupportedVisualization(): void
|
|
{
|
|
$module = file_get_contents(__DIR__ . '/../Energiediagramm/module.php');
|
|
self::assertNotFalse($module);
|
|
self::assertStringContainsString(
|
|
"str_replace('__ENELIX_INITIAL_STATE__'",
|
|
$module
|
|
);
|
|
self::assertStringContainsString(
|
|
"version_compare(IPS_GetKernelVersion(), '9.0', '>=')",
|
|
$module
|
|
);
|
|
self::assertStringContainsString('SetVisualizationType($visualizationType)', $module);
|
|
self::assertStringContainsString('Standardzeitraum', $module);
|
|
self::assertStringContainsString('CustomStart', $module);
|
|
self::assertStringContainsString('CustomEnd', $module);
|
|
}
|
|
}
|