Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

helpers.py 3.8KB

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