284 lines
8.9 KiB
Python
284 lines
8.9 KiB
Python
# coding=UTF-8
|
|
|
|
import unittest2
|
|
import mock
|
|
from unittest.mock import patch
|
|
from api.lib.prices import *
|
|
from tests.factories import (
|
|
DesignerFactory,
|
|
ContractCustomerFactory,
|
|
InquiryFactory,
|
|
MarketFactory,
|
|
)
|
|
from api.models import Inquiry, Product, Material
|
|
|
|
sweden = MarketFactory.build(name="SE", exchange_rate=1, price_adjustments=1, vat=1.25)
|
|
denmark = MarketFactory.build(
|
|
name="DK", price_adjustments=1.185, exchange_rate=0.799000, vat=1.25
|
|
)
|
|
us = MarketFactory.build(name="US", price_adjustments=1.06, exchange_rate=0.1198, vat=1)
|
|
nl = MarketFactory.build(name="NL", price_adjustments=1.15, exchange_rate=0.1, vat=1.21)
|
|
eu = MarketFactory.build(name="EU", price_adjustments=1.13, exchange_rate=0.1, vat=1.25)
|
|
|
|
designer = DesignerFactory.build(
|
|
pricepremium_wallpaper=17.647,
|
|
pricepremium_canvas=8,
|
|
pricepremium_poster=15.50,
|
|
pricepremium_framed_print=13,
|
|
)
|
|
|
|
|
|
reseller = ContractCustomerFactory.build(pricepremium=15)
|
|
|
|
designer_moomin = DesignerFactory.build(
|
|
pricepremium_wallpaper=2,
|
|
pricepremium_canvas=3,
|
|
pricepremium_poster=4,
|
|
pricepremium_framed_print=7,
|
|
)
|
|
|
|
standard_wallpaper = Material(name="standard-wallpaper", price=23600)
|
|
premium_wallpaper = Material(name="premium-wallpaper", price=26000)
|
|
standard_canvas = Material(name="standard-canvas", price=79920)
|
|
|
|
|
|
class TestPrice(unittest2.TestCase):
|
|
|
|
def setUp(self) -> None:
|
|
price_adjustments_patcher = patch('api.lib.prices.get_price_adjustment', return_value=1.0)
|
|
price_adjustments_patcher.start()
|
|
self.addCleanup(price_adjustments_patcher.stop)
|
|
|
|
def test_m2_price(self):
|
|
self.assertEqual(
|
|
236,
|
|
wallpaper_m2_price(
|
|
material=standard_wallpaper, market=sweden, inc_vat=False
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
260,
|
|
wallpaper_m2_price(
|
|
material=premium_wallpaper, market=sweden, inc_vat=False
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
295,
|
|
wallpaper_m2_price(
|
|
material=standard_wallpaper, market=sweden, inc_vat=True
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
223,
|
|
wallpaper_m2_price(
|
|
material=standard_wallpaper, market=denmark, inc_vat=False
|
|
),
|
|
)
|
|
inquiry = Inquiry(pricepremium=36.029411)
|
|
|
|
self.assertEqual(
|
|
42,
|
|
wallpaper_m2_price(
|
|
material=standard_wallpaper,
|
|
market=eu,
|
|
reseller=reseller,
|
|
inquiry=inquiry,
|
|
inc_vat=False,
|
|
),
|
|
)
|
|
|
|
def test_wallpaper_price(self):
|
|
self.assertEqual(
|
|
295,
|
|
wallpaper_price(
|
|
width=1, height=1, material=standard_wallpaper, market=sweden
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
295,
|
|
wallpaper_price(
|
|
width=100, height=100, material=standard_wallpaper, market=sweden
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
1180,
|
|
wallpaper_price(
|
|
width=200, height=200, material=standard_wallpaper, market=sweden
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
325,
|
|
wallpaper_price(
|
|
width=100, height=100, material=premium_wallpaper, market=sweden
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
279,
|
|
wallpaper_price(
|
|
width=100, height=100, material=standard_wallpaper, market=denmark
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
236,
|
|
wallpaper_price(
|
|
width=100,
|
|
height=100,
|
|
material=standard_wallpaper,
|
|
market=sweden,
|
|
inc_vat=False,
|
|
),
|
|
)
|
|
|
|
# designer
|
|
self.assertEqual(
|
|
347,
|
|
wallpaper_price(
|
|
width=100,
|
|
height=100,
|
|
material=standard_wallpaper,
|
|
market=sweden,
|
|
designer=designer,
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
329,
|
|
wallpaper_price(
|
|
width=100,
|
|
height=100,
|
|
material=standard_wallpaper,
|
|
market=denmark,
|
|
designer=designer,
|
|
),
|
|
)
|
|
|
|
# reseller stores
|
|
self.assertEqual(
|
|
339,
|
|
wallpaper_price(
|
|
width=100,
|
|
height=100,
|
|
material=standard_wallpaper,
|
|
market=sweden,
|
|
reseller=reseller,
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
399,
|
|
wallpaper_price(
|
|
width=100,
|
|
height=100,
|
|
material=standard_wallpaper,
|
|
market=sweden,
|
|
designer=designer,
|
|
reseller=reseller,
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
154,
|
|
wallpaper_price(
|
|
width=100,
|
|
height=100,
|
|
material=standard_wallpaper,
|
|
market=sweden,
|
|
reseller=ContractCustomerFactory(pricepremium=-47.74),
|
|
),
|
|
)
|
|
|
|
def test_wallpaper_price_us(self):
|
|
self.assertEqual(
|
|
30,
|
|
wallpaper_price(
|
|
width=100, height=100, material=standard_wallpaper, market=us
|
|
),
|
|
"Minimum price for US is 1 sqm - old 2 sqm requirement is removed",
|
|
)
|
|
|
|
def test_wallpaper_custom_inquiry_price(self):
|
|
with mock.patch.object(Inquiry, "market", nl):
|
|
inquiry = Inquiry(
|
|
product_group="photo-wallpaper",
|
|
pricepremium=0,
|
|
width=350,
|
|
height=270,
|
|
price_effect=0,
|
|
price_retouch=160.00,
|
|
material=standard_wallpaper,
|
|
)
|
|
|
|
self.assertEqual(333, inquiry_price(inquiry))
|
|
self.assertEqual(310, inquiry_price(inquiry, inc_price_retouch=False))
|
|
self.assertEqual(160, inquiry.price_retouch)
|
|
self.assertEqual(18.4, inquiry.local_price_retouch(rounded=False))
|
|
self.assertEqual(
|
|
22, inquiry.local_price_retouch(rounded=True, inc_vat=True)
|
|
)
|
|
|
|
# test with different material
|
|
self.assertEqual(
|
|
342,
|
|
inquiry_price(
|
|
inquiry, inc_price_retouch=False, material=premium_wallpaper
|
|
),
|
|
)
|
|
self.assertEqual(364, inquiry_price(inquiry, material=premium_wallpaper))
|
|
|
|
def test_wallpaper_product_inquiry_price(self):
|
|
designer = DesignerFactory()
|
|
designer.pricepremium_wallpaper = 4
|
|
product = Product(designer=designer)
|
|
with mock.patch.object(Inquiry, "market", sweden):
|
|
inquiry = Inquiry(
|
|
product_group="photo-wallpaper",
|
|
pricepremium=0,
|
|
width=350,
|
|
height=280,
|
|
price_retouch=0,
|
|
material=standard_wallpaper,
|
|
product=product,
|
|
)
|
|
|
|
self.assertEqual(3007, inquiry_price(inquiry))
|
|
self.assertEqual(3007, inquiry_price(inquiry, inc_price_retouch=False))
|
|
self.assertEqual(3312, inquiry_price(inquiry, material=premium_wallpaper))
|
|
|
|
def test_wallpaper_product2_inquiry_price(self):
|
|
designer = DesignerFactory()
|
|
designer.pricepremium_wallpaper = 4
|
|
product = Product(designer=designer)
|
|
with mock.patch.object(Inquiry, "market", sweden):
|
|
inquiry = Inquiry(
|
|
product_group="photo-wallpaper",
|
|
pricepremium=25,
|
|
width=250,
|
|
height=400,
|
|
price_retouch=200,
|
|
material=standard_wallpaper,
|
|
product=product,
|
|
)
|
|
|
|
self.assertEqual(3835, inquiry_price(inquiry, inc_price_retouch=False))
|
|
self.assertEqual(200, inquiry.price_retouch)
|
|
self.assertEqual(
|
|
250, inquiry.local_price_retouch(rounded=True, inc_vat=True)
|
|
)
|
|
|
|
def test_wallpaper_kit_price(self):
|
|
self.assertEqual(159.2, wallpaper_kit_price(market=sweden, rounded=False, inc_vat=False))
|
|
self.assertEqual(199.0, wallpaper_kit_price(market=sweden, rounded=False, inc_vat=True))
|
|
self.assertEqual(21.0, wallpaper_kit_price(market=us))
|
|
self.assertEqual(197.0, wallpaper_kit_price(market=denmark))
|
|
|
|
|
|
class TestPriceWithPriceAdjustment(unittest2.TestCase):
|
|
|
|
def test_m2_price_with_price_adjustment(self):
|
|
patcher = patch('api.lib.prices.get_price_adjustment', return_value=1.1275)
|
|
patcher.start()
|
|
self.assertEqual(
|
|
37, # round(23600/100.0 * 0.1 * 1.15 * 1.1275 * 1.21) = round(37,0264235) = 37
|
|
wallpaper_m2_price(
|
|
material=standard_wallpaper, market=nl, inc_vat=True
|
|
),
|
|
)
|
|
patcher.stop()
|