import json import flask_testing from api import create_app, db from api.models.product import Material, MaterialPrice, Product from api.models.inquiry import Inquiry from api.models.designer import Designer class TestEndpoints(flask_testing.TestCase): def create_app(self): return create_app('tests.config') def setUp(self): db.create_all() def tearDown(self): db.session.remove() db.drop_all() def _add_material(self, name, groupid, price): material = Material(name=name) material.material_price = MaterialPrice(price=price, groupid=groupid) db.session.add(material) db.session.commit() return material def _add_inquiry(self, territory, product_group, price_retouch=100): inquiry = Inquiry( territory=territory, product_group=product_group, price_retouch=price_retouch) db.session.add(inquiry) db.session.commit() return inquiry def _add_designer(self, pricepremium): designer = Designer('Disney', 'disney', 'US', 'USD', pricepremium=pricepremium) db.session.add(designer) db.session.commit() return designer def _add_product(self, designer=None): product = Product(designer=designer) db.session.add(product) db.session.commit() return product def test_wallpaper(self): self._add_material('standard-wallpaper', 1, 236) self._add_material('premium-wallpaper', 1, 260) response = self.client.get( '/prices/wallpaper?width=200&height=10&territory=SE') self.assert200(response) expected = [ { 'm2_price': 295.0, 'm2_price_excl_vat': 236.0, 'price_excl_vat': 236.0, 'price': 295.0, 'material': 'standard-wallpaper', 'material_id': 1 }, { 'm2_price': 325.0, 'm2_price_excl_vat': 260.0, 'price_excl_vat': 260.0, 'price': 325.0, 'material': 'premium-wallpaper', 'material_id': 2 } ] self.assertEqual(expected, response.json['data']) def test_wallpaper_with_product(self): self._add_material('standard-wallpaper', 1, 236) self._add_material('premium-wallpaper', 1, 260) designer = self._add_designer(4) product = self._add_product(designer) response = self.client.get( '/prices/wallpaper?width=200&height=200&territory=SE&product=1') expected = [ { 'price': 1227.2, 'price_excl_vat': 981.76, 'material_id': 1, 'm2_price': 306.8, 'm2_price_excl_vat': 245.44, 'material': 'standard-wallpaper' }, { 'price': 1352.0000000000002, 'price_excl_vat': 1081.6000000000001, 'material_id': 2, 'm2_price': 338.00000000000006, 'm2_price_excl_vat': 270.40000000000003, 'material': 'premium-wallpaper' } ] self.assertEqual(expected, response.json['data']) def test_canvas(self): self._add_material('standard-canvas', 2, 799.2) response = self.client.get( '/prices/canvas?width=200&height=10&territory=SE') self.assert200(response) expected = [ { 'price_excl_vat': 970.3471312000001, 'price': 1212.9339140000002, 'width': 150, 'height': 40, 'framed': True, 'm2_price': 999.0, 'm2_price_excl_vat': 799.2, }, { 'price_excl_vat': 319.68000000000006, 'price': 399.6000000000001, 'width': 200, 'height': 20, 'framed': False, 'm2_price': 999.0, 'm2_price_excl_vat': 799.2, } ] self.assertEqual(expected, response.json['data']) def test_canvas_with_product(self): self._add_material('standard-canvas', 2, 799.2) designer = self._add_designer(4) product = self._add_product(designer) response = self.client.get( '/prices/canvas?width=200&height=10&territory=SE&product=1') self.assert200(response) expected = [ { 'height': 40, 'price_excl_vat': 989.5279312000002, 'price': 1236.9099140000003, 'framed': True, 'm2_price': 1038.96, 'm2_price_excl_vat': 831.1680000000001, 'width': 150 }, { 'height': 20, 'price_excl_vat': 332.46720000000005, 'price': 415.58400000000006, 'framed': False, 'm2_price': 1038.96, 'm2_price_excl_vat': 831.1680000000001, 'width': 200 } ] 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.assert200(response) product = response.json['data'][0] self.assertEqual(150, product['width'], "it adjusts measurements") self.assertEqual(50, product['height']) self.assertAlmostEqual(923.857, product['price'], places=2) def test_inquiry_wallpaper(self): self._add_material('standard-wallpaper', 1, 236) self._add_material('premium-wallpaper', 1, 260) self._add_inquiry(territory='SE', 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): self._add_material('standard-canvas', 2, 799.2) self._add_inquiry(territory='SE', product_group='canvas') response = self.client.get('/prices/inquiry/1?width=100&height=100') self.assert200(response) self.assertEqual('canvas', response.json['group'])