diff --git a/src/mwfin/exceptions.py b/src/mwfin/exceptions.py
new file mode 100644
index 0000000..04572f4
--- /dev/null
+++ b/src/mwfin/exceptions.py
@@ -0,0 +1,10 @@
+class WrongAssumptions(Exception):
+ pass
+
+
+class UnexpectedMarkup(WrongAssumptions):
+ pass
+
+
+class UnknownFinancialStatementItem(WrongAssumptions):
+ pass
diff --git a/tests/test_functions.py b/tests/test_functions.py
index 1ba8200..b1ec9fc 100644
--- a/tests/test_functions.py
+++ b/tests/test_functions.py
@@ -7,6 +7,7 @@ from bs4 import BeautifulSoup
from mwfin import functions
from mwfin.constants import HTML_PARSER, BASE_URL, FIN_STMT_URL_SUFFIX, IS, BS, CF, END_DATE
+from mwfin.exceptions import UnknownFinancialStatementItem
THIS_DIR = Path(__file__).parent
@@ -62,7 +63,8 @@ class FunctionsTestCase(IsolatedAsyncioTestCase):
test_soup = BeautifulSoup('
Cash & Short Term Investments Growth |
', HTML_PARSER)
self.assertFalse(functions.is_relevant_table_row(test_soup.tr))
test_soup = BeautifulSoup(' baz |
', HTML_PARSER)
- self.assertFalse(functions.is_relevant_table_row(test_soup.tr))
+ with self.assertRaises(UnknownFinancialStatementItem):
+ functions.is_relevant_table_row(test_soup.tr)
@patch.object(functions, 'is_relevant_table_row')
def test_find_relevant_table_rows(self, mock_is_relevant_table_row):
@@ -72,6 +74,11 @@ class FunctionsTestCase(IsolatedAsyncioTestCase):
self.assertListEqual(expected_output, output)
mock_is_relevant_table_row.assert_has_calls([call(expected_output[0]), call(expected_output[1])])
+ mock_is_relevant_table_row.side_effect = UnknownFinancialStatementItem()
+ expected_output = self.test_soup.find_all('thistagdoesntexist')
+ output = functions.find_relevant_table_rows(self.test_soup)
+ self.assertListEqual(expected_output, output)
+
def test_extract_row_data(self):
test_row = self.test_soup.find('div', attrs={'class': 'financials'}).tbody.tr
expected_output = ('Cash & Short Term Investments', (11000000, -22000000))