"""Tests for duration.py. Give this file to the AI with duration.py. Run: python3 -m unittest test_duration.py"""
import unittest

from duration import parse_duration


class ParseDurationTest(unittest.TestCase):
    def test_single_units(self):
        self.assertEqual(parse_duration("45s"), 45)
        self.assertEqual(parse_duration("2m"), 120)
        self.assertEqual(parse_duration("3h"), 10800)

    def test_combined(self):
        self.assertEqual(parse_duration("1h30m"), 5400)
        self.assertEqual(parse_duration("1h5m10s"), 3910)

    def test_spaces_and_case(self):
        self.assertEqual(parse_duration(" 2H 5m 10S "), 7510)

    def test_large_minutes_and_seconds(self):
        self.assertEqual(parse_duration("90m"), 5400)
        self.assertEqual(parse_duration("150s"), 150)

    def test_returns_int(self):
        self.assertIsInstance(parse_duration("1m"), int)

    def test_limit(self):
        self.assertEqual(parse_duration("24h"), 86400)
        with self.assertRaises(ValueError):
            parse_duration("24h1s")

    def test_invalid(self):
        for bad in ["", "   ", "10", "h", "5x", "1h1h", "30m1h", "-5s", "1.5h", "1 h"]:
            with self.subTest(text=bad):
                with self.assertRaises(ValueError):
                    parse_duration(bad)


if __name__ == "__main__":
    unittest.main()
