44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
"""Test module `fetch_holidays`. """
|
||
import json
|
||
import sys
|
||
|
||
from fetch_holidays import CustomJSONEncoder, DescriptionParser, get_paper_urls, get_rules, get_paper
|
||
|
||
from .filetools import _file_path
|
||
|
||
|
||
def test_get_paper_urls():
|
||
assert get_paper_urls(2019) == [
|
||
'http://www.gov.cn/zhengce/content/2019-03/22/content_5375877.htm',
|
||
'http://www.gov.cn/zhengce/content/2018-12/06/content_5346276.htm'
|
||
]
|
||
|
||
|
||
def test_get_rules():
|
||
assert(list(get_rules(get_paper('http://www.gov.cn/zhengce/content/2019-03/22/content_5375877.htm')))
|
||
== [('劳动节', '2019年5月1日至4日放假调休,共4天。4月28日(星期日)、5月5日(星期日)上班。')])
|
||
|
||
|
||
def _normalize(iterable):
|
||
return sorted(json.loads(json.dumps(list(iterable), cls=CustomJSONEncoder)),
|
||
key=lambda x: x['date'])
|
||
|
||
|
||
def _generate_tests():
|
||
with open(_file_path('description_parsing_cases.json'), 'r', encoding='utf-8', ) as f:
|
||
cases = json.load(f)
|
||
|
||
def create_test(case):
|
||
def _test():
|
||
year, description, expected = case['year'], case['description'], case['expected']
|
||
assert _normalize(DescriptionParser(
|
||
description, year).parse()) == _normalize(expected), case
|
||
return _test
|
||
|
||
for index, case in enumerate(cases, 1):
|
||
setattr(sys.modules[__name__],
|
||
f'test_description_parser_{index}', create_test(case))
|
||
|
||
|
||
_generate_tests()
|