from decimal import Decimal as D from itertools import product from django.test import TestCase from oscar.core.prices import Price class TestPriceObject(TestCase): def test_can_be_instantiated_with_tax_amount(self): price = Price('USD', D('10.00'), tax=D('2.00')) self.assertTrue(price.is_tax_known) self.assertEqual(D('12.00'), price.incl_tax) def test_can_have_tax_set_later(self): price = Price('USD', D('10.00')) price.tax = D('2.00') self.assertEqual(D('12.00'), price.incl_tax) def test_price_equals_reflexivity(self): for price in ( Price(currency='USD', excl_tax=D('10.00')), Price(currency='USD', excl_tax=D('10.00'), tax=D('2.00')), Price(currency='USD', excl_tax=D('10.00'), incl_tax=D('12.00')), ): self.assertEqual(price, price) def test_price_equals_formats(self): price1 = Price(currency='USD', excl_tax=D('10.00'), tax=D('2.00')) price2 = Price(currency='USD', excl_tax=D('10.00'), incl_tax=D('12.00')) self.assertEqual(price1, price2) def test_price_equals_currency_matters(self): price1 = Price(currency='EUR', excl_tax=D('10.00'), tax=D('2.00')) price2 = Price(currency='USD', excl_tax=D('10.00'), tax=D('2.00')) self.assertNotEqual(price1, price2) def test_price_equals_transitivity(self): prices = ( Price(currency='EUR', excl_tax=D('10.00'), tax=D('2.00')), Price(currency='USD', excl_tax=D('10.00'), tax=D('2.00')), Price(currency='USD', excl_tax=D('10.00'), incl_tax=D('12.00')), Price(currency='USD', excl_tax=D('10.00'), tax=D('8.00')) ) prices_product = product(prices, prices) for price1, price2 in prices_product: self.assertEqual(price1 == price2, price2 == price1)