Files
api/services/nginx/app/tests/Unit/Selfserve/GatewayShellyTransportTest.php
T

84 lines
2.6 KiB
PHP

<?php
app_require('classes/edge_gateway_manager.php');
app_require('classes/gateway_shelly_transport.php');
use classes\edge_gateway_manager;
use classes\gateway_shelly_transport;
class GatewayShellyTransportManagerFake extends edge_gateway_manager
{
/** @var array<int,array<string,mixed>> */
public array $statusCalls = [];
/** @var array<int,array<string,mixed>> */
public array $switchCalls = [];
public function __construct()
{
}
public function dispatchRelayStatus(int $departmentId, string $logicalRelayId): array
{
$this->statusCalls[] = [
'department_id' => $departmentId,
'relay_id' => $logicalRelayId,
];
return [
'online' => true,
'on' => $logicalRelayId === 'relay-machine',
'raw' => ['source' => 'status'],
];
}
public function dispatchRelaySwitch(int $departmentId, string $logicalRelayId, bool $on): array
{
$this->switchCalls[] = [
'department_id' => $departmentId,
'relay_id' => $logicalRelayId,
'on' => $on,
];
return [
'online' => true,
'on' => $on,
'raw' => ['source' => 'switch'],
];
}
}
it('maps gateway relay status responses into the Shelly cloud payload shape', function (): void {
$manager = new GatewayShellyTransportManagerFake();
$transport = new gateway_shelly_transport($manager);
$result = $transport->sendPostRequest('/v2/devices/api/get', [
'ids' => ['relay-machine', 'relay-cleaner'],
], 17);
expect($manager->statusCalls)->toBe([
['department_id' => 17, 'relay_id' => 'relay-machine'],
['department_id' => 17, 'relay_id' => 'relay-cleaner'],
]);
expect($result)->toBeArray();
expect($result[0]['id'])->toBe('relay-machine');
expect($result[0]['status']['switch:0']['output'])->toBeTrue();
expect($result[1]['status']['switch:0']['output'])->toBeFalse();
});
it('maps gateway relay switch responses into the Shelly cloud payload shape', function (): void {
$manager = new GatewayShellyTransportManagerFake();
$transport = new gateway_shelly_transport($manager);
$result = $transport->sendPostRequest('/v2/devices/api/set/switch', [
'id' => 'relay-machine',
'on' => false,
], 17);
expect($manager->switchCalls)->toBe([
['department_id' => 17, 'relay_id' => 'relay-machine', 'on' => false],
]);
expect($result)->toBeArray();
expect($result[0]['id'])->toBe('relay-machine');
expect($result[0]['status']['switch:0']['output'])->toBeFalse();
});