コード例 #1
0
ファイル: pricing.py プロジェクト: schraal/satchless
class BasicHandlerTest(TestCase):
    def setUp(self):
        self.pricing_handler = PricingQueue(FiveZlotyPriceHandler,
                                            NinetyPerecentTaxPriceHandler,
                                            TenPercentDiscountPriceHandler)

    def test_discounted_price(self):
        price = self.pricing_handler.get_variant_price(None,
                                                       u'PLN',
                                                       quantity=1,
                                                       discount=True)
        self.assertEqual(
            price,
            Price(net=5 * decimal.Decimal('0.9'),
                  gross=(5 * decimal.Decimal('1.9') * decimal.Decimal('0.9')),
                  currency=u'PLN'))

    def test_undiscounted_price(self):
        price = self.pricing_handler.get_variant_price(None,
                                                       u'PLN',
                                                       quantity=1,
                                                       discount=False)
        self.assertEqual(
            price,
            Price(net=5, gross=5 * decimal.Decimal('1.9'), currency=u'PLN'))
コード例 #2
0
ファイル: pricing.py プロジェクト: anentropic/satchless
class BasicHandlerTest(TestCase):
    def setUp(self):
        self.pricing_queue = PricingQueue(FiveZlotyPriceHandler,
                                        NinetyPerecentTaxPriceHandler,
                                        TenPercentDiscountPriceHandler)

    def tearDown(self):
        self.pricing_queue = PricingQueue(*settings.SATCHLESS_PRICING_HANDLERS)

    def test_discounted_price(self):
        price = self.pricing_queue.get_variant_price(None, u'PLN', quantity=1,
                                          discount=True)
        self.assertEqual(price,
                         Price(net=5*decimal.Decimal('0.9'),
                               gross=(5 * decimal.Decimal('1.9') *
                                      decimal.Decimal('0.9')),
                               currency=u'PLN'))

    def test_undiscounted_price(self):
        price = self.pricing_queue.get_variant_price(None, u'PLN', quantity=1,
                                          discount=False)
        self.assertEqual(price,
                         Price(net=5,
                               gross=5*decimal.Decimal('1.9'),
                               currency=u'PLN'))
コード例 #3
0
ファイル: tests.py プロジェクト: christaggart/satchless
    def setUp(self):
        self.parrot = DeadParrot.objects.create(slug="parrot", species="Parrot")
        self.parrot_a = self.parrot.variants.create(color="white", looks_alive=True, sku=1)
        self.parrot.price = Decimal(10)
        self.parrot_a.price = Decimal(11)

        self.cockatoo = DeadParrot.objects.create(slug="cockatoo", species="Cockatoo")
        self.cockatoo_a = self.cockatoo.variants.create(color="white", looks_alive=True)
        self.cockatoo.price = Decimal(20)
        self.cockatoo_a.price = Decimal(21)

        self.cached_queue = PricingQueue(PricingCacheHandler(ProductFieldGetter))
        self.non_cached_queue = PricingQueue(ProductFieldGetter)
コード例 #4
0
ファイル: tests.py プロジェクト: christaggart/satchless
 def setUp(self):
     self.macaw = DeadParrot.objects.create(slug='macaw',
                                            species="Hyacinth Macaw")
     self.cockatoo = DeadParrot.objects.create(slug='cockatoo',
                                               species="White Cockatoo")
     self.macaw_blue_a = self.macaw.variants.create(color='blue',
                                                    sku='M-BL-A',
                                                    looks_alive=True)
     self.macaw_blue_d = self.macaw.variants.create(color='blue',
                                                    sku='M-BL-D',
                                                    looks_alive=False)
     self.cockatoo_white_a = self.cockatoo.variants.create(color='white',
                                                           sku='C-WH-A',
                                                           looks_alive=True)
     self.cockatoo_green_a = self.cockatoo.variants.create(color='green',
                                                           sku='C-GR-A-',
                                                           looks_alive=True)
     macaw_price = ProductPrice.objects.create(product=self.macaw,
                                               price=Decimal('10.0'))
     macaw_price.offsets.create(variant=self.macaw_blue_a,
                                price_offset=Decimal('2.0'))
     cockatoo_price = ProductPrice.objects.create(product=self.cockatoo,
                                                  price=Decimal('20.0'))
     cockatoo_price.offsets.create(variant=self.cockatoo_green_a,
                                   price_offset=Decimal('5.0'))
     # create tax groups
     self.vat8 = models.TaxGroup.objects.create(name="VAT 8%", rate=8,
                                                rate_name="8%")
     self.vat23 = models.TaxGroup.objects.create(name="VAT 23%", rate=23,
                                                 rate_name="23%")
     self.vat8.products.add(self.macaw)
     # set the pricing pipeline
     self.pricing_queue = PricingQueue(
         'satchless.contrib.pricing.simpleqty.SimpleQtyPricingHandler',
         'satchless.contrib.tax.flatgroups.FlatGroupPricingHandler')
