Source code for kyu_4.human_readable_duration_format.test_format_duration

"""
Test for 'Human readable duration format'.

Created by Egor Kostan.
GitHub: https://github.com/ikostan
"""

# ALGORITHMS FORMATS STRINGS DATES/TIME FORMATTING

import unittest
from parameterized import parameterized
import allure
from utils.log_func import print_log
from kyu_4.human_readable_duration_format.format_duration \
    import format_duration


# pylint: disable-msg=R0801
[docs] @allure.epic('4 kyu') @allure.parent_suite('Competent') @allure.suite("Algorithms") @allure.sub_suite("Unit Tests") @allure.feature("String") @allure.story('Human readable duration format') @allure.tag('ALGORITHMS', 'FORMATS', 'STRINGS', 'DATES/TIME', 'FORMATTING') @allure.link( url='https://www.codewars.com/kata/52742f58faf5485cae000b9a', name='Source/Kata') # pylint: enable-msg=R0801 class FormatDurationTestCase(unittest.TestCase): """Testing format_duration.""" @parameterized.expand([ (1, "1 second"), (62, "1 minute and 2 seconds"), (120, "2 minutes"), (3600, "1 hour"), (3662, "1 hour, 1 minute and 2 seconds"), (15731080, '182 days, 1 hour, 44 minutes and 40 seconds'), (132030240, '4 years, 68 days, 3 hours and 4 minutes'), (205851834, '6 years, 192 days, 13 hours, 3 minutes and 54 seconds'), (253374061, '8 years, 12 days, 13 hours, 41 minutes and 1 second'), (242062374, '7 years, 246 days, 15 hours, 32 minutes and 54 seconds'), (101956166, '3 years, 85 days, 1 hour, 9 minutes and 26 seconds'), (33243586, '1 year, 19 days, 18 hours, 19 minutes and 46 seconds'), (9041160, '104 days, 15 hours and 26 minutes')]) def test_format_duration(self, seconds, expected): """ Test format_duration function. Test a function which formats a duration, given as a number of seconds, in a human-friendly way. The function must accept a non-negative integer. If it is zero, it just returns "now". Otherwise, the duration is expressed as a combination of years, days, hours, minutes and seconds. :return: """ # pylint: disable-msg=R0801 allure.dynamic.title("Testing format_duration") allure.dynamic.severity(allure.severity_level.NORMAL) allure.dynamic.description_html( '<h3>Codewars badge:</h3>' '<img src="https://www.codewars.com/users/myFirstCode' '/badges/large">' '<h3>Test Description:</h3>' "<p>Test a function which formats a duration, given as a " "number of seconds, in a human-friendly way.</p>" "<p>The function must accept a non-negative integer. " "If it is zero, it just returns \"now\". Otherwise, " "the duration is expressed as a combination of years, " "days, hours, minutes and seconds.</p>") # pylint: enable-msg=R0801 actual_result = format_duration(seconds) with allure.step(f"Enter seconds ({seconds}) and verify the " f"expected output ({expected}) vs " f"actual result ({actual_result})"): print_log(seconds=seconds, expected=expected, result=actual_result) self.assertEqual(expected, actual_result)