not->toBeFalse(); expect($managerSource)->toContain('public function queueDiscovery'); expect($managerSource)->toContain('public function dispatchRelayStatus'); expect($managerSource)->toContain('public function dispatchRelaySwitch'); expect($managerSource)->toContain('private function createCommandJob'); expect($managerSource)->toContain('public function buildUpdateOperationRequest'); expect($managerSource)->toContain('public function rotateGatewayCredentials'); expect($operationServiceSource)->toContain('public function queueOperation'); expect($operationServiceSource)->toContain('public function claimNextOperation'); expect($operationServiceSource)->toContain('public function completeAgentOperation'); expect($operationServiceSource)->toContain('public const OPERATION_LEASE_SECONDS = 45;'); expect($operationServiceSource)->toContain('private function refreshOperationLease'); expect($operationServiceSource)->toContain('agent_instance_id'); expect($operationServiceSource)->toContain('lease_expires_at'); expect($operationServiceSource)->toContain("'operation_type' => \$type"); expect($managerSource)->toContain("command_type"); }); it('loads relay command helpers on the manager and gateway operations on the dedicated service', function (): void { $reflection = new ReflectionClass(edge_gateway_manager::class); $operationServiceReflection = new ReflectionClass(\classes\edge_gateway_operation_service::class); expect($reflection->hasMethod('queueDiscovery'))->toBeTrue(); expect($reflection->hasMethod('pollCommand'))->toBeTrue(); expect($reflection->hasMethod('submitCommandResult'))->toBeTrue(); expect($reflection->hasMethod('dispatchRelayStatus'))->toBeTrue(); expect($reflection->hasMethod('dispatchRelaySwitch'))->toBeTrue(); expect($reflection->hasMethod('claimNextCommandJob'))->toBeTrue(); expect($reflection->getMethod('claimNextCommandJob')->isPrivate())->toBeTrue(); expect($reflection->hasMethod('syncDeviceInventory'))->toBeTrue(); expect($reflection->getMethod('syncDeviceInventory')->isPrivate())->toBeTrue(); expect($reflection->hasMethod('syncGatewayInventory'))->toBeTrue(); expect($operationServiceReflection->hasMethod('queueOperation'))->toBeTrue(); expect($operationServiceReflection->hasMethod('listOperations'))->toBeTrue(); expect($operationServiceReflection->hasMethod('claimNextOperation'))->toBeTrue(); expect($operationServiceReflection->hasMethod('appendAgentOperationEvent'))->toBeTrue(); expect($operationServiceReflection->hasMethod('completeAgentOperation'))->toBeTrue(); });