Witam
Wie ktoś jak w tym kodzie wyeliminować powtórzenia kodu dekoratorów?
Pozdrawiam
import pytest
from example_shop.shop.money import Currency, Money
from decimal import Decimal
from typing import Optional
def money_euro(amount: str, precision: Optional[int] = None) -> Money:
if precision is None:
return Money(Decimal(amount), Currency("Euro", "EUR", Decimal("4.52")))
return Money(Decimal(amount), Currency("Euro", "EUR", Decimal("4.52")), precision)
def money_usd(amount: str, precision: Optional[int] = None) -> Money:
if precision is None:
return Money(Decimal(amount), Currency("American dollar", "USD", Decimal("4.17")))
return Money(Decimal(amount), Currency("American dollar", "USD", Decimal("4.17")), precision)
@pytest.mark.parametrize("price1,price2,expected",
[(money_usd("1.5"), money_usd("1.2"), money_usd("2.7")),
(money_usd("2.7"), money_usd("1.3"), money_usd("4.0")),
(money_usd("2.700"), money_usd("1.3"), money_usd("4.00000")),
(money_usd("1.5", 4), money_usd("1.5", 3), money_usd("3", 4)),
(money_usd("-1.5", 4), money_usd("3", 5), money_usd("1.5", 5))])
def test_money_add_the_same_currency(price1, price2, expected):
assert price1 + price2 == expected
@pytest.mark.parametrize("price1,price2,expected",
[(money_usd("1.5"), money_usd("1.2"), money_usd("0.3")),
(money_usd("2.7"), money_usd("1.3"), money_usd("1.4")),
(money_usd("2.700"), money_usd("1.3"), money_usd("1.40000")),
(money_usd("1.5", 4), money_usd("1.5", 3), money_usd("0", 4)),
(money_usd("1.5", 4), money_usd("3", 5), money_usd("-1.5", 5))])
def test_money_subtract_the_same_currency(price1, price2, expected):
assert price1 - price2 == expected
@pytest.mark.parametrize("price1,price2,expected",
[(money_usd("1.5"), money_usd("1.2"), money_usd("1.8")),
(money_usd("2.7"), money_usd("1.3"), money_usd("3.51")),
(money_usd("2.700"), money_usd("1.3"), money_usd("3.51000")),
(money_usd("0", 4), money_usd("1.5", 3), money_usd("0", 4)),
(money_usd("1.5", 4), money_usd("-3", 5), money_usd("-4.5", 5))])
def test_money_multiply_the_same_currency(price1, price2, expected):
assert price1 * price2 == expected
@pytest.mark.parametrize("price1,price2,expected",
[(money_usd("1.5"), money_usd("1.2"), money_usd("1.25")),
(money_usd("2.7"), money_usd("1.3"), money_usd("2.08")),
(money_usd("2.700"), money_usd("1.3"), money_usd("2.08000")),
(money_usd("0", 4), money_usd("1.5", 3), money_usd("0", 4)),
(money_usd("1.5", 4), money_usd("-3", 5), money_usd("-0.5", 5))])
def test_money_divide_the_same_currency(price1, price2, expected):
assert price1 / price2 == expected
@pytest.mark.parametrize("price1,price2",
[(money_usd("1.5"), money_euro("1.2")),
(money_euro("1.2"), money_usd("1.5")),
(money_usd("1.5", 4), money_euro("1.2", 5)),
(money_euro("1.2", 4), money_usd("1.5", 5))])
def test_money_add_the_different_currency(price1, price2):
with pytest.raises(ValueError):
assert price1 + price2
@pytest.mark.parametrize("price1,price2",
[(money_usd("1.5"), money_euro("1.2")),
(money_euro("1.2"), money_usd("1.5")),
(money_usd("1.5", 4), money_euro("1.2", 5)),
(money_euro("1.2", 4), money_usd("1.5", 5))])
def test_money_subtract_different_currency(price1, price2):
with pytest.raises(ValueError):
assert price1 - price2
@pytest.mark.parametrize("price1,price2",
[(money_usd("1.5"), money_euro("1.2")),
(money_euro("1.2"), money_usd("1.5")),
(money_usd("1.5", 4), money_euro("1.2", 5)),
(money_euro("1.2", 4), money_usd("1.5", 5))])
def test_money_multiply_different_currency(price1, price2):
with pytest.raises(ValueError):
assert price1 * price2
@pytest.mark.parametrize("price1,price2",
[(money_usd("1.5"), money_euro("1.2")),
(money_euro("1.2"), money_usd("1.5")),
(money_usd("1.5", 4), money_euro("1.2", 5)),
(money_euro("1.2", 4), money_usd("1.5", 5))])
def test_money_divide_different_currency(price1, price2):
with pytest.raises(ValueError):
assert price1 / price2
@pytest.mark.parametrize("price1,price2,expected",
[(money_usd("1.5"), money_usd("1.2"), money_usd("2.7")),
(money_usd("2.7"), money_usd("1.3"), money_usd("4.0")),
(money_usd("2.700"), money_usd("1.3"), money_usd("4.00000")),
(money_usd("1.5", 4), money_usd("1.5", 3), money_usd("3", 4)),
(money_usd("-1.5", 4), money_usd("3", 5), money_usd("1.5", 5))])
def test_money_add_in_place_the_same_currency(price1, price2, expected):
result = price1
result += price2
assert result == expected
@pytest.mark.parametrize("price1,price2,expected",
[(money_usd("1.5"), money_usd("1.2"), money_usd("0.3")),
(money_usd("2.7"), money_usd("1.3"), money_usd("1.4")),
(money_usd("2.700"), money_usd("1.3"), money_usd("1.40000")),
(money_usd("1.5", 4), money_usd("1.5", 3), money_usd("0", 4)),
(money_usd("1.5", 4), money_usd("3", 5), money_usd("-1.5", 5))])
def test_money_subtract_in_place_the_same_currency(price1, price2, expected):
result = price1
result -= price2
assert result == expected
@pytest.mark.parametrize("price1,price2,expected",
[(money_usd("1.5"), money_usd("1.2"), money_usd("1.8")),
(money_usd("2.7"), money_usd("1.3"), money_usd("3.51")),
(money_usd("2.700"), money_usd("1.3"), money_usd("3.51000")),
(money_usd("0", 4), money_usd("1.5", 3), money_usd("0", 4)),
(money_usd("1.5", 4), money_usd("-3", 5), money_usd("-4.5", 5))])
def test_money_multiply_in_place_the_same_currency(price1, price2, expected):
result = price1
result *= price2
assert result == expected
@pytest.mark.parametrize("price1,price2,expected",
[(money_usd("1.5"), money_usd("1.2"), money_usd("1.25")),
(money_usd("2.7"), money_usd("1.3"), money_usd("2.08")),
(money_usd("2.700"), money_usd("1.3"), money_usd("2.08000")),
(money_usd("0", 4), money_usd("1.5", 3), money_usd("0", 4)),
(money_usd("1.5", 4), money_usd("-3", 5), money_usd("-0.5", 5))])
def test_money_divide_in_place_the_same_currency(price1, price2, expected):
result = price1
result /= price2
assert result == expected
@pytest.mark.parametrize("price1,price2",
[(money_usd("1.5"), money_euro("1.2")),
(money_euro("1.2"), money_usd("1.5")),
(money_usd("1.5", 4), money_euro("1.2", 5)),
(money_euro("1.2", 4), money_usd("1.5", 5))])
def test_money_add_in_place_the_different_currency(price1, price2):
with pytest.raises(ValueError):
result = price1
result += price2
assert result
@pytest.mark.parametrize("price1,price2",
[(money_usd("1.5"), money_euro("1.2")),
(money_euro("1.2"), money_usd("1.5")),
(money_usd("1.5", 4), money_euro("1.2", 5)),
(money_euro("1.2", 4), money_usd("1.5", 5))])
def test_money_subtract_in_place_different_currency(price1, price2):
with pytest.raises(ValueError):
result = price1
result -= price2
assert result
@pytest.mark.parametrize("price1,price2",
[(money_usd("1.5"), money_euro("1.2")),
(money_euro("1.2"), money_usd("1.5")),
(money_usd("1.5", 4), money_euro("1.2", 5)),
(money_euro("1.2", 4), money_usd("1.5", 5))])
def test_money_multiply_in_place_different_currency(price1, price2):
with pytest.raises(ValueError):
result = price1
result *= price2
assert result
@pytest.mark.parametrize("price1,price2",
[(money_usd("1.5"), money_euro("1.2")),
(money_euro("1.2"), money_usd("1.5")),
(money_usd("1.5", 4), money_euro("1.2", 5)),
(money_euro("1.2", 4), money_usd("1.5", 5))])
def test_money_divide_in_place_different_currency(price1, price2):
with pytest.raises(ValueError):
result = price1
result /= price2
assert result