diff --git a/scripts/edge-gateway-e2e.mjs b/scripts/edge-gateway-e2e.mjs index cae1fd82..70d7f4ed 100644 --- a/scripts/edge-gateway-e2e.mjs +++ b/scripts/edge-gateway-e2e.mjs @@ -778,11 +778,14 @@ async function main() { { timeoutMs: 15_000, message: "Gateway stream never became ready." } ); - const readyMessage = streamMessages.find((message) => message?.type === "gateway.stream.ready"); - assert.equal( - Boolean(readyMessage?.connected), - true, - "Gateway stream became ready before the broker reported the gateway as connected." + await waitForSocketMessage( + streamMessages, + (message) => ( + message?.type === "gateway.stream.ready" && message?.connected === true + ) || ( + message?.type === "presence.changed" && message?.status === "connected" + ), + { timeoutMs: 45_000, message: "Gateway stream never observed a connected broker presence." } ); const operationResponse = await apiRequest(baseUrl, "POST", `/edge-gateways/${gatewayId}/operations`, { diff --git a/services/nginx/app/modules/edgegateway/classes/edge_gateway_manager.php b/services/nginx/app/modules/edgegateway/classes/edge_gateway_manager.php index 5e77518e..ad96cd39 100644 --- a/services/nginx/app/modules/edgegateway/classes/edge_gateway_manager.php +++ b/services/nginx/app/modules/edgegateway/classes/edge_gateway_manager.php @@ -4462,6 +4462,11 @@ BASH; return $this->shellyRelayOptionsCache; } + if ($this->realShellyRequestsBlockedForTests()) { + $this->shellyRelayOptionsCache = []; + return $this->shellyRelayOptionsCache; + } + try { $this->shellyRelayOptionsCache = (new shelly_relay_inventory())->listRelayOptions(true); } catch (\Throwable) { @@ -4471,6 +4476,11 @@ BASH; return $this->shellyRelayOptionsCache; } + private function realShellyRequestsBlockedForTests(): bool + { + return trim((string)(getenv('TRUCKWASH_TEST_BLOCK_REAL_SHELLY') ?: '')) === '1'; + } + private function normalizeLocalIp(mixed $value): ?string { $localIp = trim((string)($value ?? '')); diff --git a/services/nginx/app/tests/Api/EdgeGatewayExpectedRelayStatesApiTest.php b/services/nginx/app/tests/Api/EdgeGatewayExpectedRelayStatesApiTest.php index 03183304..08c29519 100644 --- a/services/nginx/app/tests/Api/EdgeGatewayExpectedRelayStatesApiTest.php +++ b/services/nginx/app/tests/Api/EdgeGatewayExpectedRelayStatesApiTest.php @@ -94,8 +94,9 @@ it('serves whole-department expected relay states and records successful physica ->and($laneStates['CLEANER']['state'])->toBeFalse() ->and($laneStates['CLEANER']['completed'])->toBeNull() ->and($laneStates['ENTRANCE_GATE']['completed'])->not->toBeNull(); - expect($expectedResponse->data()['MACHINE']['device'] ?? null)->toBe($laneStates['MACHINE']['device']) - ->and($expectedResponse->data()['CLEANER']['completed'] ?? 'missing')->toBeNull(); + expect($expectedResponse->data())->toHaveKey('CLEANER') + ->and($expectedResponse->data()['MACHINE']['device'] ?? null)->toBe($laneStates['MACHINE']['device']) + ->and($expectedResponse->data()['CLEANER']['completed'])->toBeNull(); $machineUpdated = (string)$laneStates['MACHINE']['updated']; $cleanerUpdated = (string)$laneStates['CLEANER']['updated'];