예제 #1
0
def test_partitions_callable_prop(mocker):
    alarm = Paradox()
    alarm.panel = mocker.MagicMock()
    alarm.panel.property_map = {
        "arm":
        dict(level=EventLevel.INFO,
             message={
                 "True": "{Type} {label} is armed",
                 "False": "{Type} {label} is disarmed"
             }),
    }

    alarm._on_labels_load(data=dict(
        partition={1: dict(id=1, label='Partition 1', key='Partition_1')}))

    sendChange = mocker.patch("paradox.data.memory_storage.ps.sendChange")

    alarm._on_status_update(status=dict(partition={1: dict(arm=False)}))

    sendChange.assert_any_call(
        Change('partition', 'Partition_1', 'arm', False, initial=True))
    sendChange.reset_mock()

    alarm.storage.update_container_object("partition", "Partition_1",
                                          dict(arm=lambda old: not old))
    sendChange.assert_any_call(Change('partition', 'Partition_1', 'arm', True))
예제 #2
0
async def setup_panel(mocker):
    mocker.patch.multiple(
        cfg, LOGGING_LEVEL_CONSOLE=logging.DEBUG, LOGGING_DUMP_PACKETS=True
    )
    mocker.patch("paradox.lib.utils.main_thread_loop", asyncio.get_event_loop())
    # cfg.LOGGING_LEVEL_CONSOLE = logging.DEBUG
    # cfg.LOGGING_DUMP_PACKETS = True

    logger.setLevel(logging.DEBUG)
    alarm = Paradox()
    # alarm.work_loop.set_debug(True)

    alarm.run_state = RunState.RUN

    start_communication_response = Container(
        fields=Container(value=Container(product_id="MAGELLAN_MG5050"))
    )

    alarm.panel = create_panel(alarm, start_communication_response)

    await send_initial_status(alarm)
    con = MockConnection(alarm.on_connection_message)

    alarm._connection = con
    alarm._register_connection_handlers()

    return alarm, con
예제 #3
0
파일: test_status.py 프로젝트: jakezp/pai-1
async def test_update_properties(mocker):
    alarm = Paradox()
    alarm.panel = mocker.MagicMock()
    ps = mocker.patch("paradox.lib.ps")

    alarm._on_status_update(converted_status)

    await asyncio.sleep(0.01)
예제 #4
0
def test_update_properties(mocker):
    alarm = Paradox()
    alarm.panel = mocker.MagicMock()
    ps = mocker.patch("paradox.lib.ps")

    alarm._on_status_update(converted_status)

    print(ps)
예제 #5
0
def alarm(mocker):
    mocker.patch('paradox.lib.utils.main_thread_loop', asyncio.get_event_loop())
    # conn = mocker.patch("paradox.interfaces.mqtt.core.MQTTConnection")
    # conn.connected = True
    alarm = Paradox(None)
    mocker.spy(alarm.storage, 'update_container_object')
    alarm.panel = MagicMock()

    return alarm
예제 #6
0
async def test_current_alarm(mocker):
    mocker.patch('paradox.lib.utils.main_thread_loop', asyncio.get_event_loop())
    alarm = Paradox(None)
    alarm.panel = Panel_EVO192(alarm, 5)
    mocker.spy(alarm.storage, 'update_container_object')

    send_initial_status(alarm)

    payload = binascii.unhexlify('e2ff1cc414130b010f2c1801030000000000024f66666963652020202020202020202000d9')
    raw = LiveEvent.parse(payload)
    alarm.handle_event_message(raw)

    await asyncio.sleep(0.01)

    alarm.storage.update_container_object.assert_any_call('partition', 'Partition_1', {
        'current_state': 'triggered'
    })
    alarm.panel = None
예제 #7
0
async def test_current_alarm(mocker):
    mocker.patch("paradox.lib.utils.main_thread_loop",
                 asyncio.get_event_loop())
    alarm = Paradox(None)

    alarm.panel = create_evo192_panel(alarm)
    mocker.spy(alarm.storage, "update_container_object")

    send_initial_status(alarm)

    payload = binascii.unhexlify(
        "e2ff1cc414130b010f2c1801030000000000024f66666963652020202020202020202000d9"
    )
    raw = LiveEvent.parse(payload)
    alarm.handle_event_message(raw)

    await asyncio.sleep(0.01)

    alarm.storage.update_container_object.assert_any_call(
        "partition", "Partition_1", {"current_state": "triggered"})
    alarm.panel = None
