Add Tests for get_titles function

Added docstring for main.py script and updated it to only invoke update_titles
function if the file was run directly.
Added initial tests for titles updater script.
This commit is contained in:
Animesh-Ghosh 2022-08-21 02:04:05 +05:30
parent 0ec5da9287
commit 981bd089b5
3 changed files with 38 additions and 4 deletions

View File

@ -1,3 +1,7 @@
'''
This script is used for changing the text below total members & live
members count in the developersIndia subreddit
'''
import praw
import os
import random
@ -38,5 +42,5 @@ def update_titles():
widgets.refresh()
widgets.id_card.mod.update(subscribersText=titles[1])
update_titles()
if __name__ == '__main__':
update_titles()

30
test_titles_updater.py Normal file
View File

@ -0,0 +1,30 @@
import unittest
from unittest.mock import patch
# patch out the environ dictionary
# used to instantiate global variables in the titles_updater script
# maybe move the call to os.environ in the script to the update_titles method?
environ_patcher = patch.dict('os.environ', {
'REDDIT_CLIENT_ID': '',
'REDDIT_CLIENT_SECRET': '',
'REDDIT_PASSWORD': ''
})
environ_patcher.start()
from main import get_titles
# TODO: write tests for update_titles method after figuring out
# which objects to mock and with what
class TestTitlesUpdater(unittest.TestCase):
@patch('main.json.load', return_value={'titles': ['foo', 'bar', 'baz']})
def test_get_titles_returns_a_list(self, _):
titles = get_titles()
self.assertIsInstance(titles, list)
@patch('main.json.load', return_value={'titles': ['foo', 'bar', 'baz']})
def test_get_titles_contains_titles_from_dataset_file(self, mock_json_load):
titles = get_titles()
self.assertTrue(all(map(lambda title: title in mock_json_load.return_value['titles'], titles)))
environ_patcher.stop()