From d504ddfc33f5c4bd9c726ac7d9052a0af51830b2 Mon Sep 17 00:00:00 2001 From: Daniil Fajnberg Date: Tue, 23 Nov 2021 19:57:37 +0100 Subject: [PATCH] reading test html file in test class set up method --- src/mwfin/functions.py | 2 ++ tests/test_functions.py | 20 ++++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/mwfin/functions.py b/src/mwfin/functions.py index a1cd4cd..c7a1240 100644 --- a/src/mwfin/functions.py +++ b/src/mwfin/functions.py @@ -11,6 +11,8 @@ 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]]] +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 6ed68dd..348575f 100644 --- a/tests/test_functions.py +++ b/tests/test_functions.py @@ -1,3 +1,4 @@ +from pathlib import Path from unittest import IsolatedAsyncioTestCase from unittest.mock import patch, MagicMock, AsyncMock, call @@ -5,14 +6,21 @@ from bs4 import BeautifulSoup from mwfin import functions -# boiled down & accurate structure of a relevant data table -# https://www.marketwatch.com/investing/stock/aapl/financials/cash-flow -# view page source @ line 2055 -TEST_HTML = '' -TEST_SOUP = BeautifulSoup(TEST_HTML, 'html.parser') + +THIS_DIR = Path(__file__).parent class FunctionsTestCase(IsolatedAsyncioTestCase): + # boiled down & accurate structure of a relevant data table + # https://www.marketwatch.com/investing/stock/aapl/financials/cash-flow + # view page source @ line 2055 + TEST_HTML_FILE_PATH = Path(THIS_DIR, 'test_structure.html') + + @classmethod + def setUpClass(cls) -> None: + with open(cls.TEST_HTML_FILE_PATH, 'r') as f: + test_html = f.read() + cls.test_soup = BeautifulSoup(test_html, functions.HTML_PARSER) @patch.object(functions, 'ClientSession') async def test_soup_from_url(self, mock_session_cls): @@ -33,7 +41,7 @@ class FunctionsTestCase(IsolatedAsyncioTestCase): def test_extract_end_dates(self): expected_output = ('End_Date_1', 'End_Date_2') - output = functions.extract_end_dates(TEST_SOUP) + output = functions.extract_end_dates(self.test_soup) self.assertTupleEqual(expected_output, output) def test_find_relevant_table_rows(self):