Compare commits

...

2 Commits

5 changed files with 38 additions and 1 deletions

4
.gitignore vendored
View File

@ -1,2 +1,6 @@
# Virtual environment
/.venv/
# PyCharm:
/.idea/
# Distribution / packaging:
*.egg-info/

View File

@ -0,0 +1 @@
from .scrape import *

View File

@ -5,7 +5,7 @@ import csv
from argparse import ArgumentParser
from pathlib import Path
from .scrape import get_all_data, log
from . import get_all_data, log
def main() -> None:

0
tests/__init__.py Normal file
View File

32
tests/test_scrape.py Normal file
View File

@ -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'<td> {expected_output} </td>', 'html.parser').td
output = scrape.get_str_from_td(test_td)
self.assertEqual(expected_output, output)
expected_output = ''
test_td = BeautifulSoup('<td></td>', 'html.parser').td
output = scrape.get_str_from_td(test_td)
self.assertEqual(expected_output, output)