예제 #8
0
def test_current_alarm(mocker):
    alarm = Paradox(None)
    mocker.spy(alarm.storage, 'update_container_object')
    alarm.panel = Panel_EVO192(alarm, 5)

    send_initial_status(alarm)

    payload = binascii.unhexlify('e2ff1cc414130b010f2c1801030000000000024f66666963652020202020202020202000d9')
    raw = LiveEvent.parse(payload)
    alarm.handle_event_message(raw)

    alarm.storage.update_container_object.assert_any_call('partition', 'Partition_1', {
        'current_state': 'triggered'
    })
예제 #9
0
def test_partitions(mocker):
    alarm = Paradox()
    alarm.panel = mocker.MagicMock()
    alarm.panel.property_map = {
        "arm": dict(level=EventLevel.INFO,
                    message={"True": "{Type} {label} is armed",
                             "False": "{Type} {label} is disarmed"}),
    }

    event = mocker.MagicMock()
    mocker.patch("paradox.lib.ps.sendChange")
    mocker.patch("paradox.lib.ps.sendEvent")
    mocker.patch('paradox.event.ChangeEvent', return_value=event)

    ps.sendMessage("labels_loaded", data=dict(
        partition={
            1: dict(
                id=1,
                label='Partition 1',
                key='Partition_1'
            )
        }
    ))

    assert isinstance(alarm.panel, mocker.MagicMock)

    alarm.storage.update_container_object("partition", "Partition_1", dict(arm=True))

    ps.sendChange.assert_called_once_with(Change('partition', 'Partition_1', 'arm', True, initial=True))
    ps.sendChange.reset_mock()

    assert isinstance(alarm.panel, mocker.MagicMock)

    ps.sendMessage("status_update", status=dict(
        partition={
            1: dict(
                arm=False
            )
        }
    ))

    assert isinstance(alarm.panel, mocker.MagicMock)

    ps.sendChange.assert_any_call(Change('partition', 'Partition_1', 'current_state', 'disarmed', initial=True))
    ps.sendChange.assert_any_call(Change('partition', 'Partition_1', 'target_state', 'disarmed', initial=True))
    ps.sendChange.assert_any_call(Change('partition', 'Partition_1', 'arm', False, initial=False))
    assert ps.sendChange.call_count == 3

    assert ps.sendEvent.call_count == 0
예제 #10
0
async def test_control_doors(mocker):
    alarm = Paradox()
    alarm.panel = mocker.Mock(spec=Panel)
    alarm.panel.control_doors = CoroutineMock()

    alarm.storage.get_container("door").deep_merge(
        {1: {
            "id": 1,
            "key": "Door 1"
        }})

    assert await alarm.control_door("1", "unlock")
    alarm.panel.control_doors.assert_called_once_with([1], "unlock")
    alarm.panel.control_doors.reset_mock()

    assert await alarm.control_door("Door 1", "unlock")
    alarm.panel.control_doors.assert_called_once_with([1], "unlock")
예제 #11
0
def test_partitions(mocker):
    alarm = Paradox()
    alarm.panel = mocker.MagicMock()
    alarm.panel.property_map = {
        "arm":
        dict(
            level=EventLevel.INFO,
            message={
                "True": "{Type} {label} is armed",
                "False": "{Type} {label} is disarmed",
            },
        ),
    }

    alarm._on_labels_load(data=dict(
        partition={1: dict(id=1, label="Partition 1", key="Partition_1")}))

    sendChange = mocker.patch("paradox.data.memory_storage.ps.sendChange")

    alarm.storage.update_container_object("partition", "Partition_1",
                                          dict(arm=True))

    sendChange.assert_called_once_with(
        Change("partition", "Partition_1", "arm", True, initial=True))
    sendChange.reset_mock()

    assert isinstance(alarm.panel, mocker.MagicMock)

    alarm._on_status_update(status=dict(partition={1: dict(arm=False)}))

    assert isinstance(alarm.panel, mocker.MagicMock)

    sendChange.assert_any_call(
        Change("partition",
               "Partition_1",
               "current_state",
               "disarmed",
               initial=True))
    sendChange.assert_any_call(
        Change("partition",
               "Partition_1",
               "target_state",
               "disarmed",
               initial=True))
    sendChange.assert_any_call(
        Change("partition", "Partition_1", "arm", False, initial=False))
