# 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 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) 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( 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( 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(88, canvas_frame_price(width=100, height=100, market=eu)) 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", 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_canvas_custom_inquiry_price(self): with mock.patch.object(Inquiry, "market", sweden): inquiry = Inquiry( product_group="canvas", 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_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", 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(159, framed_print_price(sku="GLOBAL-CFP-28x40", market=eu)) 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))