You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

__init__.py 2.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from decimal import Decimal as D
  2. from django.urls import reverse
  3. from oscar.core.loading import get_class, get_model
  4. from oscar.test import factories
  5. UserAddress = get_model('address', 'UserAddress')
  6. Country = get_model('address', 'Country')
  7. GatewayForm = get_class('checkout.forms', 'GatewayForm')
  8. class CheckoutMixin(object):
  9. def create_digital_product(self):
  10. product_class = factories.ProductClassFactory(
  11. requires_shipping=False, track_stock=False)
  12. product = factories.ProductFactory(product_class=product_class)
  13. factories.StockRecordFactory(
  14. num_in_stock=None, price_excl_tax=D('12.00'), product=product)
  15. return product
  16. def add_product_to_basket(self, product=None):
  17. if product is None:
  18. product = factories.ProductFactory()
  19. factories.StockRecordFactory(
  20. num_in_stock=10, price_excl_tax=D('12.00'), product=product)
  21. detail_page = self.get(product.get_absolute_url())
  22. form = detail_page.forms['add_to_basket_form']
  23. form.submit()
  24. def add_voucher_to_basket(self, voucher=None):
  25. if voucher is None:
  26. voucher = factories.create_voucher()
  27. basket_page = self.get(reverse('basket:summary'))
  28. form = basket_page.forms['voucher_form']
  29. form['code'] = voucher.code
  30. form.submit()
  31. def enter_guest_details(self, email='guest@example.com'):
  32. index_page = self.get(reverse('checkout:index'))
  33. index_page.form['username'] = email
  34. index_page.form.select('options', GatewayForm.GUEST)
  35. return index_page.form.submit()
  36. def create_shipping_country(self):
  37. return factories.CountryFactory(
  38. iso_3166_1_a2='GB', is_shipping_country=True)
  39. def enter_shipping_address(self):
  40. self.create_shipping_country()
  41. address_page = self.get(reverse('checkout:shipping-address'))
  42. form = address_page.forms['new_shipping_address']
  43. form['first_name'] = 'John'
  44. form['last_name'] = 'Doe'
  45. form['line1'] = '1 Egg Road'
  46. form['line4'] = 'Shell City'
  47. form['postcode'] = 'N12 9RT'
  48. form.submit()
  49. def enter_shipping_method(self):
  50. self.get(reverse('checkout:shipping-method'))
  51. def place_order(self):
  52. payment_details = self.get(
  53. reverse('checkout:shipping-method')).follow().follow()
  54. preview = payment_details.click(linkid="view_preview")
  55. return preview.forms['place_order_form'].submit().follow()
  56. def reach_payment_details_page(self, is_guest=False):
  57. self.add_product_to_basket()
  58. if is_guest:
  59. self.enter_guest_details('hello@egg.com')
  60. self.enter_shipping_address()
  61. return self.get(
  62. reverse('checkout:shipping-method')).follow().follow()
  63. def ready_to_place_an_order(self, is_guest=False):
  64. payment_details = self.reach_payment_details_page(is_guest)
  65. return payment_details.click(linkid="view_preview")