60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
import unittest
|
||
import sys
|
||
import os
|
||
|
||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||
|
||
from database import calculate_discount, get_discount_description
|
||
|
||
|
||
class TestCalculations(unittest.TestCase):
|
||
"""Тестирование алгоритмов расчета скидок"""
|
||
|
||
def test_1_discount_thresholds(self):
|
||
"""Тест пороговых значений скидок"""
|
||
test_cases = [
|
||
(0, 0),
|
||
(100000, 0),
|
||
(149999, 0),
|
||
(150000, 15),
|
||
(175000, 15),
|
||
(199999, 15),
|
||
(200000, 30),
|
||
(250000, 30),
|
||
(299999, 30),
|
||
(300000, 50),
|
||
(500000, 50),
|
||
(1000000, 50),
|
||
]
|
||
|
||
for amount, expected_discount in test_cases:
|
||
with self.subTest(amount=amount):
|
||
self.assertEqual(calculate_discount(amount), expected_discount)
|
||
|
||
def test_2_discount_descriptions(self):
|
||
"""Тест описаний скидок"""
|
||
self.assertEqual(get_discount_description(0), '0% (до 150 000 руб.)')
|
||
self.assertEqual(get_discount_description(15), '15% (150 000 - 199 999 руб.)')
|
||
self.assertEqual(get_discount_description(30), '30% (200 000 - 299 999 руб.)')
|
||
self.assertEqual(get_discount_description(50), '50% (300 000+ руб.)')
|
||
|
||
self.assertEqual(get_discount_description(99), '0% (до 150 000 руб.)')
|
||
|
||
def test_3_edge_cases(self):
|
||
"""Тест граничных случаев"""
|
||
self.assertEqual(calculate_discount(150000), 15)
|
||
self.assertEqual(calculate_discount(200000), 30)
|
||
self.assertEqual(calculate_discount(300000), 50)
|
||
|
||
self.assertEqual(calculate_discount(149999), 0)
|
||
self.assertEqual(calculate_discount(199999), 15)
|
||
self.assertEqual(calculate_discount(299999), 30)
|
||
|
||
def test_4_negative_amounts(self):
|
||
"""Тест отрицательных сумм"""
|
||
self.assertEqual(calculate_discount(-1000), 0)
|
||
self.assertEqual(calculate_discount(-150000), 0)
|
||
|
||
|
||
if __name__ == '__main__':
|
||
unittest.main() |