""" Unit tests for EmergencyStopManager. """ import pytest from unittest.mock import Mock, AsyncMock from src.core.emergency_stop import EmergencyStopManager class TestEmergencyStopManager: """Test cases for EmergencyStopManager.""" def setup_method(self): """Set up test fixtures.""" self.mock_db_client = Mock() self.mock_db_client.execute = Mock() self.emergency_stop_manager = EmergencyStopManager(self.mock_db_client) def test_emergency_stop_pump(self): """Test emergency stop for a specific pump.""" # Act result = self.emergency_stop_manager.emergency_stop_pump( station_id='STATION_001', pump_id='PUMP_001', reason='Test emergency stop', user_id='test_user' ) # Assert assert result is True assert self.emergency_stop_manager.is_emergency_stop_active('STATION_001', 'PUMP_001') is True assert self.mock_db_client.execute.called def test_emergency_stop_station(self): """Test emergency stop for all pumps in a station.""" # Act result = self.emergency_stop_manager.emergency_stop_station( station_id='STATION_001', reason='Test station stop', user_id='test_user' ) # Assert assert result is True assert self.emergency_stop_manager.is_emergency_stop_active('STATION_001', 'PUMP_001') is True assert self.emergency_stop_manager.is_emergency_stop_active('STATION_001', 'PUMP_002') is True assert self.mock_db_client.execute.called def test_emergency_stop_system(self): """Test system-wide emergency stop.""" # Act result = self.emergency_stop_manager.emergency_stop_system( reason='Test system stop', user_id='test_user' ) # Assert assert result is True assert self.emergency_stop_manager.is_emergency_stop_active('STATION_001', 'PUMP_001') is True assert self.emergency_stop_manager.is_emergency_stop_active('STATION_002', 'PUMP_001') is True assert self.mock_db_client.execute.called def test_clear_emergency_stop_pump(self): """Test clearing emergency stop for a specific pump.""" # Arrange self.emergency_stop_manager.emergency_stop_pump('STATION_001', 'PUMP_001') # Act result = self.emergency_stop_manager.clear_emergency_stop_pump( station_id='STATION_001', pump_id='PUMP_001', reason='Test clearance', user_id='test_user' ) # Assert assert result is True assert self.emergency_stop_manager.is_emergency_stop_active('STATION_001', 'PUMP_001') is False assert self.mock_db_client.execute.call_count == 2 # Stop + clearance def test_clear_emergency_stop_station(self): """Test clearing emergency stop for a station.""" # Arrange self.emergency_stop_manager.emergency_stop_station('STATION_001') # Act result = self.emergency_stop_manager.clear_emergency_stop_station( station_id='STATION_001', reason='Test clearance', user_id='test_user' ) # Assert assert result is True assert self.emergency_stop_manager.is_emergency_stop_active('STATION_001', 'PUMP_001') is False assert self.mock_db_client.execute.call_count == 2 # Stop + clearance def test_clear_emergency_stop_system(self): """Test clearing system-wide emergency stop.""" # Arrange self.emergency_stop_manager.emergency_stop_system() # Act result = self.emergency_stop_manager.clear_emergency_stop_system( reason='Test clearance', user_id='test_user' ) # Assert assert result is True assert self.emergency_stop_manager.is_emergency_stop_active('STATION_001', 'PUMP_001') is False assert self.mock_db_client.execute.call_count == 2 # Stop + clearance def test_clear_nonexistent_emergency_stop(self): """Test clearing emergency stop that doesn't exist.""" # Act result = self.emergency_stop_manager.clear_emergency_stop_pump('STATION_001', 'PUMP_001') # Assert assert result is False assert self.mock_db_client.execute.call_count == 0 def test_emergency_stop_priority(self): """Test that system stop overrides station and pump stops.""" # Arrange self.emergency_stop_manager.emergency_stop_pump('STATION_001', 'PUMP_001') self.emergency_stop_manager.emergency_stop_station('STATION_002') # Act self.emergency_stop_manager.emergency_stop_system() # Assert assert self.emergency_stop_manager.is_emergency_stop_active('STATION_001', 'PUMP_001') is True assert self.emergency_stop_manager.is_emergency_stop_active('STATION_002', 'PUMP_001') is True assert self.emergency_stop_manager.is_emergency_stop_active('STATION_003', 'PUMP_001') is True def test_get_emergency_stop_status(self): """Test getting emergency stop status.""" # Arrange self.emergency_stop_manager.emergency_stop_pump('STATION_001', 'PUMP_001') self.emergency_stop_manager.emergency_stop_station('STATION_002') self.emergency_stop_manager.emergency_stop_system() # Act status = self.emergency_stop_manager.get_emergency_stop_status() # Assert assert status['system_emergency_stop'] is True assert 'STATION_002' in status['emergency_stop_stations'] assert {'station_id': 'STATION_001', 'pump_id': 'PUMP_001'} in status['emergency_stop_pumps'] assert status['total_active_stops'] == 3 # system + station + pump