def test__determine_pilot(self): determine_pilot = DeterminePilot() pitch_capt = Mock() pitch_fo = Mock() roll_capt = Mock() roll_fo = Mock() cc_capt = Mock() cc_fo = Mock() pitch_capt.array = Mock() pitch_fo.array = Mock() roll_capt.array = Mock() roll_fo.array = Mock() cc_capt.array = Mock() cc_fo.array = Mock() ap1 = Mock() ap2 = Mock() phase = Mock() determine_pilot._autopilot_engaged = Mock() determine_pilot._controls_in_use = Mock() determine_pilot._control_column_in_use = Mock() determine_pilot.set_flight_attr = Mock() def reset_all_mocks(): determine_pilot._autopilot_engaged.reset_mock() determine_pilot._controls_in_use.reset_mock() determine_pilot._control_column_in_use.reset_mock() determine_pilot.set_flight_attr.reset_mock() # Controls in use, no phase. reset_all_mocks() pilot = determine_pilot._determine_pilot( None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo, None, None, None) self.assertFalse(determine_pilot._autopilot_engaged.called) self.assertFalse(determine_pilot._controls_in_use.called) self.assertEqual(pilot, None) # Controls in use with phase. Pilot cannot be discerned. reset_all_mocks() determine_pilot._controls_in_use.return_value = None determine_pilot._control_column_in_use.return_value = None pilot = determine_pilot._determine_pilot( None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo, phase, None, None) self.assertFalse(determine_pilot._autopilot_engaged.called) determine_pilot._controls_in_use.assert_called_once_with( pitch_capt.array, pitch_fo.array, roll_capt.array, roll_fo.array, phase) determine_pilot._control_column_in_use.assert_called_once_with( cc_capt.array, cc_fo.array, phase) self.assertEqual(pilot, determine_pilot._controls_in_use.return_value) # Controls in use with phase. Pilot returned reset_all_mocks() determine_pilot._controls_in_use.return_value = 'Captain' pilot = determine_pilot._determine_pilot( None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo, phase, None, None) self.assertFalse(determine_pilot._autopilot_engaged.called) determine_pilot._controls_in_use.assert_called_once_with(pitch_capt.array, pitch_fo.array, roll_capt.array, roll_fo.array, phase) self.assertEqual(pilot, determine_pilot._controls_in_use.return_value) # Only Autopilot. reset_all_mocks() determine_pilot._autopilot_engaged.return_value = 'Captain' pilot = determine_pilot._determine_pilot(None, None, None, None, None, None, None, None, ap1, ap2) determine_pilot._autopilot_engaged.assert_called_once_with(ap1, ap2) self.assertFalse(determine_pilot._controls_in_use.called) self.assertEqual(pilot, determine_pilot._autopilot_engaged.return_value) # Controls in Use overrides Autopilot. reset_all_mocks() determine_pilot._controls_in_use.return_value = 'Captain' determine_pilot._autopilot_engaged.return_value = 'First Officer' pilot = determine_pilot._determine_pilot( None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo, phase, ap1, ap2) self.assertFalse(determine_pilot._autopilot_engaged.called) determine_pilot._controls_in_use.assert_called_once_with( pitch_capt.array, pitch_fo.array, roll_capt.array, roll_fo.array, phase) self.assertEqual(pilot, determine_pilot._controls_in_use.return_value) # Autopilot is used when Controls in Use does not provide an answer. reset_all_mocks() determine_pilot._autopilot_engaged.return_value = 'First Officer' determine_pilot._controls_in_use.return_value = None determine_pilot._control_column_in_use.return_value = None pilot = determine_pilot._determine_pilot( None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo, phase, ap1, ap2) determine_pilot._autopilot_engaged.assert_called_once_with(ap1, ap2) determine_pilot._controls_in_use.assert_called_once_with( pitch_capt.array, pitch_fo.array, roll_capt.array, roll_fo.array, phase) self.assertEqual(pilot, determine_pilot._autopilot_engaged.return_value)