コード例 #5
0
ファイル: tests.py プロジェクト: christaggart/satchless
    def setUp(self):
        self.macaw = DeadParrot.objects.create(slug='macaw',
                                               species="Hyacinth Macaw")
        self.cockatoo = DeadParrot.objects.create(slug='cockatoo',
                                                  species="White Cockatoo")
        self.macaw_blue_a = self.macaw.variants.create(color='blue',
                                                       sku='M-BL-A',
                                                       looks_alive=True)
        self.macaw_blue_d = self.macaw.variants.create(color='blue',
                                                       sku='M-BL-D',
                                                       looks_alive=False)
        self.macaw_red_a = self.macaw.variants.create(color='red',
                                                      sku='M-RD-A',
                                                      looks_alive=True)
        self.macaw_red_d = self.macaw.variants.create(color='red',
                                                      sku='M-RD-D',
                                                      looks_alive=False)
        self.cockatoo_white_a = self.cockatoo.variants.create(color='white',
                                                              sku='C-WH-A',
                                                              looks_alive=True)
        self.cockatoo_white_d = self.cockatoo.variants.create(color='white',
                                                              sku='C-WH-D',
                                                              looks_alive=False)
        self.cockatoo_green_a = self.cockatoo.variants.create(color='green',
                                                              sku='C-GR-A',
                                                              looks_alive=True)
        self.cockatoo_green_d = self.cockatoo.variants.create(color='green',
                                                              sku='C-GR-D',
                                                              looks_alive=False)

        self.original_pricing_handlers = settings.SATCHLESS_PRICING_HANDLERS
        self.pricing_queue = PricingQueue(*self.TEST_PRICING_HANDLERS)
コード例 #6
0
ファイル: pricing.py プロジェクト: ncapito/satchless
class BasicHandlerTest(TestCase):
    def setUp(self):
        self.pricing_handler = PricingQueue(
            FiveZlotyPriceHandler, NinetyPerecentTaxPriceHandler, TenPercentDiscountPriceHandler
        )

    def test_discounted_price(self):
        price = self.pricing_handler.get_variant_price(None, u"PLN", quantity=1, discount=True)
        self.assertEqual(
            price,
            Price(
                net=5 * decimal.Decimal("0.9"),
                gross=(5 * decimal.Decimal("1.9") * decimal.Decimal("0.9")),
                currency=u"PLN",
            ),
        )

    def test_undiscounted_price(self):
        price = self.pricing_handler.get_variant_price(None, u"PLN", quantity=1, discount=False)
        self.assertEqual(price, Price(net=5, gross=5 * decimal.Decimal("1.9"), currency=u"PLN"))
コード例 #7
0
ファイル: tests.py プロジェクト: christaggart/satchless
class ParrotTest(TestCase):
    def setUp(self):
        self.parrot = DeadParrot.objects.create(slug="parrot", species="Parrot")
        self.parrot_a = self.parrot.variants.create(color="white", looks_alive=True, sku=1)
        self.parrot.price = Decimal(10)
        self.parrot_a.price = Decimal(11)

        self.cockatoo = DeadParrot.objects.create(slug="cockatoo", species="Cockatoo")
        self.cockatoo_a = self.cockatoo.variants.create(color="white", looks_alive=True)
        self.cockatoo.price = Decimal(20)
        self.cockatoo_a.price = Decimal(21)

        self.cached_queue = PricingQueue(PricingCacheHandler(ProductFieldGetter))
        self.non_cached_queue = PricingQueue(ProductFieldGetter)

    def test_price(self):
        p0 = self.non_cached_queue.get_variant_price(self.parrot_a, None)
        p1 = self.cached_queue.get_variant_price(self.parrot_a, None)
        self.assertEqual(p0, p1)

        p0 = self.non_cached_queue.get_variant_price(self.cockatoo_a, None)
        p1 = self.cached_queue.get_variant_price(self.cockatoo_a, None)
        self.assertEqual(p0, p1)