예제 #12
0
def test_current_state_armed_away(mocker):
    alarm = Paradox(None)
    mocker.spy(alarm.storage, 'update_container_object')
    alarm.panel = MagicMock()

    send_initial_status(alarm)

    sendMessage("status_update", status=dict(
        partition={
            1: dict(
                arm=True
            )
        }
    ))
    alarm.storage.update_container_object.assert_any_call('partition', 'Partition_1', {
        'current_state': 'armed_away',
        'target_state': 'armed_away'
    })
예제 #13
0
async def setup_panel(mocker):
    mocker.patch.object(cfg, "LOGGING_LEVEL_CONSOLE", logging.DEBUG)
    mocker.patch.object(cfg, "LOGGING_DUMP_PACKETS", True)
    mocker.patch("paradox.lib.utils.main_thread_loop", asyncio.get_event_loop())
    # cfg.LOGGING_LEVEL_CONSOLE = logging.DEBUG
    # cfg.LOGGING_DUMP_PACKETS = True
    
    logger.setLevel(logging.DEBUG)
    alarm = Paradox()
    #alarm.work_loop.set_debug(True)

    alarm.run_state = RunState.RUN
    alarm.panel = create_panel(alarm, 'MAGELLAN_MG5050')
    
    await send_initial_status(alarm)
    con = MockConnection(alarm.on_connection_message)
    
    alarm._connection = con
    alarm._register_connection_handlers()
    
    return alarm, con 
예제 #14
0
async def test_send_panic(mocker):
    alarm = Paradox()
    alarm.panel = mocker.Mock(spec=Panel)
    alarm.panel.send_panic = CoroutineMock()

    alarm.storage.get_container("partition").deep_merge(
        {1: {
            "id": 1,
            "key": "Partition 1"
        }})
    alarm.storage.get_container("user").deep_merge(
        {3: {
            "id": 3,
            "key": "User 3"
        }})

    assert await alarm.send_panic("1", "fire", "3")
    alarm.panel.send_panic.assert_called_once_with([1], "fire", 3)
    alarm.panel.send_panic.reset_mock()

    assert await alarm.send_panic("Partition 1", "fire", "User 3")
    alarm.panel.send_panic.assert_called_once_with([1], "fire", 3)
예제 #15
0
def test_partitions_callable_prop(mocker):
    alarm = Paradox()
    alarm.panel = mocker.MagicMock()
    alarm.panel.property_map = {
        "arm": dict(level=EventLevel.INFO,
                    message={"True": "{Type} {label} is armed",
                             "False": "{Type} {label} is disarmed"}),
    }

    event = mocker.MagicMock()
    mocker.patch.object(ps, "sendChange")
    mocker.patch.object(ps, "sendEvent")
    mocker.patch('paradox.event.ChangeEvent', return_value=event)

    ps.sendMessage("labels_loaded", data=dict(
        partition={
            1: dict(
                id=1,
                label='Partition 1',
                key='Partition_1'
            )
        }
    ))

    ps.sendMessage("status_update", status=dict(
        partition={
            1: dict(
                arm=False
            )
        }
    ))

    ps.sendChange.assert_any_call(Change('partition', 'Partition_1', 'arm', False, initial=True))
    ps.sendChange.reset_mock()

    alarm.storage.update_container_object("partition", "Partition_1", dict(arm=lambda old: not old))
    ps.sendChange.assert_any_call(Change('partition', 'Partition_1', 'arm', True))

    ps.sendEvent.call_count = 0