From 9a9ee461b141db95aa6572f065ac94271befee34 Mon Sep 17 00:00:00 2001 From: Daniil Fajnberg Date: Fri, 12 Nov 2021 17:50:40 +0100 Subject: [PATCH] added first unittests --- tests/__init__.py | 0 tests/test_scrape.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 tests/__init__.py create mode 100644 tests/test_scrape.py diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_scrape.py b/tests/test_scrape.py new file mode 100644 index 0000000..e8d2029 --- /dev/null +++ b/tests/test_scrape.py @@ -0,0 +1,32 @@ +from unittest import TestCase +from unittest.mock import patch, MagicMock, call + +from bs4 import BeautifulSoup + +from stocksymbolscraper import scrape + + +class ScrapeTestCase(TestCase): + + @patch.object(scrape, 'get_single_tr_data') + def test_extract_row_data(self, mock_get_single_tr_data: MagicMock): + foo = 'foo' + mock_get_single_tr_data.return_value = foo + input1, input2, input3 = MagicMock(), MagicMock(), MagicMock() + # Although the function expects BS4 Tag objects as arguments, we substitute with Mocks here + # because those arguments are immediately passed into another function, which we mock out anyway. + output = scrape.extract_row_data(input1, input2, input3) + expected_output = [foo, foo, foo] + self.assertListEqual(expected_output, output) + mock_get_single_tr_data.assert_has_calls([call(input1), call(input2), call(input3)]) + + def test_get_str_from_td(self): + expected_output = 'foo bar' + test_td = BeautifulSoup(f' {expected_output} ', 'html.parser').td + output = scrape.get_str_from_td(test_td) + self.assertEqual(expected_output, output) + + expected_output = '' + test_td = BeautifulSoup('', 'html.parser').td + output = scrape.get_str_from_td(test_td) + self.assertEqual(expected_output, output)