コード例 #8
0
ファイル: pricing.py プロジェクト: schraal/satchless
 def setUp(self):
     self.pricing_handler = PricingQueue(FiveZlotyPriceHandler,
                                         NinetyPerecentTaxPriceHandler,
                                         TenPercentDiscountPriceHandler)
コード例 #9
0
ファイル: pricing.py プロジェクト: fusionbox/satchless
 def tearDown(self):
     self.pricing_queue = PricingQueue(*settings.SATCHLESS_PRICING_HANDLERS)
コード例 #10
0
ファイル: pricing.py プロジェクト: anentropic/satchless
 def setUp(self):
     self.pricing_queue = PricingQueue(FiveZlotyPriceHandler,
                                     NinetyPerecentTaxPriceHandler,
                                     TenPercentDiscountPriceHandler)
コード例 #11
0
ファイル: tests.py プロジェクト: christaggart/satchless
class ParrotTaxTest(TestCase):
    def setUp(self):
        self.macaw = DeadParrot.objects.create(slug='macaw',
                                               species="Hyacinth Macaw")
        self.cockatoo = DeadParrot.objects.create(slug='cockatoo',
                                                  species="White Cockatoo")
        self.macaw_blue_a = self.macaw.variants.create(color='blue',
                                                       sku='M-BL-A',
                                                       looks_alive=True)
        self.macaw_blue_d = self.macaw.variants.create(color='blue',
                                                       sku='M-BL-D',
                                                       looks_alive=False)
        self.cockatoo_white_a = self.cockatoo.variants.create(color='white',
                                                              sku='C-WH-A',
                                                              looks_alive=True)
        self.cockatoo_green_a = self.cockatoo.variants.create(color='green',
                                                              sku='C-GR-A-',
                                                              looks_alive=True)
        macaw_price = ProductPrice.objects.create(product=self.macaw,
                                                  price=Decimal('10.0'))
        macaw_price.offsets.create(variant=self.macaw_blue_a,
                                   price_offset=Decimal('2.0'))
        cockatoo_price = ProductPrice.objects.create(product=self.cockatoo,
                                                     price=Decimal('20.0'))
        cockatoo_price.offsets.create(variant=self.cockatoo_green_a,
                                      price_offset=Decimal('5.0'))
        # create tax groups
        self.vat8 = models.TaxGroup.objects.create(name="VAT 8%", rate=8,
                                                   rate_name="8%")
        self.vat23 = models.TaxGroup.objects.create(name="VAT 23%", rate=23,
                                                    rate_name="23%")
        self.vat8.products.add(self.macaw)
        # set the pricing pipeline
        self.pricing_queue = PricingQueue(
            'satchless.contrib.pricing.simpleqty.SimpleQtyPricingHandler',
            'satchless.contrib.tax.flatgroups.FlatGroupPricingHandler')

    def test_nodefault(self):
        # these have 8% VAT
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_d,
                                                   currency='PLN'),
                         Price(10, Decimal('10.80'), currency='PLN'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_a,
                                                   currency='PLN'),
                         Price(12, Decimal('12.96'), currency='PLN'))
        # while these have no tax group, hence the tax is zero
        self.assertEqual(self.pricing_queue.get_variant_price(self.cockatoo_white_a,
                                                   currency='PLN'),
                         Price(20, 20, currency='PLN'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.cockatoo_green_a,
                                                   currency='PLN'),
                         Price(25, 25, currency='PLN'))
        pr = self.pricing_queue.get_product_price_range(self.cockatoo, currency='PLN')
        self.assertEqual(pr, PriceRange(min_price=Price(20, 20,
                                                        currency='PLN'),
                                        max_price=Price(25, 25,
                                                        currency='PLN')))

    def test_default(self):
        self.vat23.default = True
        self.vat23.save()
        # these have 8% VAT
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_d,
                                                   currency='PLN'),
                         Price(10, Decimal('10.80'), currency='PLN'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_a,
                                                   currency='PLN'),
                         Price(12, Decimal('12.96'), currency='PLN'))
        # while these have default 23% VAT
        self.assertEqual(self.pricing_queue.get_variant_price(self.cockatoo_white_a,
                                                   currency='PLN'),
                         Price(20, Decimal('24.60'), currency='PLN'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.cockatoo_green_a,
                                                   currency='PLN'),
                         Price(25, Decimal('30.75'), currency='PLN'))
        pr = self.pricing_queue.get_product_price_range(self.cockatoo, currency='PLN')
        self.assertEqual(pr, PriceRange(min_price=Price(20, Decimal('24.60'),
                                                        currency='PLN'),
                                        max_price=Price(25, Decimal('30.75'),
                                                        currency='PLN')))
