From c5bd187c2d6db836a3bb3c19327b59d86b6be389 Mon Sep 17 00:00:00 2001
From: Pavel Kirilin <win10@list.ru>
Date: Sun, 28 Jun 2020 05:06:46 +0400
Subject: [PATCH] Testing and fixes. Description: - Fixed blyaficate function.
 - Added pytests.

Signed-off-by: Pavel Kirilin <win10@list.ru>
---
 Makefile                           |  2 +-
 requirements/requirements.test.txt |  2 ++
 src/actions/fun.py                 |  5 +++--
 tests/__init__.py                  | 13 +++++++++++++
 tests/conftest.py                  | 28 ++++++++++++++++++++++++++++
 tests/test_fun.py                  | 18 ++++++++++++++++++
 6 files changed, 65 insertions(+), 3 deletions(-)
 create mode 100644 tests/__init__.py
 create mode 100644 tests/conftest.py
 create mode 100644 tests/test_fun.py

diff --git a/Makefile b/Makefile
index 80b8baa..9332b70 100644
--- a/Makefile
+++ b/Makefile
@@ -12,4 +12,4 @@ clean_test:
 
 _test:
 	pre-commit run -a
-	echo "Python tests coming soon..."
+	pytest
diff --git a/requirements/requirements.test.txt b/requirements/requirements.test.txt
index 2973bde..ef00d8b 100644
--- a/requirements/requirements.test.txt
+++ b/requirements/requirements.test.txt
@@ -4,3 +4,5 @@ docker-compose==1.26.0
 flake8==3.8.3
 isort==4.3.21
 pre-commit==2.5.1
+pytest==5.4.3
+pytest-asyncio==0.14.0
diff --git a/src/actions/fun.py b/src/actions/fun.py
index c7298e6..2446f69 100644
--- a/src/actions/fun.py
+++ b/src/actions/fun.py
@@ -25,7 +25,7 @@ swearing = [
 
 @config.telegram_client.on(events.NewMessage(pattern=r"^\.bl (.*)", forwards=False))
 async def blyaficate(event: events.NewMessage.Event):
-    message = event.pattern_match.group(1).strip()
+    message = event.message.lstrip(".bl ").strip()
     response = ""
     for symbol in message:
         if symbol == ",":
@@ -37,11 +37,12 @@ async def blyaficate(event: events.NewMessage.Event):
                     ", нахуй,",
                     ", еб твою мать,",
                     ", разрази меня гром,",
-                    ", ёбнуться,",
+                    ", пиздец,",
                 ]
             )
         else:
             response += symbol
+    response = response.lstrip(",").rstrip(",")
     await event.reply(response)
 
 
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..e745c0d
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,13 @@
+from unittest.mock import MagicMock
+
+
+def patch_client():
+    from src.config import config
+
+    client_mock = MagicMock()
+    print("Updating config")
+    client_mock.on = lambda x: lambda f: f
+    config.telegram_client = client_mock
+
+
+patch_client()
diff --git a/tests/conftest.py b/tests/conftest.py
new file mode 100644
index 0000000..f93d085
--- /dev/null
+++ b/tests/conftest.py
@@ -0,0 +1,28 @@
+from unittest.mock import MagicMock
+
+
+class NewMessageTestEvent(object):
+    def __init__(self, message: str, forwarded=False):
+        self._msg = message
+        self._fwd = forwarded
+        self._res = None
+
+    async def reply(self, response):
+        self._res = response
+
+    async def respond(self, response):
+        self._res = response
+
+    @property
+    def pattern_match(self):
+        mock = MagicMock()
+        mock.group = MagicMock(return_value=self._msg)
+        return mock
+
+    @property
+    def result(self):
+        return self._res
+
+    @property
+    def message(self):
+        return self._msg
diff --git a/tests/test_fun.py b/tests/test_fun.py
new file mode 100644
index 0000000..1d3acd2
--- /dev/null
+++ b/tests/test_fun.py
@@ -0,0 +1,18 @@
+import pytest
+
+from src.actions import fun
+from tests.conftest import NewMessageTestEvent
+
+
+@pytest.mark.asyncio
+async def test_bl_trailing_comma():
+    event_mock = NewMessageTestEvent("test,")
+    await fun.blyaficate(event_mock)
+    assert not event_mock.result.endswith(",")
+
+
+@pytest.mark.asyncio
+async def test_bl_starting_comma():
+    event_mock = NewMessageTestEvent(",test.")
+    await fun.blyaficate(event_mock)
+    assert not event_mock.result.startswith(",")
-- 
GitLab