Skip to content

Commit

Permalink
Refactor test_export_html to work with modules (#121)
Browse files Browse the repository at this point in the history
  • Loading branch information
JoshKowi authored Nov 29, 2024
1 parent cbc2fb6 commit 61ea19b
Showing 1 changed file with 32 additions and 16 deletions.
48 changes: 32 additions & 16 deletions pywikitools/test/test_export_html.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
- export content.json (with current content)
Run tests:
python3 pywikitools/test/test_export_html.py
python3 pywikitools/test/test_export_html.py
"""

from os.path import abspath, dirname, join, exists
Expand All @@ -17,11 +17,12 @@

import requests
from unittest.mock import Mock, patch
from configparser import ConfigParser

from pywikitools.fortraininglib import ForTrainingLib
from pywikitools.resourcesbot.changes import ChangeLog, ChangeType
from pywikitools.resourcesbot.data_structures import LanguageInfo, json_decode
from pywikitools.resourcesbot.export_html import ExportHTML
from pywikitools.resourcesbot.modules.export_html import ExportHTML


class TestExportHTML(unittest.TestCase):
Expand All @@ -37,19 +38,23 @@ def setUpClass(self):

@patch("os.makedirs")
def test_run_with_empty_base_folder(self, mock_makedirs):
with self.assertLogs('pywikitools.resourcesbot.export_html', level='WARNING'):
export_html = ExportHTML(self.fortraininglib, "", force_rewrite=False)
empty_config = ConfigParser()
with self.assertLogs('pywikitools.resourcesbot.modules.export_html', level='WARNING'):
export_html = ExportHTML(self.fortraininglib, empty_config, None)

# run() should return without doing anything because of empty base folder
export_html.run(self.language_info, self.english_info, ChangeLog(), ChangeLog())
export_html.run(self.language_info, self.english_info, ChangeLog(), ChangeLog(), force_rewrite=False)
mock_makedirs.assert_not_called()

def test_run_filters_unfinished_worksheets(self):
fortraininglib_mock = Mock()
temp_config = ConfigParser()
temp_config.add_section("Paths")
with tempfile.TemporaryDirectory() as temp_dir:
export_html = ExportHTML(fortraininglib_mock, temp_dir, force_rewrite=False)
temp_config.set("Paths", "htmlexport", temp_dir)
export_html = ExportHTML(fortraininglib_mock, temp_config, None)
with patch.object(export_html, 'has_relevant_change', return_value=False) as mock_has_relevant_change:
export_html.run(self.language_info, self.english_info, ChangeLog(), ChangeLog())
export_html.run(self.language_info, self.english_info, ChangeLog(), ChangeLog(), force_rewrite=False)
calls = [call[0][0] for call in mock_has_relevant_change.call_args_list]
# Healing is finished, Church is an unfinished worksheet
self.assertIn('Healing', calls)
Expand All @@ -63,11 +68,14 @@ def test_directory_structure_creation(self):
with tempfile.TemporaryDirectory() as temp_dir:
# Create target paths to check later
base_folder = join(temp_dir, "not_existing_yet")
config = ConfigParser()
config.add_section("Paths")
config.set("Paths", "htmlexport", base_folder)

# Base folder should be created directly when initializing the class
export_html = ExportHTML(self.fortraininglib, base_folder, force_rewrite=False)
export_html = ExportHTML(self.fortraininglib, config, None)
self.assertTrue(exists(base_folder))
export_html.run(self.language_info, self.english_info, ChangeLog(), ChangeLog())
export_html.run(self.language_info, self.english_info, ChangeLog(), ChangeLog(), force_rewrite=False)

# Assert that the right directories were created
self.assertTrue(exists(join(base_folder, "ru")))
Expand All @@ -76,7 +84,7 @@ def test_directory_structure_creation(self):

# assert that the method still works if the folders are already there
with self.assertNoLogs(level='WARNING'):
export_html.run(self.language_info, self.english_info, ChangeLog(), ChangeLog())
export_html.run(self.language_info, self.english_info, ChangeLog(), ChangeLog(), force_rewrite=False)

@patch('pywikitools.fortraininglib.ForTrainingLib.get_page_html')
def test_download_and_save_transformed_html_and_images(self, mock_get_page_html):
Expand All @@ -86,6 +94,9 @@ def test_download_and_save_transformed_html_and_images(self, mock_get_page_html)
changelog.add_change('Healing', ChangeType.UPDATED_WORKSHEET)
changelog.add_change("Church", ChangeType.NEW_WORKSHEET)

config = ConfigParser()
config.add_section("Paths")

# Mock the response for the image download
response = requests.Response()
response.status_code = 200
Expand All @@ -94,10 +105,11 @@ def test_download_and_save_transformed_html_and_images(self, mock_get_page_html)

# Initialize the ExportHTML class with a valid base folder
with tempfile.TemporaryDirectory() as temp_dir:
export_html = ExportHTML(self.fortraininglib, temp_dir, force_rewrite=False)
config.set("Paths", "htmlexport", temp_dir)
export_html = ExportHTML(self.fortraininglib, config, None)

with patch('requests.get', return_value=response):
export_html.run(self.language_info, self.english_info, changelog, ChangeLog())
export_html.run(self.language_info, self.english_info, changelog, ChangeLog(), force_rewrite=False)

# Assert the file was created correctly
path_to_transformed_html = join(temp_dir, 'ru', 'Исцеление.html')
Expand All @@ -119,7 +131,11 @@ def test_download_and_save_transformed_html_and_images(self, mock_get_page_html)
self.assertEqual(expected_file.read(), test_file.read())

def test_complex_export_html(self):
config = ConfigParser()
config.add_section("Paths")

with tempfile.TemporaryDirectory() as temp_dir:
config.set("Paths", "htmlexport", temp_dir)
ar_changelog = ChangeLog()
# normal worksheet
ar_changelog.add_change('Hearing_from_God', ChangeType.UPDATED_WORKSHEET)
Expand All @@ -138,8 +154,8 @@ def test_complex_export_html(self):
with open(join(dirname(abspath(__file__)), "data", "en.json"), 'r') as f:
en_language_info: LanguageInfo = json.load(f, object_hook=json_decode)

export_html = ExportHTML(self.fortraininglib, temp_dir, force_rewrite=False)
export_html.run(ar_language_info, en_language_info, ar_changelog, ChangeLog())
export_html = ExportHTML(self.fortraininglib, config, None)
export_html.run(ar_language_info, en_language_info, ar_changelog, ChangeLog(), force_rewrite=False)

self.assertTrue(exists(join(temp_dir, 'ar', 'files', 'Head-32.png')))
self.assertTrue(exists(expected_path_hearing))
Expand All @@ -148,9 +164,9 @@ def test_complex_export_html(self):

# run with force rewrite
self.assertFalse(exists(expected_path_prayer))
export_html = ExportHTML(self.fortraininglib, temp_dir, force_rewrite=True)
export_html = ExportHTML(self.fortraininglib, config, None)
with self.assertLogs():
export_html.run(ar_language_info, en_language_info, ar_changelog, ChangeLog())
export_html.run(ar_language_info, en_language_info, ar_changelog, ChangeLog(), force_rewrite=True)
self.assertTrue(exists(expected_path_prayer))


Expand Down

0 comments on commit 61ea19b

Please sign in to comment.