P5-6491 use market instead of territory for price calculations (#37)
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import factory
|
||||
from api import models
|
||||
from api import db
|
||||
|
||||
|
||||
class DesignerFactory(factory.Factory):
|
||||
@@ -25,3 +26,8 @@ class InquiryFactory(factory.Factory):
|
||||
|
||||
price_retouch = None
|
||||
pricepremium = 0
|
||||
|
||||
|
||||
class MarketFactory(factory.Factory):
|
||||
class Meta:
|
||||
model = models.Market
|
||||
|
||||
+29
-38
@@ -3,47 +3,38 @@
|
||||
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
|
||||
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,
|
||||
)
|
||||
|
||||
|
||||
sweden = market.from_territory("SE")
|
||||
sweden.price_adjustments = 1
|
||||
sweden.exchange_rate = 1
|
||||
reseller = ContractCustomerFactory.build(pricepremium=15)
|
||||
|
||||
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
|
||||
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)
|
||||
|
||||
@@ -17,16 +17,21 @@ class TestEndpoints(flask_testing.TestCase):
|
||||
db.session.remove()
|
||||
db.drop_all()
|
||||
|
||||
def _add_market(self):
|
||||
currency = Currencies(iso3char="SEK", exchange_rate=1)
|
||||
db.session.add(currency)
|
||||
market = Market(name="SE", vat=1.25, currency="SEK", price_adjustments=1)
|
||||
db.session.add(market)
|
||||
db.session.commit()
|
||||
return market
|
||||
|
||||
def _add_material(self, name, groupid, price):
|
||||
material = Material(name=name, price=price)
|
||||
db.session.add(material)
|
||||
db.session.commit()
|
||||
return material
|
||||
|
||||
def _add_inquiry(self, product_group, price_retouch=100):
|
||||
currency = Currencies(iso3char="SEK", exchange_rate=1)
|
||||
db.session.add(currency)
|
||||
market = Market(name="SE", vat=1.25, currency='SEK', price_adjustments=1)
|
||||
def _add_inquiry(self, market, product_group, price_retouch=100):
|
||||
inquiry = Inquiry(
|
||||
market=market,
|
||||
product_group=product_group,
|
||||
@@ -56,9 +61,10 @@ class TestEndpoints(flask_testing.TestCase):
|
||||
return product
|
||||
|
||||
def test_wallpaper(self):
|
||||
self._add_market()
|
||||
self._add_material("standard-wallpaper", 1, 23600)
|
||||
self._add_material("premium-wallpaper", 1, 26000)
|
||||
response = self.client.get("/prices/wallpaper?width=200&height=10&territory=SE")
|
||||
response = self.client.get("/prices/wallpaper?width=200&height=10&market=1")
|
||||
self.assert200(response)
|
||||
expected = [
|
||||
{
|
||||
@@ -81,12 +87,13 @@ class TestEndpoints(flask_testing.TestCase):
|
||||
self.assertEqual(expected, response.json["data"])
|
||||
|
||||
def test_wallpaper_with_product(self):
|
||||
self._add_market()
|
||||
self._add_material("standard-wallpaper", 1, 23600)
|
||||
self._add_material("premium-wallpaper", 1, 26000)
|
||||
designer = self._add_designer(pricepremium_wallpaper=4)
|
||||
product = self._add_product(designer)
|
||||
response = self.client.get(
|
||||
"/prices/wallpaper?width=200&height=200&territory=SE&product=1"
|
||||
"/prices/wallpaper?width=200&height=200&market=1&product=1"
|
||||
)
|
||||
expected = [
|
||||
{
|
||||
@@ -109,7 +116,8 @@ class TestEndpoints(flask_testing.TestCase):
|
||||
self.assertEqual(expected, response.json["data"])
|
||||
|
||||
def test_canvas(self):
|
||||
response = self.client.get("/prices/canvas?width=200&height=10&territory=SE")
|
||||
self._add_market()
|
||||
response = self.client.get("/prices/canvas?width=200&height=10&market=1")
|
||||
self.assert200(response)
|
||||
expected = [
|
||||
{
|
||||
@@ -130,10 +138,11 @@ class TestEndpoints(flask_testing.TestCase):
|
||||
self.assertEqual(expected, response.json["data"])
|
||||
|
||||
def test_canvas_with_product(self):
|
||||
self._add_market()
|
||||
designer = self._add_designer(pricepremium_canvas=2)
|
||||
product = self._add_product(designer)
|
||||
response = self.client.get(
|
||||
"/prices/canvas?width=200&height=10&territory=SE&product=1"
|
||||
"/prices/canvas?width=200&height=10&market=1&product=1"
|
||||
)
|
||||
self.assert200(response)
|
||||
expected = [
|
||||
@@ -155,7 +164,8 @@ class TestEndpoints(flask_testing.TestCase):
|
||||
self.assertEqual(expected, response.json["data"])
|
||||
|
||||
def test_diy_frame(self):
|
||||
response = self.client.get("/prices/diy-frame?width=200&height=50&territory=SE")
|
||||
self._add_market()
|
||||
response = self.client.get("/prices/diy-frame?width=200&height=50&market=1")
|
||||
self.assert200(response)
|
||||
product = response.json["data"][0]
|
||||
self.assertEqual(150, product["width"], "it adjusts measurements")
|
||||
@@ -163,7 +173,8 @@ class TestEndpoints(flask_testing.TestCase):
|
||||
self.assertAlmostEqual(731.25, product["price"], places=2)
|
||||
|
||||
def test_poster(self):
|
||||
response = self.client.get("/prices/poster?width=50&height=30&territory=SE")
|
||||
self._add_market()
|
||||
response = self.client.get("/prices/poster?width=50&height=30&market=1")
|
||||
self.assert200(response)
|
||||
expected = [
|
||||
{
|
||||
@@ -184,7 +195,8 @@ class TestEndpoints(flask_testing.TestCase):
|
||||
self.assertEqual(expected, response.json["data"])
|
||||
|
||||
def test_poster_hanger(self):
|
||||
response = self.client.get("/prices/poster-hanger?width=50&territory=SE")
|
||||
self._add_market()
|
||||
response = self.client.get("/prices/poster-hanger?width=50&market=1")
|
||||
self.assert200(response)
|
||||
product = response.json["data"][0]
|
||||
self.assertEqual(210.0, product["price"])
|
||||
@@ -192,36 +204,39 @@ class TestEndpoints(flask_testing.TestCase):
|
||||
self.assertEqual(50, product["width"])
|
||||
|
||||
def test_inquiry_wallpaper(self):
|
||||
market = self._add_market()
|
||||
self._add_material("standard-wallpaper", 1, 236)
|
||||
self._add_material("premium-wallpaper", 1, 260)
|
||||
self._add_inquiry(product_group="photo-wallpaper")
|
||||
self._add_inquiry(market=market, product_group="photo-wallpaper")
|
||||
response = self.client.get("/prices/inquiry/1?width=100&height=100")
|
||||
self.assert200(response)
|
||||
self.assertEqual("wallpaper", response.json["group"])
|
||||
|
||||
def test_inquiry_canvas(self):
|
||||
market = self._add_market()
|
||||
self._add_material("standard-canvas", 2, 799.2)
|
||||
self._add_inquiry(product_group="canvas")
|
||||
self._add_inquiry(market=market, product_group="canvas")
|
||||
response = self.client.get("/prices/inquiry/1?width=100&height=100")
|
||||
self.assert200(response)
|
||||
self.assertEqual("canvas", response.json["group"])
|
||||
|
||||
def test_inquiry_poster(self):
|
||||
self._add_inquiry(product_group="poster")
|
||||
market = self._add_market()
|
||||
self._add_inquiry(market=market, product_group="poster")
|
||||
response = self.client.get("/prices/inquiry/1?width=100&height=100")
|
||||
self.assert200(response)
|
||||
self.assertEqual("poster", response.json["group"])
|
||||
|
||||
def test_framed_print(self):
|
||||
response = self.client.get(
|
||||
"/prices/framed-print?sku=GLOBAL-CFP-12x12&territory=SE"
|
||||
)
|
||||
self._add_market()
|
||||
response = self.client.get("/prices/framed-print?sku=GLOBAL-CFP-12x12&market=1")
|
||||
self.assert200(response)
|
||||
expected = [{"price": 597.5, "price_excl_vat": 478, "sku": "GLOBAL-CFP-12x12"}]
|
||||
self.assertEqual(expected, response.json["data"])
|
||||
|
||||
def test_framed_print_invalid_sku(self):
|
||||
response = self.client.get("/prices/framed-print?sku=invalid&territory=SE")
|
||||
self._add_market()
|
||||
response = self.client.get("/prices/framed-print?sku=invalid&market=1")
|
||||
self.assert400(response)
|
||||
self.assertEqual(
|
||||
"sku contains an invalid value, must be one of: {}".format(
|
||||
|
||||
@@ -10,7 +10,6 @@ from api.validators import (
|
||||
ValidationError,
|
||||
validate_exists,
|
||||
validate_number,
|
||||
validate_territory,
|
||||
validate_jsonschema,
|
||||
validate_any_of,
|
||||
)
|
||||
@@ -89,20 +88,6 @@ class TestValidators(flask_testing.TestCase):
|
||||
self.assertEqual(b"age is not a number", self.client.get("/?age=aaa").data)
|
||||
self.assertEqual(b"ok", self.client.get("/?age=1").data)
|
||||
|
||||
def test_validate_territory(self):
|
||||
app = self.app
|
||||
|
||||
@app.route("/", methods=["GET"])
|
||||
@validate_territory("territory")
|
||||
def index():
|
||||
return "ok"
|
||||
|
||||
self.assertEqual(b"No territory is specified", self.client.get("/").data)
|
||||
self.assertEqual(
|
||||
b"abc is not a valid territory", self.client.get("/?territory=abc").data
|
||||
)
|
||||
self.assertEqual(b"ok", self.client.get("/?territory=SE").data)
|
||||
|
||||
def test_validate_jsonschema(self):
|
||||
app = self.app
|
||||
schema = {
|
||||
|
||||
Reference in New Issue
Block a user