From d737307b0a61638aedd778ba6d27ce275fcf3aaa Mon Sep 17 00:00:00 2001
From: Nico Alt <nicoalt@posteo.org>
Date: Fri, 12 Jun 2020 13:00:01 +0000
Subject: [PATCH] Add tests for SocketListener

---
 .../models/test_socket_listener.py            | 163 ++++++++++++++++++
 1 file changed, 163 insertions(+)
 create mode 100644 tests/briar_wrapper/models/test_socket_listener.py

diff --git a/tests/briar_wrapper/models/test_socket_listener.py b/tests/briar_wrapper/models/test_socket_listener.py
new file mode 100644
index 0000000..24256ef
--- /dev/null
+++ b/tests/briar_wrapper/models/test_socket_listener.py
@@ -0,0 +1,163 @@
+# Copyright (c) 2020 Nico Alt
+# SPDX-License-Identifier: AGPL-3.0-only
+# License-Filename: LICENSE.md
+
+import pytest
+
+from briar_wrapper.models.socket_listener import SocketListener
+
+MODULE = "briar_wrapper.models.socket_listener.%s"
+
+
+def test_init_websocket_thread(mocker):
+    thread_mock = mocker.patch(MODULE % "Thread")
+
+    SocketListener(None)
+
+    thread_mock.assert_called_once()
+
+
+def test_init_watch_loop(mocker):
+    watch_loop_mock = mocker.patch(MODULE % "SocketListener._start_watch_loop")
+
+    SocketListener(None)
+
+    watch_loop_mock.assert_called_once()
+
+
+def test_connect_lock(mocker):
+    lock_mock = mocker.Mock()
+
+    manager = mocker.Mock()
+    manager.attach_mock(lock_mock.acquire, 'acquire_mock')
+    manager.attach_mock(lock_mock.release, 'release_mock')
+
+    socket_listener = SocketListener(None)
+    socket_listener._signals_lock = lock_mock
+
+    socket_listener.connect(None, None)
+
+    expected_calls = [
+        mocker.call.acquire_mock(),
+        mocker.call.release_mock()
+    ]
+
+    assert manager.mock_calls == expected_calls
+
+
+def test_connect_signal_added(mocker):
+    event_mock = mocker.MagicMock()
+    callback_mock = mocker.MagicMock()
+
+    socket_listener = SocketListener(None)
+    socket_listener._highest_signal_id = 136
+
+    assert socket_listener._signals == dict()
+
+    socket_listener.connect(event_mock, callback_mock)
+
+    expected_signals = {
+        137: {
+            "event": event_mock,
+            "callback": callback_mock
+        }
+    }
+
+    assert socket_listener._signals == expected_signals
+
+
+def test_connect_signal_id(mocker):
+    event_mock = mocker.MagicMock()
+    callback_mock = mocker.MagicMock()
+
+    socket_listener = SocketListener(None)
+    socket_listener._highest_signal_id = 137
+
+    signal_id = socket_listener.connect(event_mock, callback_mock)
+
+    assert signal_id == 137 + 1
+
+
+def test_disconnect_lock(mocker):
+    lock_mock = mocker.Mock()
+
+    manager = mocker.Mock()
+    manager.attach_mock(lock_mock.acquire, 'acquire_mock')
+    manager.attach_mock(lock_mock.release, 'release_mock')
+
+    socket_listener = SocketListener(None)
+    socket_listener._signals_lock = lock_mock
+    socket_listener._signals = mocker.MagicMock()
+
+    socket_listener.disconnect(None)
+
+    expected_calls = [
+        mocker.call.acquire_mock(),
+        mocker.call.release_mock()
+    ]
+
+    assert manager.mock_calls == expected_calls
+
+
+def test_disconnect_signal_removed(mocker):
+    socket_listener = SocketListener(None)
+    socket_listener._signals = {
+        137: {
+            "event": None,
+            "callback": None
+        }
+    }
+
+    socket_listener.disconnect(137)
+
+    assert socket_listener._signals == dict()
+
+
+@pytest.mark.skip(reason="todo")
+def test_start_websocket():
+    pass
+
+
+@pytest.mark.skip(reason="todo")
+def test_watch_messages():
+    pass
+
+
+def test_call_signal_callbacks(mocker):
+    message = {
+        'name': 'VeryImportantEvent'
+    }
+    callback_mock = mocker.MagicMock()
+
+    socket_listener = SocketListener(None)
+    socket_listener._signals = {
+        137: {
+            "event": 'VeryImportantEvent',
+            "callback": callback_mock
+        }
+    }
+
+    socket_listener._call_signal_callbacks(message)
+
+    callback_mock.assert_called_once_with(message)
+
+
+def test_call_signal_callbacks_lock(mocker):
+    lock_mock = mocker.Mock()
+
+    manager = mocker.Mock()
+    manager.attach_mock(lock_mock.acquire, 'acquire_mock')
+    manager.attach_mock(lock_mock.release, 'release_mock')
+
+    socket_listener = SocketListener(None)
+    socket_listener._signals_lock = lock_mock
+    socket_listener._signals = mocker.MagicMock()
+
+    socket_listener._call_signal_callbacks(None)
+
+    expected_calls = [
+        mocker.call.acquire_mock(),
+        mocker.call.release_mock()
+    ]
+
+    assert manager.mock_calls == expected_calls
-- 
GitLab