def test_tax_special_cases1(): all_tax_line1 = Line(base_unit_price=TaxfulPrice(25, 'EUR'), quantity=5, discount_amount=TaxfulPrice(25, 'EUR'), tax_amount=Money(100, 'EUR')) assert all_tax_line1.taxful_price == TaxfulPrice(100, 'EUR') assert all_tax_line1.taxless_price == TaxlessPrice(0, 'EUR') assert all_tax_line1.taxful_discount_amount == TaxfulPrice(25, 'EUR') assert all_tax_line1.taxless_discount_amount == TaxlessPrice(0, 'EUR') assert all_tax_line1.tax_rate == 0 assert all_tax_line1.taxful_base_unit_price == TaxfulPrice(25, 'EUR') assert all_tax_line1.taxless_base_unit_price == TaxlessPrice(0, 'EUR')
def form_valid(self, form): order = self.object amount = Money(form.cleaned_data["amount"], order.currency) if amount.value == 0: messages.error(self.request, _("Payment amount cannot be 0")) return self.form_invalid(form) try: payment = order.create_payment(amount, description="Manual payment") messages.success(self.request, _("Payment %s created.") % payment.payment_identifier) except NoPaymentToCreateException: messages.error(self.request, _("Order has already been paid")) return self.form_invalid(form) else: return HttpResponseRedirect(get_model_url(order))
def test_convert_taxness_taxful_to_taxless(): request = get_request() tax_class = TaxClass() item = Product(tax_class=tax_class) priceful = _get_price_info(TaxfulPrice) calcs_done_before = DummyTaxModule.calculations_done result = convert_taxness(request, item, priceful, with_taxes=False) calcs_done_after = DummyTaxModule.calculations_done assert result != priceful assert (result.price - TaxlessPrice(400, 'USD')).value < 0.00001 assert result.base_price == TaxlessPrice(550, 'USD') assert result.quantity == 2 assert result.tax_amount == Money(80, 'USD') assert result.taxless_price == result.price assert result.taxful_price == priceful.price assert calcs_done_after == calcs_done_before + 2
def test_money_init_from_value_with_currency(): class Dollar(int): currency = 'USD' assert Money(Dollar(42)) == Money(42, 'USD')
def test_money_init_from_money(): assert Money(Money(123, 'GBP')) == Money(123, 'GBP')
def test_money_without_currency(): with pytest.raises(TypeError): Money(42)
def test_money_init_does_not_call_settings(): def guarded_getattr(self, name): assert False, 'nobody should read settings yet' with patch.object(type(settings), '__getattr__', guarded_getattr): Money(42, 'EUR')
def money_sum(iterable): return sum(iterable, Money(0, price.currency))
def test_money_default_currency(): m = Money(42) assert m.currency == settings.SHOOP_HOME_CURRENCY
def usd(value): """ Get Money with USD currency for given value. """ return Money(value, "USD")
base_unit_price = None quantity = None discount_amount = None tax_amount = None def __init__(self, base_unit_price, quantity, discount_amount, tax_amount): self.base_unit_price = base_unit_price self.quantity = quantity self.discount_amount = discount_amount self.tax_amount = tax_amount line = Line(base_unit_price=TaxfulPrice(5, 'EUR'), quantity=9, discount_amount=TaxfulPrice(12, 'EUR'), tax_amount=Money(3, 'EUR')) line2 = Line(base_unit_price=TaxfulPrice(10, 'EUR'), quantity=123, discount_amount=TaxfulPrice(0, 'EUR'), tax_amount=Money(123, 'EUR')) def test_price(): assert line.price == TaxfulPrice(33, 'EUR') # 5 * 9 - 12 def test_discounted_unit_price(): assert line.discounted_unit_price == TaxfulPrice(33, 'EUR') / 9 def test_discount_rate():
def money(value): return Money(value, 'USD')
def test_money_property_set_invalid_unit(): w = get_wallet() with pytest.raises(UnitMixupError): w.amount = Money(3, 'USD')
def test_money_property_get(): w = get_wallet() assert w.amount == Money(42, 'EUR')
def get_total_unpaid_amount(self): difference = self.taxful_total_price.amount - self.get_total_paid_amount( ) return max(difference, Money(0, self.currency))
def test_repr(): assert repr(Money(42, 'EUR')) == "Money('42', 'EUR')" assert repr(Money('42.123', 'EUR')) == "Money('42.123', 'EUR')" assert repr(Money('42.0', 'EUR')) == "Money('42.0', 'EUR')" assert repr(Money('42.123', 'EUR')) == "Money('42.123', 'EUR')" assert repr(Money('42.123', 'USD')) == "Money('42.123', 'USD')"
def test_str(): assert str(Money('42.25', 'EUR')) == '42.25 EUR' assert str(Money('100', 'USD')) == '100 USD' assert str(Money(42, 'EUR')) == '42 EUR' assert str(Money('12.345', 'EUR')) == '12.345 EUR'
def tax_amount(self): """ :rtype: shoop.utils.money.Money """ zero = Money(0, self.order.currency) return sum((x.amount for x in self.taxes.all()), zero)
def get_total_paid_amount(self): amounts = self.payments.values_list('amount_value', flat=True) return Money(sum(amounts, Decimal(0)), self.currency)
def test_format_money(): assert format_money(Money("3.6", "EUR"), locale="fi") == "3,60\xa0\u20ac" assert format_money(Money("3.6", "EUR"), widen=2, locale="fi") == "3,6000\xa0\u20ac" assert format_money(Money("3.6", "EUR"), digits=0, locale="fi") == "4\xa0\u20ac"