Ответ
Тестирование системы скидок требует проверки бизнес-логики, расчетов и интеграций.
1. Позитивные тест-кейсы (валидные сценарии):
- Процентная скидка:
Товар за 1000 руб. со скидкой 10% = 900 руб. - Фиксированная скидка:
Товар за 1000 руб. со скидкой 200 руб. = 800 руб. - Скидка от суммы корзины:
Корзина на 5000 руб., скидка 5% от суммы > 3000 руб. = 4750 руб. - Накопительная скидка:
Скидка 7% для статуса "Gold" клиента. - Комбинирование: Применение только одной максимальной скидки из нескольких доступных.
2. Негативные тест-кейсы и проверка граничных значений:
- Невыполнение условий: Попытка применить промокод при сумме корзины 900 руб., когда минимум — 1000 руб.
- Неактивные/просроченные промокоды.
- Граничные значения: Корзина ровно на 1000 руб. при условии "от 1000 руб.".
- Исчерпание лимита: Использование одноразового промокода дважды.
3. Проверка отображения и интеграции:
- UI/UX: Скидка должна быть четко показана в корзине, в карточке товара и в итоговом заказе.
- Расчеты: Итоговая сумма в заказе, стоимость доставки (если влияет), налоги должны пересчитываться корректно.
- Бэкенд и аналитика: Проверка, что информация о примененной скидке корректно сохраняется в заказе и передается в системы отчетности.
4. Пример модульного теста для логики расчета:
import pytest
def test_percentage_discount():
cart = Cart(total=2000)
discount = Discount(type="percentage", value=10, min_cart_total=1000)
final_price = discount.apply_to(cart)
# Ожидаем: 2000 - (2000 * 0.1) = 1800
assert final_price == 1800
def test_discount_not_applied():
cart = Cart(total=900) # Меньше минимальной суммы
discount = Discount(type="percentage", value=10, min_cart_total=1000)
final_price = discount.apply_to(cart)
# Скидка не должна примениться
assert final_price == 900