def test_save_inputs(self): data = [(InputDTO(id=1, name='foo', module_type='I'), ['id', 'name', 'module_type']), (InputDTO(id=2, name='bar', module_type='I'), ['id', 'name', 'module_type'])] input_mock = mock.Mock(InputConfiguration) with mock.patch.object(InputConfiguration, 'deserialize', return_value=input_mock) as deserialize, \ mock.patch.object(input_mock, 'save', return_value=None) as save: self.controller.save_inputs(data) self.assertIn(mock.call({'id': 1, 'name': 'foo'}), deserialize.call_args_list) self.assertIn(mock.call({'id': 2, 'name': 'bar'}), deserialize.call_args_list) save.assert_called_with()
def test_full_loaded_inputs(self): master_dtos = {1: InputDTO(id=1, name='one'), 2: InputDTO(id=2, name='two')} orm_inputs = [Input(id=10, number=1, event_enabled=False), Input(id=11, number=2, event_enabled=True)] select_mock = mock.Mock() select_mock.join_from.return_value = orm_inputs with mock.patch.object(Input, 'select', return_value=select_mock), \ mock.patch.object(self.master_controller, 'load_input', side_effect=lambda input_id: master_dtos.get(input_id)): dtos = self.controller.load_inputs() self.assertEqual(2, len(dtos)) self.assertIn(InputDTO(id=1, name='one', event_enabled=False), dtos) self.assertIn(InputDTO(id=2, name='two', event_enabled=True), dtos)
def _dto_to_orm(action, basic_actions): return InputMapper.dto_to_orm( InputDTO(id=0, name='input 0', action=action, basic_actions=basic_actions), fields=['name', 'action', 'basic_actions'])
def test_subscribe_input_events(self): consumer_list = [] def new_consumer(*args): consumer = BackgroundConsumer(*args) consumer_list.append(consumer) return consumer subscriber = mock.Mock() with mock.patch.object(gateway.hal.master_controller_classic, 'BackgroundConsumer', side_effect=new_consumer) as new_consumer: controller = get_classic_controller_dummy() pubsub = get_pubsub() controller._register_version_depending_background_consumers() controller._input_config = {1: InputDTO(id=1)} # TODO: cleanup pubsub.subscribe_master_events(PubSub.MasterTopics.INPUT, subscriber.callback) new_consumer.assert_called() consumer_list[-2].deliver({'input': 1}) pubsub._publish_all_events() try: consumer_list[-2]._consume() except: pass # Just ensure it has at least consumed once expected_event = MasterEvent.deserialize({'type': 'INPUT_CHANGE', 'data': {'id': 1, 'status': True, 'location': {'room_id': 255}}}) subscriber.callback.assert_called_with(expected_event)
def test_orm_sync(self): events = [] def handle_event(gateway_event): events.append(gateway_event) self.pubsub.subscribe_gateway_events(PubSub.GatewayTopics.CONFIG, handle_event) input_dto = InputDTO(id=42) with mock.patch.object(self.master_controller, 'load_inputs', return_value=[input_dto]): self.controller.run_sync_orm() self.pubsub._publish_all_events() assert Input.select().where(Input.number == input_dto.id).count() == 1 assert GatewayEvent(GatewayEvent.Types.CONFIG_CHANGE, {'type': 'input'}) in events assert len(events) == 1
def deserialize(api_data): # type: (Dict) -> InputDTO input_dto = InputDTO(api_data['id']) SerializerToolbox.deserialize( dto=input_dto, # Referenced api_data=api_data, mapping={ 'module_type': ('module_type', None), 'name': ('name', None), 'action': ('action', InputSerializer.BYTE_MAX), 'basic_actions': ('basic_actions', lambda s: [] if s == '' else [int(a) for a in s.split(',')]), 'invert': ('invert', lambda i: i != 255), 'can': ('can', lambda s: s == 'C'), 'event_enabled': ('event_enabled', None), 'room': ('room', InputSerializer.BYTE_MAX) }) return input_dto
def test_mapping_basic(self): orm = InputMapper.dto_to_orm( InputDTO(id=0, name='input 0', event_enabled=True, invert=True)) self.assertEqual(0, orm.id) self.assertEqual('input 0', orm.name) self.assertFalse(orm.input_config.normal_open) dto = InputMapper.orm_to_dto( InputConfiguration.deserialize({ 'id': 1, 'name': 'input 1', 'input_config': { 'normal_open': True }, 'module': { 'id': 0, 'device_type': 'b' } })) self.assertEqual(1, dto.id) self.assertEqual('input 1', dto.name) self.assertEqual('I', dto.module_type) self.assertFalse(dto.invert)
def _dto_to_orm(action, basic_actions): return InputMapper.dto_to_orm( InputDTO(id=0, name='input 0', action=action, basic_actions=basic_actions))