def test_shipping_gross_money(self): adapter = IShoppingSite(self.portal) adapter.shipping_method = mock.Mock(return_value=None) self.assertIsNone(adapter.shipping_gross_money()) adapter.get_shipping_gross_money = mock.Mock() adapter.shipping_method = mock.Mock(return_value={'uuid': 'UUID'}) adapter.shipping_gross_money() adapter.get_shipping_gross_money.assert_called_with('UUID')
def shipping_methods(self): """Returns list of dictionary of shipping methods :rtype: list """ shopping_site = IShoppingSite(self.context) default_charset = getattr(getattr(getToolByName( self.context, 'portal_properties'), 'site_properties'), 'default_charset', 'utf-8') res = [] for brain in shopping_site.shipping_methods(): uuid = brain.UID orig_uuid = shopping_site.shipping_method()['uuid'] if uuid == orig_uuid: shipping_gross_money = shopping_site.shipping_gross_money() else: shipping_gross_money = shopping_site.get_shipping_gross_money(uuid) if shipping_gross_money.amount == 0.0: title = brain.Title else: title = '{} {}'.format(brain.Title, shopping_site.format_money(shipping_gross_money).encode(default_charset)) res.append({ 'description': brain.Description, 'checked': uuid == orig_uuid, 'title': title, 'uuid': uuid, }) return res
def test_shipping_vat_money(self): adapter = IShoppingSite(self.portal) self.assertIsNone(adapter.shipping_vat_money()) adapter.shipping_gross_money = mock.Mock(return_value=self.money('10.00')) adapter.shipping_method = mock.Mock(return_value={'vat_rate': 24.0}) self.assertEqual(adapter.shipping_vat_money(), self.money('2.40'))
def shipping_method(self): shopping_site = IShoppingSite(self.context) items = shopping_site.shipping_method().copy() if items['gross'].amount == 0.0: items['is_free'] = True else: items['is_free'] = False items['vat_rate'] = IVATAdapter(self.context).percent(items['vat_rate']) items['gross'] = shopping_site.format_money(items['gross']) return items
def test_create_cart(self, create_order): adapter = IShoppingSite(self.portal) create_order.return_value = None self.assertIsNone(adapter.create_order()) order1 = self.create_content('collective.cart.core.Order', id='1') create_order.return_value = order1 self.assertEqual(adapter.create_order(), order1) with self.assertRaises(KeyError): order1['shipping_method'] with self.assertRaises(KeyError): order1['billing'] with self.assertRaises(KeyError): order1['shipping'] adapter.shipping_method = mock.Mock(return_value={'gross': self.money('10.00')}) order2 = self.create_content('collective.cart.core.Order', id='2') create_order.return_value = order2 self.assertEqual(adapter.create_order(), order2) self.assertIsNotNone(order2['shipping_method']) with self.assertRaises(KeyError): order2['billing'] with self.assertRaises(KeyError): order2['shipping'] names = ['city', 'last_name', 'first_name', 'email', 'phone', 'post', 'street'] address = {} for name in names: address[name] = name.upper() adapter.get_address = mock.Mock(return_value=address) adapter.billing_same_as_shipping = mock.Mock(return_value=True) order3 = self.create_content('collective.cart.core.Order', id='3') create_order.return_value = order3 self.assertEqual(adapter.create_order(), order3) self.assertIsNotNone(order3['shipping_method']) self.assertIsNotNone(order3['billing']) with self.assertRaises(KeyError): order3['shipping'] adapter.billing_same_as_shipping = mock.Mock(return_value=False) order4 = self.create_content('collective.cart.core.Order', id='4') create_order.return_value = order4 self.assertEqual(adapter.create_order(), order4) self.assertIsNotNone(order4['shipping_method']) self.assertIsNotNone(order4['billing']) self.assertIsNotNone(order4['shipping'])
def test__calculated_weight(self): adapter = IShoppingSite(self.portal) self.assertEqual(adapter._calculated_weight(), 0.0) adapter.shipping_method = mock.Mock() self.assertEqual(adapter._calculated_weight(), 0.0) self.assertEqual(adapter._calculated_weight('RATE'), 0.0) self.assertEqual(adapter._calculated_weight(10.0), 0.0) adapter.cart_article_listing = mock.MagicMock(return_value=[{'weight': 100.0, 'depth': 10.0, 'height': 20.0, 'width': 30.0, 'quantity': 1}]) self.assertEqual(adapter._calculated_weight(10.0), 0.1) adapter.cart_article_listing = mock.MagicMock(return_value=[ {'weight': 100.0, 'depth': 10.0, 'height': 20.0, 'width': 30.0, 'quantity': 1}, {'weight': 10.0, 'depth': 10.0, 'height': 20.0, 'width': 30.0, 'quantity': 1}]) self.assertEqual(adapter._calculated_weight(10.0), 0.16) adapter.cart_article_listing = mock.MagicMock(return_value=[ {'weight': 100.0, 'depth': 10.0, 'height': 20.0, 'width': 30.0, 'quantity': 2, 'vat_rate': 24.0}]) self.assertEqual(adapter._calculated_weight(10.0), 0.2)
def test_shipping_method(self): adapter = IShoppingSite(self.portal) self.assertIsNone(adapter.shipping_method()) adapter.cart = mock.MagicMock(return_value={'shipping_method': 'SHIPPINIG_METHOD'}) self.assertEqual(adapter.shipping_method(), 'SHIPPINIG_METHOD')
def test_update_shipping_method(self): adapter = IShoppingSite(self.portal) self.assertIsNone(adapter.shipping_method()) adapter.update_shipping_method() self.assertIsNone(adapter.shipping_method()) session = adapter.getSessionData(create=True) session.set('collective.cart.core', {'articles': { '1': {'gross': self.money('10.00'), 'quantity': 2, 'vat_rate': 24.0} }}) adapter.update_shipping_method() self.assertIsNone(adapter.shipping_method()) alsoProvides(self.portal, IShoppingSiteRoot) container = self.create_content('collective.cart.shipping.ShippingMethodContainer') shippingmethod1 = self.create_atcontent('ShippingMethod', container, id='shippingmethod1', vat=self.decimal('24.00')) uuid1 = IUUID(shippingmethod1) adapter.update_shipping_method() self.assertEqual(adapter.shipping_method(), { 'gross': None, 'max_delivery_days': None, 'uuid': uuid1, 'title': '', 'min_delivery_days': None, 'vat_rate': self.decimal('24.00'), 'net': None, 'vat': None, 'weight_dimension_rate': 250.0 }) articles = {'1': {'gross': self.money('10.00'), 'quantity': 2, 'weight': 100.0, 'depth': 10.0, 'height': 20.0, 'width': 30.0, 'vat_rate': 24.0}} adapter.update_cart('articles', articles) adapter.update_shipping_method() self.assertEqual(adapter.shipping_method(), { 'gross': self.money('3.00'), 'max_delivery_days': None, 'uuid': uuid1, 'title': '', 'min_delivery_days': None, 'vat_rate': self.decimal('24.00'), 'net': self.money('2.28'), 'vat': self.money('0.72'), 'weight_dimension_rate': 250.0 }) articles = {'1': {'gross': self.money('10.00'), 'quantity': 4, 'weight': 100.0, 'depth': 10.0, 'height': 20.0, 'width': 30.0, 'vat_rate': 24.0}} adapter.update_cart('articles', articles) adapter.update_shipping_method(uuid1) self.assertEqual(adapter.shipping_method(), { 'gross': self.money('6.00'), 'max_delivery_days': None, 'uuid': uuid1, 'title': '', 'min_delivery_days': None, 'vat_rate': self.decimal('24.00'), 'net': self.money('4.56'), 'vat': self.money('1.44'), 'weight_dimension_rate': 250.0 }) articles = {'1': {'gross': self.money('10.00'), 'quantity': 2, 'weight': 100.0, 'depth': 10.0, 'height': 20.0, 'width': 30.0, 'vat_rate': 24.0}} adapter.update_cart('articles', articles) adapter.update_shipping_method('UUID') self.assertEqual(adapter.shipping_method(), { 'gross': self.money('3.00'), 'max_delivery_days': None, 'uuid': uuid1, 'title': '', 'min_delivery_days': None, 'vat_rate': self.decimal('24.00'), 'net': self.money('2.28'), 'vat': self.money('0.72'), 'weight_dimension_rate': 250.0 }) articles = {'1': {'gross': self.money('10.00'), 'quantity': 4, 'weight': 100.0, 'depth': 10.0, 'height': 20.0, 'width': 30.0, 'vat_rate': 24.0}} adapter.update_cart('articles', articles) adapter.update_shipping_method(uuid1) self.assertEqual(adapter.shipping_method(), { 'gross': self.money('6.00'), 'max_delivery_days': None, 'uuid': uuid1, 'title': '', 'min_delivery_days': None, 'vat_rate': self.decimal('24.00'), 'net': self.money('4.56'), 'vat': self.money('1.44'), 'weight_dimension_rate': 250.0 }) shippingmethod2 = self.create_atcontent('ShippingMethod', container, id='shippingmethod2', vat=self.decimal('24.00'), weight_dimension_rate=1.0) uuid2 = IUUID(shippingmethod2) articles = {'1': {'gross': self.money('10.00'), 'quantity': 2, 'weight': 100.0, 'depth': 10.0, 'height': 20.0, 'width': 30.0, 'vat_rate': 24.0}} adapter.update_cart('articles', articles) adapter.update_shipping_method(uuid2) self.assertEqual(adapter.shipping_method(), { 'gross': self.money('0.20'), 'max_delivery_days': None, 'uuid': uuid2, 'title': '', 'min_delivery_days': None, 'vat_rate': self.decimal('24.00'), 'net': self.money('0.15'), 'vat': self.money('0.05'), 'weight_dimension_rate': 1.0 }) articles = {'1': {'gross': self.money('10.00'), 'quantity': 4, 'weight': 100.0, 'depth': 10.0, 'height': 20.0, 'width': 30.0, 'vat_rate': 24.0}} adapter.update_cart('articles', articles) adapter.update_shipping_method(uuid1) self.assertEqual(adapter.shipping_method(), { 'gross': self.money('6.00'), 'max_delivery_days': None, 'uuid': uuid1, 'title': '', 'min_delivery_days': None, 'vat_rate': self.decimal('24.00'), 'net': self.money('4.56'), 'vat': self.money('1.44'), 'weight_dimension_rate': 250.0 }) adapter.remove_from_cart('shipping_method') self.assertIsNone(adapter.shipping_method()) adapter.update_shipping_method(uuid1) self.assertEqual(adapter.shipping_method(), { 'gross': self.money('6.00'), 'max_delivery_days': None, 'uuid': uuid1, 'title': '', 'min_delivery_days': None, 'vat_rate': self.decimal('24.00'), 'net': self.money('4.56'), 'vat': self.money('1.44'), 'weight_dimension_rate': 250.0 })