From 525d56ef636c9e7a6f117ffd6ae84ca570f9affa Mon Sep 17 00:00:00 2001 From: Maximilian Fajnberg Date: Mon, 22 Nov 2021 19:52:36 +0100 Subject: [PATCH] first two unit tests --- src/mwfin/functions.py | 3 +++ tests/test_functions.py | 38 +++++++++++++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/mwfin/functions.py b/src/mwfin/functions.py index a1cd4cd..ac4022f 100644 --- a/src/mwfin/functions.py +++ b/src/mwfin/functions.py @@ -11,6 +11,9 @@ from bs4.element import ResultSet, Tag # the end dates of the reporting periods as strings (either years or quarters). ResultDict = dict[str, Union[tuple[int], tuple[str]]] +DOMAIN = 'www.marketwatch.com' +HTML_PARSER = 'html.parser' + async def soup_from_url(url: str, session: ClientSession = None) -> BeautifulSoup: """ diff --git a/tests/test_functions.py b/tests/test_functions.py index bb99616..c0b0f06 100644 --- a/tests/test_functions.py +++ b/tests/test_functions.py @@ -1,13 +1,45 @@ from unittest import IsolatedAsyncioTestCase +from unittest.mock import patch, MagicMock, AsyncMock, call + +from bs4 import BeautifulSoup + +from mwfin import functions class FunctionsTestCase(IsolatedAsyncioTestCase): - def test_soup_from_url(self): - pass + @patch.object(functions, 'ClientSession') + async def test_soup_from_url(self, mock_session_cls): + test_html = 'foo' + mock_response = MagicMock() + mock_response.text = AsyncMock(return_value=test_html) + mock_get_return = MagicMock() + mock_get_return.__aenter__ = AsyncMock(return_value=mock_response) + mock_session_obj = MagicMock() + mock_session_obj.get = MagicMock(return_value=mock_get_return) + mock_session_cls.return_value = mock_session_obj + + expected_output = BeautifulSoup(test_html, 'html.parser') + output = await functions.soup_from_url('baz') + self.assertEqual(expected_output, output) + output = await functions.soup_from_url('baz', mock_session_obj) + self.assertEqual(expected_output, output) def test_extract_end_dates(self): - pass + test_html = '' \ + '
ITEM
' \ + '
30-SEP-2020
' \ + '
31-DEC-2020
' \ + '
31-MAR-2021
' \ + '
30-JUN-2021
' \ + '
30-SEP-2021
' \ + '' + test_soup = BeautifulSoup(test_html, 'html.parser') + + expected_output = ('30-SEP-2020', '31-DEC-2020', '31-MAR-2021', + '30-JUN-2021', '30-SEP-2021') + output = functions.extract_end_dates(test_soup) + self.assertTupleEqual(expected_output, output) def test_find_relevant_table_rows(self): pass