コード例 #12
0
ファイル: tests.py プロジェクト: christaggart/satchless
 def tearDown(self):
     ProductPrice.objects.all().delete()
     self.pricing_queue = PricingQueue(*self.TEST_PRICING_HANDLERS)
コード例 #13
0
ファイル: tests.py プロジェクト: christaggart/satchless
class ParrotTest(TestCase):
    TEST_PRICING_HANDLERS = [
        'satchless.contrib.pricing.simpleqty.SimpleQtyPricingHandler',
    ]

    def setUp(self):
        self.macaw = DeadParrot.objects.create(slug='macaw',
                                               species="Hyacinth Macaw")
        self.cockatoo = DeadParrot.objects.create(slug='cockatoo',
                                                  species="White Cockatoo")
        self.macaw_blue_a = self.macaw.variants.create(color='blue',
                                                       sku='M-BL-A',
                                                       looks_alive=True)
        self.macaw_blue_d = self.macaw.variants.create(color='blue',
                                                       sku='M-BL-D',
                                                       looks_alive=False)
        self.macaw_red_a = self.macaw.variants.create(color='red',
                                                      sku='M-RD-A',
                                                      looks_alive=True)
        self.macaw_red_d = self.macaw.variants.create(color='red',
                                                      sku='M-RD-D',
                                                      looks_alive=False)
        self.cockatoo_white_a = self.cockatoo.variants.create(color='white',
                                                              sku='C-WH-A',
                                                              looks_alive=True)
        self.cockatoo_white_d = self.cockatoo.variants.create(color='white',
                                                              sku='C-WH-D',
                                                              looks_alive=False)
        self.cockatoo_green_a = self.cockatoo.variants.create(color='green',
                                                              sku='C-GR-A',
                                                              looks_alive=True)
        self.cockatoo_green_d = self.cockatoo.variants.create(color='green',
                                                              sku='C-GR-D',
                                                              looks_alive=False)

        self.original_pricing_handlers = settings.SATCHLESS_PRICING_HANDLERS
        self.pricing_queue = PricingQueue(*self.TEST_PRICING_HANDLERS)

    def tearDown(self):
        ProductPrice.objects.all().delete()
        self.pricing_queue = PricingQueue(*self.TEST_PRICING_HANDLERS)

    def test_price(self):
        p1 = Price(10)
        p2 = Price(10)
        self.assertEqual(p1, p2)
        p1 = Price(10,20)
        p2 = Price(10,20)
        self.assertEqual(p1, p2)
        p1 = Price(10,20)
        p2 = Price(20,10)
        self.assertNotEqual(p1, p2)
        self.assertEqual(p1 + p2, Price(30,30))
        self.assertEqual(p1 * 3, Price(30,60))

    def test_basicprices(self):
        macaw_price = ProductPrice.objects.create(product=self.macaw,
                                                  price=Decimal('10.0'))
        macaw_price.qty_overrides.create(min_qty=5, price=Decimal('9.0'))
        macaw_price.qty_overrides.create(min_qty=10, price=Decimal('8.0'))
        macaw_price.offsets.create(variant=self.macaw_blue_a,
                                   price_offset=Decimal('2.0'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_d, currency='BTC',
                                           quantity=1),
                         Price(Decimal('10.0'), currency='BTC'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_d, currency='BTC',
                                           quantity=Decimal('4.9999')),
                         Price(Decimal('10.0'), currency='BTC'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_d, currency='BTC',
                                           quantity=5),
                         Price(Decimal('9.0'), currency='BTC'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_d, currency='BTC',
                                           quantity=Decimal('9.9999')),
                         Price(Decimal('9.0'), currency='BTC'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_d, currency='BTC',
                                           quantity=10),
                         Price(Decimal('8.0'), currency='BTC'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_d, currency='BTC',
                                           quantity=100),
                         Price(Decimal('8.0'), currency='BTC'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_a, currency='BTC',
                                           quantity=1),
                         Price(Decimal('12.0'), currency='BTC'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_a, currency='BTC',
                                           quantity=Decimal('4.9999')),
                         Price(Decimal('12.0'), currency='BTC'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_a, currency='BTC',
                                           quantity=5),
                         Price(Decimal('11.0'), currency='BTC'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_a, currency='BTC',
                                           quantity=Decimal('9.9999')),
                         Price(Decimal('11.0'), currency='BTC'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_a, currency='BTC',
                                           quantity=10),
                         Price(Decimal('10.0'), currency='BTC'))
        self.assertEqual(self.pricing_queue.get_variant_price(self.macaw_blue_a, currency='BTC',
                                           quantity=100),
                         Price(Decimal('10.0'), currency='BTC'))

    def test_basicranges(self):
        macaw_price = ProductPrice.objects.create(product=self.macaw,
                                                  price=Decimal('10.0'))
        macaw_price.offsets.create(variant=self.macaw_blue_a,
                                   price_offset=Decimal('2.0'))
        macaw_price.offsets.create(variant=self.macaw_red_d,
                                   price_offset=Decimal('3.0'))
        macaw_price.offsets.create(variant=self.macaw_red_a,
                                   price_offset=Decimal('6.0'))
        cockatoo_price = ProductPrice.objects.create(product=self.cockatoo,
                                                     price=Decimal('12.0'))
        cockatoo_price.offsets.create(variant=self.cockatoo_white_d,
                                      price_offset=Decimal('-5.0'))
        cockatoo_price.offsets.create(variant=self.cockatoo_green_d,
                                      price_offset=Decimal('-8.0'))
        cockatoo_price.offsets.create(variant=self.cockatoo_green_a,
                                      price_offset=Decimal('4.0'))
        self.assertEqual(self.pricing_queue.get_product_price_range(self.macaw, currency='BTC'),
                        PriceRange(min_price=Price(Decimal('10.0'),
                                                   currency='BTC'),
                                   max_price=Price(Decimal('16.0'),
                                                   currency='BTC')))
        self.assertEqual(self.pricing_queue.get_product_price_range(self.cockatoo, currency='BTC'),
                        PriceRange(min_price=Price(Decimal('4.0'),
                                                   currency='BTC'),
                                   max_price=Price(Decimal('16.0'),
                                                   currency='BTC')))

    def test_cartprices(self):
        macaw_price = ProductPrice.objects.create(product=self.macaw,
                                                  price=Decimal('10.0'),
                                                  qty_mode='product')
        macaw_price.qty_overrides.create(min_qty=9, price=Decimal('9.0'))
        macaw_price.offsets.create(variant=self.macaw_blue_a,
                                   price_offset=Decimal('2.0'))
        cart = Cart.objects.create(typ='test')
        cart.set_quantity(self.macaw_blue_a, 4)
        cart.set_quantity(self.macaw_blue_d, 4)
        item_macaw_blue_a = cart.items.get(variant=self.macaw_blue_a)
        item_macaw_blue_d = cart.items.get(variant=self.macaw_blue_d)

        self.assertEqual(item_macaw_blue_d.get_unit_price(currency='BTC'),
                         Price(Decimal('10.0'), currency='BTC'))
        self.assertEqual(item_macaw_blue_a.get_unit_price(currency='BTC'),
                         Price(Decimal('12.0'), currency='BTC'))
        cart.add_quantity(self.macaw_blue_a, 1)
        cart.add_quantity(self.macaw_blue_d, 1)
        item_macaw_blue_a = cart.items.get(variant=self.macaw_blue_a)
        item_macaw_blue_d = cart.items.get(variant=self.macaw_blue_d)

        macaw_variant = item_macaw_blue_a.variant.get_subtype_instance()
        self.assertEqual(self.pricing_queue.get_variant_price(macaw_variant, currency='BTC',
                                           cart=cart),
                         Price(Decimal('11.0'), currency='BTC'))
        # contextless product
        self.assertEqual(self.pricing_queue.get_variant_price(macaw_variant, currency='BTC'),
                         Price(Decimal('12.0'), currency='BTC'))