556 lines
18 KiB
Python
556 lines
18 KiB
Python
# coding=UTF-8
|
|
|
|
import unittest2
|
|
import mock
|
|
from api.lib.prices import *
|
|
from tests.factories import DesignerFactory, ContractCustomerFactory, InquiryFactory
|
|
from api.models import market
|
|
from api.models import Inquiry
|
|
from api.models import Product
|
|
from api.models.product import Material
|
|
|
|
|
|
sweden = market.from_territory("SE")
|
|
sweden.price_adjustments = 1
|
|
sweden.exchange_rate = 1
|
|
|
|
denmark = market.from_territory("DK")
|
|
denmark.price_adjustments = 1.185
|
|
denmark.exchange_rate = 0.799000
|
|
|
|
us = market.from_territory("US")
|
|
us.price_adjustments = 1.06
|
|
us.exchange_rate = 0.119800
|
|
|
|
nl = market.from_territory("NL")
|
|
nl.price_adjustments = 1.15
|
|
nl.exchange_rate = 0.100000
|
|
|
|
eu = market.from_territory("EU")
|
|
eu.price_adjustments = 1.13
|
|
eu.exchange_rate = 0.100000
|
|
|
|
russia = market.from_territory("RU")
|
|
russia.price_adjustments = 1
|
|
russia.exchange_rate = 0.100000 # russia uses EUR
|
|
|
|
designer = DesignerFactory()
|
|
designer.pricepremium_wallpaper = 17.647
|
|
designer.pricepremium_canvas = 8
|
|
designer.pricepremium_poster = 15.50
|
|
designer.pricepremium_framed_print = 13
|
|
|
|
|
|
reseller = ContractCustomerFactory(pricepremium=15)
|
|
piterra = ContractCustomerFactory(pricepremium=36.029411)
|
|
|
|
designer_moomin = DesignerFactory()
|
|
designer_moomin.pricepremium_wallpaper = 2
|
|
designer_moomin.pricepremium_canvas = 3
|
|
designer_moomin.pricepremium_poster = 4
|
|
designer_moomin.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 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(
|
|
44,
|
|
wallpaper_m2_price(
|
|
material=standard_wallpaper,
|
|
market=russia,
|
|
reseller=piterra,
|
|
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(
|
|
60,
|
|
wallpaper_price(
|
|
width=100, height=100, material=standard_wallpaper, market=us
|
|
),
|
|
"Minium price for US is 2 sqm",
|
|
)
|
|
|
|
def test_canvas_cm2_price(self):
|
|
self.assertEqual(0.24099500000000001, canvas_cm2_price(250))
|
|
self.assertEqual(0.24589580000000003, canvas_cm2_price(10))
|
|
self.assertEqual(0.22568000000000002, canvas_cm2_price(1000))
|
|
|
|
def test_canvas_price(self):
|
|
self.assertEqual(
|
|
488,
|
|
canvas_price(
|
|
width=50, height=50, market=sweden, framed=True, inc_vat=False
|
|
),
|
|
)
|
|
|
|
self.assertEqual(
|
|
960,
|
|
canvas_price(
|
|
width=100, height=100, market=sweden, framed=True, inc_vat=False
|
|
),
|
|
)
|
|
|
|
self.assertEqual(
|
|
1359,
|
|
canvas_price(
|
|
width=150, height=120, market=sweden, framed=True, inc_vat=False
|
|
),
|
|
)
|
|
|
|
self.assertEqual(
|
|
256000,
|
|
canvas_price(
|
|
width=2000, height=2000, market=sweden, framed=True, inc_vat=False
|
|
),
|
|
)
|
|
|
|
self.assertEqual(
|
|
341,
|
|
canvas_price(
|
|
width=10, height=10, market=sweden, framed=True, inc_vat=False
|
|
),
|
|
)
|
|
|
|
self.assertEqual(
|
|
427,
|
|
canvas_price(width=40, height=40, market=sweden, framed=True, inc_vat=True),
|
|
)
|
|
|
|
self.assertEqual(
|
|
299,
|
|
canvas_price(
|
|
width=40, height=40, market=sweden, framed=False, inc_vat=True
|
|
),
|
|
)
|
|
|
|
self.assertEqual(
|
|
731,
|
|
canvas_price(
|
|
width=80, height=80, market=sweden, framed=False, inc_vat=True
|
|
),
|
|
)
|
|
|
|
self.assertEqual(
|
|
1044,
|
|
canvas_price(width=80, height=80, market=sweden, framed=True, inc_vat=True),
|
|
)
|
|
|
|
self.assertEqual(
|
|
1260,
|
|
canvas_price(
|
|
width=150, height=150, market=sweden, framed=False, inc_vat=True
|
|
),
|
|
)
|
|
|
|
self.assertEqual(
|
|
1800,
|
|
canvas_price(
|
|
width=150, height=150, market=sweden, framed=True, inc_vat=True
|
|
),
|
|
)
|
|
|
|
self.assertEqual(
|
|
201,
|
|
canvas_price(width=150, height=150, market=us, framed=True, inc_vat=True),
|
|
)
|
|
|
|
self.assertEqual(
|
|
672,
|
|
canvas_price(
|
|
width=100, height=100, market=sweden, framed=False, inc_vat=False
|
|
),
|
|
)
|
|
|
|
self.assertEqual(
|
|
840,
|
|
canvas_price(
|
|
width=100, height=100, market=sweden, framed=False, inc_vat=True
|
|
),
|
|
)
|
|
|
|
self.assertEqual(
|
|
462,
|
|
canvas_price(
|
|
width=50, height=50, market=denmark, framed=True, inc_vat=False
|
|
),
|
|
)
|
|
|
|
self.assertEqual(
|
|
181,
|
|
canvas_price(
|
|
width=150,
|
|
height=100,
|
|
market=us,
|
|
designer=designer_moomin,
|
|
inc_vat=False,
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
181,
|
|
canvas_price(
|
|
width=150, height=100, market=us, designer=designer_moomin, inc_vat=True
|
|
),
|
|
)
|
|
|
|
def test_canvas_frame_price(self):
|
|
self.assertEqual(
|
|
624, canvas_frame_price(width=100, height=100, market=sweden, inc_vat=False)
|
|
)
|
|
self.assertEqual(
|
|
780, canvas_frame_price(width=100, height=100, market=sweden, inc_vat=True)
|
|
)
|
|
self.assertEqual(62, canvas_frame_price(width=100, height=100, market=russia))
|
|
self.assertEqual(
|
|
936, canvas_frame_price(500, 500, market=sweden, inc_vat=False)
|
|
)
|
|
self.assertEqual(222, canvas_frame_price(1, 1, market=sweden, inc_vat=False))
|
|
self.assertEqual(
|
|
277, canvas_frame_price(width=40, height=40, market=sweden, inc_vat=True)
|
|
)
|
|
self.assertEqual(71, canvas_frame_price(width=40, height=120, market=us))
|
|
self.assertEqual(66, canvas_frame_price(width=40, height=100, market=us))
|
|
self.assertEqual(578, canvas_frame_price(width=40, height=120, market=sweden))
|
|
|
|
def test_wallpaper_custom_inquiry_price(self):
|
|
with mock.patch.object(Inquiry, "market", nl):
|
|
inquiry = Inquiry(
|
|
product_group="photo-wallpaper",
|
|
territory="NL",
|
|
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",
|
|
territory="SE",
|
|
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",
|
|
territory="SE",
|
|
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_piterra_inquiry_price(self):
|
|
product = Product(designer=None)
|
|
with mock.patch.object(Inquiry, "market", russia):
|
|
inquiry = Inquiry(
|
|
product_group="photo-wallpaper",
|
|
territory="RU",
|
|
width=150,
|
|
height=211,
|
|
dealer_store=piterra,
|
|
pricepremium=36.029411,
|
|
material=standard_wallpaper,
|
|
product=product,
|
|
)
|
|
|
|
self.assertEqual(138, inquiry_price(inquiry, inc_price_retouch=False))
|
|
self.assertEqual(
|
|
152,
|
|
inquiry_price(
|
|
inquiry, inc_price_retouch=False, material=premium_wallpaper
|
|
),
|
|
)
|
|
# test set reseller store to None to calculate inquiry price without reseller price premium
|
|
self.assertEqual(
|
|
102, inquiry_price(inquiry, inc_price_retouch=False, reseller=None)
|
|
)
|
|
|
|
def test_canvas_custom_inquiry_price(self):
|
|
with mock.patch.object(Inquiry, "market", sweden):
|
|
inquiry = Inquiry(
|
|
product_group="canvas",
|
|
territory="SE",
|
|
width=100,
|
|
height=100,
|
|
framed=True,
|
|
price_retouch=200,
|
|
pricepremium=0,
|
|
material=standard_canvas,
|
|
)
|
|
|
|
self.assertEqual(1200, inquiry_price(inquiry, inc_price_retouch=False))
|
|
self.assertEqual(1450, inquiry_price(inquiry, inc_price_retouch=True))
|
|
self.assertEqual(
|
|
840, inquiry_price(inquiry, inc_price_retouch=False, framed=False)
|
|
)
|
|
|
|
def test_canvas_piterra_inquiry_price(self):
|
|
with mock.patch.object(Inquiry, "market", russia):
|
|
inquiry = Inquiry(
|
|
product_group="canvas",
|
|
territory="RU",
|
|
width=100,
|
|
height=100,
|
|
framed=True,
|
|
dealer_store=piterra,
|
|
pricepremium=0,
|
|
material=standard_canvas,
|
|
)
|
|
|
|
# note: site currently calculates this as €150 which is wrong because
|
|
# it does not add dealer_store.pricepremium to the frame price
|
|
self.assertEqual(131, inquiry_price(inquiry))
|
|
self.assertEqual(91, inquiry_price(inquiry, framed=False))
|
|
|
|
def test_package_price(self):
|
|
self.assertEqual(150, package_price("canvas", 150, 40, market=us))
|
|
self.assertEqual(0, package_price("canvas", 150, 40, market=sweden))
|
|
self.assertEqual(150, package_price("poster", 150, 40, market=us))
|
|
self.assertEqual(100, package_price("poster", 40, 40, market=us))
|
|
self.assertEqual(0, package_price("poster", 150, 40, market=sweden))
|
|
|
|
def test_poster_cm2_price(self):
|
|
self.assertEqual(0.100789248, poster_cm2_price(1))
|
|
self.assertEqual(0.0997248, poster_cm2_price(100))
|
|
self.assertEqual(0.090048, poster_cm2_price(1000))
|
|
self.assertEqual(0.04032, poster_cm2_price(10000))
|
|
self.assertEqual(0.028, poster_cm2_price(100000))
|
|
|
|
def test_poster_price(self):
|
|
self.assertEqual(
|
|
354, poster_price(width=30, height=40, hanger=True, market=sweden)
|
|
)
|
|
self.assertEqual(
|
|
250, poster_price(width=30, height=40, hanger=False, market=sweden)
|
|
)
|
|
self.assertEqual(
|
|
48,
|
|
poster_price(width=30, height=40, hanger=True, market=us),
|
|
"extra cost for us market",
|
|
)
|
|
self.assertEqual(
|
|
76,
|
|
poster_price(width=120, height=40, market=us),
|
|
"high extra cost for us market wide posters",
|
|
)
|
|
self.assertEqual(
|
|
78, poster_price(width=120, height=40, market=us, designer=designer_moomin)
|
|
)
|
|
|
|
def test_poster_hanger_price(self):
|
|
self.assertEqual(166, poster_hanger_price(30, market=sweden))
|
|
self.assertEqual(390, poster_hanger_price(150, market=sweden))
|
|
self.assertEqual(29, poster_hanger_price(30, market=us))
|
|
self.assertEqual(58, poster_hanger_price(150, market=us))
|
|
|
|
def test_poster_custom_inquiry_price(self):
|
|
with mock.patch.object(Inquiry, "market", sweden):
|
|
inquiry = Inquiry(
|
|
product_group="poster",
|
|
territory="SE",
|
|
width=30,
|
|
height=40,
|
|
hanger=True,
|
|
price_retouch=200,
|
|
pricepremium=0,
|
|
)
|
|
|
|
self.assertEqual(354, inquiry_price(inquiry, inc_price_retouch=False))
|
|
self.assertEqual(604, inquiry_price(inquiry, inc_price_retouch=True))
|
|
self.assertEqual(
|
|
250, inquiry_price(inquiry, inc_price_retouch=False, hanger=False)
|
|
)
|
|
|
|
def test_framed_print_price(self):
|
|
self.assertEqual(598, framed_print_price(sku="GLOBAL-CFP-12x12", market=sweden))
|
|
self.assertEqual(
|
|
639,
|
|
framed_print_price(
|
|
sku="GLOBAL-CFP-12x12", market=sweden, designer=designer_moomin
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
528, framed_print_price(sku="GLOBAL-CFP-12x12", market=denmark)
|
|
)
|
|
self.assertEqual(113, framed_print_price(sku="GLOBAL-CFP-28x40", market=russia))
|
|
self.assertEqual(208, framed_print_price(sku="GLOBAL-CFP-28x40", market=us))
|
|
|
|
def test_invalid_framed_print_code(self):
|
|
with self.assertRaises(ValueError) as context:
|
|
framed_print_price(sku="invalid", market=sweden)
|
|
|
|
self.assertTrue("Invalid SKU number" in str(context.exception))
|