Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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'])
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
 def _dto_to_orm(action, basic_actions):
     return InputMapper.dto_to_orm(
         InputDTO(id=0,
                  name='input 0',
                  action=action,
                  basic_actions=basic_actions))