您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

helpers.py 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. from decimal import Decimal as D
  2. import random
  3. import datetime
  4. from oscar.core.loading import get_class, get_classes
  5. Basket = get_class('basket.models', 'Basket')
  6. Free = get_class('shipping.methods', 'Free')
  7. Voucher = get_class('voucher.models', 'Voucher')
  8. OrderCreator = get_class('order.utils', 'OrderCreator')
  9. OrderTotalCalculator = get_class('checkout.calculators', 'OrderTotalCalculator')
  10. Partner, StockRecord = get_classes('partner.models', ('Partner',
  11. 'StockRecord'))
  12. (ProductClass,
  13. Product,
  14. ProductAttribute,
  15. ProductAttributeValue) = get_classes('catalogue.models',
  16. ('ProductClass',
  17. 'Product',
  18. 'ProductAttribute',
  19. 'ProductAttributeValue'))
  20. (Range,
  21. ConditionalOffer,
  22. Condition,
  23. Benefit) = get_classes('offer.models', ('Range', 'ConditionalOffer',
  24. 'Condition', 'Benefit'))
  25. def create_product(price=None, title="Dummy title", product_class="Dummy item class",
  26. partner="Dummy partner", partner_sku=None, upc=None, num_in_stock=10,
  27. attributes=None, **kwargs):
  28. """
  29. Helper method for creating products that are used in tests.
  30. """
  31. ic,_ = ProductClass._default_manager.get_or_create(name=product_class)
  32. item = Product._default_manager.create(title=title, product_class=ic,
  33. upc=upc, **kwargs)
  34. if price is not None or partner_sku or num_in_stock is not None:
  35. if not partner_sku:
  36. partner_sku = 'sku_%d_%d' % (item.id, random.randint(0, 10000))
  37. if price is None:
  38. price = D('10.00')
  39. partner,_ = Partner._default_manager.get_or_create(name=partner)
  40. StockRecord._default_manager.create(product=item, partner=partner,
  41. partner_sku=partner_sku,
  42. price_excl_tax=price, num_in_stock=num_in_stock)
  43. if attributes:
  44. for key, value in attributes.items():
  45. attr,_ = ProductAttribute.objects.get_or_create(name=key, code=key)
  46. ProductAttributeValue.objects.create(product=item, attribute=attr, value=value)
  47. return item
  48. def create_order(number=None, basket=None, user=None, shipping_address=None, shipping_method=None,
  49. billing_address=None, total_incl_tax=None, total_excl_tax=None, **kwargs):
  50. """
  51. Helper method for creating an order for testing
  52. """
  53. if not basket:
  54. basket = Basket.objects.create()
  55. basket.add_product(create_product(price=D('10.00')))
  56. if not basket.id:
  57. basket.save()
  58. if shipping_method is None:
  59. shipping_method = Free()
  60. if total_incl_tax is None or total_excl_tax is None:
  61. calc = OrderTotalCalculator()
  62. total_incl_tax = calc.order_total_incl_tax(basket, shipping_method)
  63. total_excl_tax = calc.order_total_excl_tax(basket, shipping_method)
  64. order = OrderCreator().place_order(
  65. order_number=number,
  66. user=user,
  67. basket=basket,
  68. shipping_address=shipping_address,
  69. shipping_method=shipping_method,
  70. billing_address=billing_address,
  71. total_incl_tax=total_incl_tax,
  72. total_excl_tax=total_excl_tax,
  73. **kwargs)
  74. basket.set_as_submitted()
  75. return order
  76. def create_offer():
  77. """
  78. Helper method for creating an offer
  79. """
  80. range = Range.objects.create(name="All products range", includes_all_products=True)
  81. condition = Condition.objects.create(range=range,
  82. type=Condition.COUNT,
  83. value=1)
  84. benefit = Benefit.objects.create(range=range,
  85. type=Benefit.PERCENTAGE,
  86. value=20)
  87. offer = ConditionalOffer.objects.create(
  88. name='Dummy offer',
  89. offer_type='Site',
  90. condition=condition,
  91. benefit=benefit
  92. )
  93. return offer
  94. def create_voucher():
  95. """
  96. Helper method for creating a voucher
  97. """
  98. voucher = Voucher.objects.create(
  99. name="Test voucher",
  100. code="test",
  101. start_date=datetime.date.today(),
  102. end_date=datetime.date.today() + datetime.timedelta(days=12)
  103. )
  104. voucher.offers.add(create_offer())
  105. return voucher