瀏覽代碼

Split oscar.test.newfactories in multiple modules

Create a factory module per app and move them under the new
oscar.test.factories module.
master
Michael van Tellingen 10 年之前
父節點
當前提交
6fad63a4d0

src/oscar/test/factories.py → src/oscar/test/factories/__init__.py 查看文件

@@ -6,11 +6,20 @@ import datetime
6 6
 from django.conf import settings
7 7
 from django.utils import timezone
8 8
 
9
-from oscar.core.loading import get_model
10
-from oscar.apps.partner import strategy, availability, prices
11
-from oscar.core.loading import get_class
12 9
 from oscar.apps.offer import models
13
-from oscar.test.newfactories import *  # noqa
10
+from oscar.apps.partner import strategy, availability, prices
11
+from oscar.core.loading import get_class, get_model
12
+from oscar.test.factories.address import *  # noqa
13
+from oscar.test.factories.basket import *  # noqa
14
+from oscar.test.factories.catalogue import *  # noqa
15
+from oscar.test.factories.contrib import *  # noqa
16
+from oscar.test.factories.customer import *  # noqa
17
+from oscar.test.factories.offer import *  # noqa
18
+from oscar.test.factories.order import *  # noqa
19
+from oscar.test.factories.partner import *  # noqa
20
+from oscar.test.factories.payment import *  # noqa
21
+from oscar.test.factories.voucher import *  # noqa
22
+
14 23
 
15 24
 Basket = get_model('basket', 'Basket')
16 25
 Free = get_class('shipping.methods', 'Free')

+ 33
- 0
src/oscar/test/factories/address.py 查看文件

@@ -0,0 +1,33 @@
1
+import factory
2
+
3
+from oscar.core.phonenumber import PhoneNumber
4
+from oscar.core.loading import get_model
5
+
6
+__all__ = [
7
+    'CountryFactory', 'UserAddressFactory',
8
+]
9
+
10
+
11
+class CountryFactory(factory.DjangoModelFactory):
12
+    iso_3166_1_a2 = 'GB'
13
+    name = "UNITED KINGDOM"
14
+
15
+    class Meta:
16
+        model = get_model('address', 'Country')
17
+        django_get_or_create = ('iso_3166_1_a2',)
18
+
19
+
20
+class UserAddressFactory(factory.DjangoModelFactory):
21
+    title = "Dr"
22
+    first_name = "Barry"
23
+    last_name = 'Barrington'
24
+    line1 = "1 King Road"
25
+    line4 = "London"
26
+    postcode = "SW1 9RE"
27
+    phone_number = PhoneNumber.from_string('+49 351 3296645')
28
+    country = factory.SubFactory(CountryFactory)
29
+    user = factory.SubFactory(
30
+        'oscar.test.factories.UserFactory')
31
+
32
+    class Meta:
33
+        model = get_model('address', 'UserAddress')

+ 28
- 0
src/oscar/test/factories/basket.py 查看文件

@@ -0,0 +1,28 @@
1
+import factory
2
+
3
+from oscar.core.loading import get_model, get_class
4
+
5
+Selector = get_class('partner.strategy', 'Selector')
6
+
7
+
8
+__all__ = [
9
+    'BasketFactory', 'BasketLineAttributeFactory'
10
+]
11
+
12
+
13
+class BasketFactory(factory.DjangoModelFactory):
14
+
15
+    @factory.post_generation
16
+    def set_strategy(self, create, extracted, **kwargs):
17
+        # Load default strategy (without a user/request)
18
+        self.strategy = Selector().strategy()
19
+
20
+    class Meta:
21
+        model = get_model('basket', 'Basket')
22
+
23
+
24
+class BasketLineAttributeFactory(factory.DjangoModelFactory):
25
+    option = factory.SubFactory('oscar.test.factories.OptionFactory')
26
+
27
+    class Meta:
28
+        model = get_model('basket', 'LineAttribute')

+ 106
- 0
src/oscar/test/factories/catalogue.py 查看文件

@@ -0,0 +1,106 @@
1
+# coding=utf-8
2
+import factory
3
+
4
+from oscar.core.loading import get_model
5
+
6
+__all__ = [
7
+    'ProductClassFactory', 'ProductFactory',
8
+    'CategoryFactory', 'ProductCategoryFactory',
9
+    'ProductAttributeFactory', 'AttributeOptionGroupFactory',
10
+    'OptionFactory', 'AttributeOptionFactory',
11
+    'ProductAttributeValueFactory', 'ProductReviewFactory',
12
+]
13
+
14
+
15
+class ProductClassFactory(factory.DjangoModelFactory):
16
+    name = "Books"
17
+    requires_shipping = True
18
+    track_stock = True
19
+
20
+    class Meta:
21
+        model = get_model('catalogue', 'ProductClass')
22
+
23
+
24
+class ProductFactory(factory.DjangoModelFactory):
25
+    class Meta:
26
+        model = get_model('catalogue', 'Product')
27
+
28
+    structure = Meta.model.STANDALONE
29
+    upc = factory.Sequence(lambda n: '978080213020%d' % n)
30
+    title = "A confederacy of dunces"
31
+    product_class = factory.SubFactory(ProductClassFactory)
32
+
33
+    stockrecords = factory.RelatedFactory(
34
+        'oscar.test.factories.StockRecordFactory', 'product')
35
+    categories = factory.RelatedFactory(
36
+        'oscar.test.factories.ProductCategoryFactory', 'product')
37
+
38
+
39
+class CategoryFactory(factory.DjangoModelFactory):
40
+    name = factory.Sequence(lambda n: 'Category %d' % n)
41
+
42
+    # Very naive handling of treebeard node fields. Works though!
43
+    depth = 1
44
+    path = factory.Sequence(lambda n: '%04d' % n)
45
+
46
+    class Meta:
47
+        model = get_model('catalogue', 'Category')
48
+
49
+
50
+class ProductCategoryFactory(factory.DjangoModelFactory):
51
+    category = factory.SubFactory(CategoryFactory)
52
+
53
+    class Meta:
54
+        model = get_model('catalogue', 'ProductCategory')
55
+
56
+
57
+class ProductAttributeFactory(factory.DjangoModelFactory):
58
+    code = name = 'weight'
59
+    product_class = factory.SubFactory(ProductClassFactory)
60
+    type = "float"
61
+
62
+    class Meta:
63
+        model = get_model('catalogue', 'ProductAttribute')
64
+
65
+
66
+class OptionFactory(factory.DjangoModelFactory):
67
+    class Meta:
68
+        model = get_model('catalogue', 'Option')
69
+
70
+    name = 'example option'
71
+    code = 'example'
72
+    type = Meta.model.OPTIONAL
73
+
74
+
75
+class AttributeOptionFactory(factory.DjangoModelFactory):
76
+    # Ideally we'd get_or_create a AttributeOptionGroup here, but I'm not
77
+    # aware of how to not create a unique option group for each call of the
78
+    # factory
79
+
80
+    option = factory.Sequence(lambda n: 'Option %d' % n)
81
+
82
+    class Meta:
83
+        model = get_model('catalogue', 'AttributeOption')
84
+
85
+
86
+class AttributeOptionGroupFactory(factory.DjangoModelFactory):
87
+    name = u'Grüppchen'
88
+
89
+    class Meta:
90
+        model = get_model('catalogue', 'AttributeOptionGroup')
91
+
92
+
93
+class ProductAttributeValueFactory(factory.DjangoModelFactory):
94
+    attribute = factory.SubFactory(ProductAttributeFactory)
95
+    product = factory.SubFactory(ProductFactory)
96
+
97
+    class Meta:
98
+        model = get_model('catalogue', 'ProductAttributeValue')
99
+
100
+
101
+class ProductReviewFactory(factory.DjangoModelFactory):
102
+    score = 5
103
+    product = factory.SubFactory(ProductFactory, stockrecords=[])
104
+
105
+    class Meta:
106
+        model = get_model('reviews', 'ProductReview')

+ 14
- 0
src/oscar/test/factories/contrib.py 查看文件

@@ -0,0 +1,14 @@
1
+import factory
2
+
3
+from django.contrib.auth import models as auth_models
4
+
5
+__all__ = ['PermissionFactory']
6
+
7
+
8
+class PermissionFactory(factory.DjangoModelFactory):
9
+    name = 'Dummy permission'
10
+    codename = 'dummy'
11
+
12
+    class Meta:
13
+        model = auth_models.Permission
14
+        django_get_or_create = ('content_type', 'codename')

+ 19
- 0
src/oscar/test/factories/customer.py 查看文件

@@ -0,0 +1,19 @@
1
+import factory
2
+
3
+from oscar.core.compat import get_user_model
4
+
5
+__all__ = ['UserFactory']
6
+
7
+
8
+class UserFactory(factory.DjangoModelFactory):
9
+    username = factory.Sequence(lambda n: 'the_j_meister nummer %d' % n)
10
+    email = factory.Sequence(lambda n: 'example_%s@example.com' % n)
11
+    first_name = 'joseph'
12
+    last_name = 'winterbottom'
13
+    password = factory.PostGenerationMethodCall('set_password', 'skelebrain')
14
+    is_active = True
15
+    is_superuser = False
16
+    is_staff = False
17
+
18
+    class Meta:
19
+        model = get_user_model()

+ 54
- 0
src/oscar/test/factories/offer.py 查看文件

@@ -0,0 +1,54 @@
1
+import factory
2
+
3
+from oscar.core.loading import get_model
4
+
5
+
6
+__all__ = [
7
+    'RangeFactory', 'ConditionFactory', 'BenefitFactory',
8
+    'ConditionalOfferFactory',
9
+]
10
+
11
+
12
+class RangeFactory(factory.DjangoModelFactory):
13
+    name = factory.Sequence(lambda n: 'Range %d' % n)
14
+    slug = factory.Sequence(lambda n: 'range-%d' % n)
15
+
16
+    class Meta:
17
+        model = get_model('offer', 'Range')
18
+
19
+    @factory.post_generation
20
+    def products(self, create, extracted, **kwargs):
21
+        if not create or not extracted:
22
+            return
23
+
24
+        RangeProduct = get_model('offer', 'RangeProduct')
25
+
26
+        for product in extracted:
27
+            RangeProduct.objects.create(product=product, range=self)
28
+
29
+
30
+class BenefitFactory(factory.DjangoModelFactory):
31
+    type = get_model('offer', 'Benefit').PERCENTAGE
32
+    value = 10
33
+    max_affected_items = None
34
+    range = factory.SubFactory(RangeFactory)
35
+
36
+    class Meta:
37
+        model = get_model('offer', 'Benefit')
38
+
39
+
40
+class ConditionFactory(factory.DjangoModelFactory):
41
+    type = get_model('offer', 'Condition').COUNT
42
+    value = 10
43
+
44
+    class Meta:
45
+        model = get_model('offer', 'Condition')
46
+
47
+
48
+class ConditionalOfferFactory(factory.DjangoModelFactory):
49
+    name = 'Test offer'
50
+    benefit = factory.SubFactory(BenefitFactory)
51
+    condition = factory.SubFactory(ConditionFactory)
52
+
53
+    class Meta:
54
+        model = get_model('offer', 'ConditionalOffer')

+ 142
- 0
src/oscar/test/factories/order.py 查看文件

@@ -0,0 +1,142 @@
1
+from decimal import Decimal as D
2
+
3
+import factory
4
+from django.conf import settings
5
+
6
+from oscar.core.loading import get_model
7
+from oscar.core.utils import slugify
8
+from oscar.test.factories.utils import tax_add, tax_subtract
9
+
10
+
11
+__all__ = [
12
+    'BillingAddressFactory', 'ShippingAddressFactory', 'OrderDiscountFactory',
13
+    'OrderFactory', 'OrderLineFactory', 'ShippingEventTypeFactory',
14
+    'ShippingEventFactory',
15
+]
16
+
17
+
18
+class BillingAddressFactory(factory.DjangoModelFactory):
19
+    country = factory.SubFactory('oscar.test.factories.CountryFactory')
20
+
21
+    first_name = 'John'
22
+    last_name = 'Doe'
23
+    line1 = 'Streetname'
24
+    line2 = '1a'
25
+    line4 = 'City'
26
+    postcode = '1000AA'
27
+
28
+    class Meta:
29
+        model = get_model('order', 'BillingAddress')
30
+
31
+
32
+class ShippingAddressFactory(factory.DjangoModelFactory):
33
+    country = factory.SubFactory('oscar.test.factories.CountryFactory')
34
+
35
+    first_name = 'John'
36
+    last_name = 'Doe'
37
+    line1 = 'Streetname'
38
+    line2 = '1a'
39
+    line4 = 'City'
40
+    postcode = '1000 AA'
41
+    phone_number = '06-12345678'
42
+
43
+    class Meta:
44
+        model = get_model('order', 'ShippingAddress')
45
+
46
+
47
+class OrderDiscountFactory(factory.DjangoModelFactory):
48
+
49
+    class Meta:
50
+        model = get_model('order', 'OrderDiscount')
51
+
52
+
53
+class OrderFactory(factory.DjangoModelFactory):
54
+    class Meta:
55
+        model = get_model('order', 'Order')
56
+        exclude = ('basket',)
57
+
58
+    if hasattr(settings, 'OSCAR_INITIAL_ORDER_STATUS'):
59
+        status = settings.OSCAR_INITIAL_ORDER_STATUS
60
+
61
+    site_id = settings.SITE_ID
62
+    number = factory.LazyAttribute(lambda o: '%d' % (100000 + o.basket.pk))
63
+    basket = factory.SubFactory(
64
+        'oscar.test.factories.BasketFactory')
65
+
66
+    shipping_code = 'delivery'
67
+    shipping_incl_tax = D('4.95')
68
+    shipping_excl_tax = factory.LazyAttribute(
69
+        lambda o: tax_subtract(o.shipping_incl_tax))
70
+
71
+    total_incl_tax = factory.LazyAttribute(lambda o: o.basket.total_incl_tax)
72
+    total_excl_tax = factory.LazyAttribute(lambda o: o.basket.total_excl_tax)
73
+
74
+    guest_email = factory.LazyAttribute(
75
+        lambda o: (
76
+            '%s.%s@example.com' % (
77
+                o.billing_address.first_name[0],
78
+                o.billing_address.last_name
79
+            )).lower())
80
+
81
+    shipping_address = factory.SubFactory(ShippingAddressFactory)
82
+    billing_address = factory.SubFactory(BillingAddressFactory)
83
+
84
+    @classmethod
85
+    def _create(cls, target_class, *args, **kwargs):
86
+        date_placed = kwargs.pop('date_placed', None)
87
+        instance = super(OrderFactory, cls)._create(
88
+            target_class, *args, **kwargs)
89
+
90
+        if date_placed:
91
+            instance.date_placed = date_placed
92
+        return instance
93
+
94
+
95
+class OrderLineFactory(factory.DjangoModelFactory):
96
+    order = factory.SubFactory(OrderFactory)
97
+    product = factory.SubFactory(
98
+        'oscar.test.factories.ProductFactory')
99
+    partner_sku = factory.LazyAttribute(lambda l: l.product.upc)
100
+    stockrecord = factory.LazyAttribute(
101
+        lambda l: l.product.stockrecords.first())
102
+    quantity = 1
103
+
104
+    line_price_incl_tax = factory.LazyAttribute(
105
+        lambda obj: tax_add(obj.stockrecord.price_excl_tax) * obj.quantity)
106
+    line_price_excl_tax = factory.LazyAttribute(
107
+        lambda obj: obj.stockrecord.price_excl_tax * obj.quantity)
108
+
109
+    line_price_before_discounts_incl_tax = (
110
+        factory.SelfAttribute('.line_price_incl_tax'))
111
+    line_price_before_discounts_excl_tax = (
112
+        factory.SelfAttribute('.line_price_excl_tax'))
113
+
114
+    unit_price_incl_tax = factory.LazyAttribute(
115
+        lambda obj: tax_add(obj.stockrecord.price_excl_tax))
116
+    unit_cost_price = factory.LazyAttribute(
117
+        lambda obj: obj.stockrecord.cost_price)
118
+    unit_price_excl_tax = factory.LazyAttribute(
119
+        lambda obj: obj.stockrecord.price_excl_tax)
120
+    unit_retail_price = factory.LazyAttribute(
121
+        lambda obj: obj.stockrecord.price_retail)
122
+
123
+    class Meta:
124
+        model = get_model('order', 'Line')
125
+
126
+
127
+class ShippingEventTypeFactory(factory.DjangoModelFactory):
128
+    name = 'Test event'
129
+    code = factory.LazyAttribute(lambda o: slugify(o.name).replace('-', '_'))
130
+
131
+    class Meta:
132
+        model = get_model('order', 'ShippingEventType')
133
+        django_get_or_create = ('code', )
134
+
135
+
136
+class ShippingEventFactory(factory.DjangoModelFactory):
137
+
138
+    order = factory.SubFactory(OrderFactory)
139
+    event_type = factory.SubFactory(ShippingEventTypeFactory)
140
+
141
+    class Meta:
142
+        model = get_model('order', 'ShippingEvent')

+ 37
- 0
src/oscar/test/factories/partner.py 查看文件

@@ -0,0 +1,37 @@
1
+from decimal import Decimal as D
2
+
3
+import factory
4
+
5
+from oscar.core.loading import get_model
6
+
7
+
8
+__all__ = [
9
+    'PartnerFactory', 'StockRecordFactory',
10
+]
11
+
12
+
13
+class PartnerFactory(factory.DjangoModelFactory):
14
+    name = "Gardners"
15
+
16
+    class Meta:
17
+        model = get_model('partner', 'Partner')
18
+
19
+    @factory.post_generation
20
+    def users(self, create, extracted, **kwargs):
21
+        if not create:
22
+            return
23
+
24
+        if extracted:
25
+            for user in extracted:
26
+                self.users.add(user)
27
+
28
+
29
+class StockRecordFactory(factory.DjangoModelFactory):
30
+    partner = factory.SubFactory(PartnerFactory)
31
+    partner_sku = factory.Sequence(lambda n: 'unit%d' % n)
32
+    price_currency = "GBP"
33
+    price_excl_tax = D('9.99')
34
+    num_in_stock = 100
35
+
36
+    class Meta:
37
+        model = get_model('partner', 'StockRecord')

+ 45
- 0
src/oscar/test/factories/payment.py 查看文件

@@ -0,0 +1,45 @@
1
+import factory
2
+
3
+from oscar.core.loading import get_model
4
+
5
+__all__ = [
6
+    'SourceTypeFactory', 'SourceFactory', 'TransactionFactory',
7
+]
8
+
9
+
10
+class SourceTypeFactory(factory.DjangoModelFactory):
11
+    name = 'Creditcard'
12
+    code = 'creditcard'
13
+
14
+    class Meta:
15
+        model = get_model('payment', 'SourceType')
16
+
17
+
18
+class SourceFactory(factory.DjangoModelFactory):
19
+    order = factory.SubFactory(
20
+        'oscar.test.factories.OrderFactory')
21
+    source_type = factory.SubFactory(SourceTypeFactory)
22
+
23
+    class Meta:
24
+        model = get_model('payment', 'Source')
25
+
26
+
27
+class TransactionFactory(factory.DjangoModelFactory):
28
+    amount = factory.LazyAttribute(lambda obj: obj.source.order.total_incl_tax)
29
+    reference = factory.LazyAttribute(lambda obj: obj.source.order.number)
30
+    source = factory.SubFactory(SourceFactory)
31
+    status = 'authorised'
32
+
33
+    class Meta:
34
+        model = get_model('payment', 'Transaction')
35
+
36
+    @classmethod
37
+    def _create(cls, target_class, *args, **kwargs):
38
+        date_created = kwargs.pop('date_created', None)
39
+        instance = super(TransactionFactory, cls)._create(
40
+            target_class, *args, **kwargs)
41
+
42
+        if date_created:
43
+            instance.date_created = date_created
44
+            instance.save()
45
+        return instance

+ 20
- 0
src/oscar/test/factories/utils.py 查看文件

@@ -0,0 +1,20 @@
1
+from decimal import Decimal as D
2
+from decimal import ROUND_HALF_UP
3
+
4
+
5
+def tax_subtract(price, tax_percentage=21):
6
+    """Subtract the given `tax_percentage` from the given `price`."""
7
+    if price is None:
8
+        return None
9
+
10
+    result = price / ((100 + tax_percentage) / D(100))
11
+    return result.quantize(D('0.01'), ROUND_HALF_UP)
12
+
13
+
14
+def tax_add(price, tax_percentage=21):
15
+    """Add the given `tax_percentage` to the given `price`."""
16
+    if price is None:
17
+        return None
18
+
19
+    result = price * ((100 + tax_percentage) / D(100))
20
+    return result.quantize(D('0.01'), ROUND_HALF_UP)

+ 20
- 0
src/oscar/test/factories/voucher.py 查看文件

@@ -0,0 +1,20 @@
1
+import datetime
2
+
3
+import factory
4
+from django.utils.timezone import now
5
+
6
+from oscar.core.loading import get_model
7
+
8
+
9
+__all__ = ['VoucherFactory']
10
+
11
+
12
+class VoucherFactory(factory.DjangoModelFactory):
13
+    name = "My voucher"
14
+    code = "MYVOUCHER"
15
+
16
+    start_datetime = now() - datetime.timedelta(days=1)
17
+    end_datetime = now() + datetime.timedelta(days=10)
18
+
19
+    class Meta:
20
+        model = get_model('voucher', 'Voucher')

+ 21
- 455
src/oscar/test/newfactories.py 查看文件

@@ -1,455 +1,21 @@
1
-# coding=utf-8
2
-"""
3
-Factories using factory boy.
4
-
5
-Using a silly module name as I don't want to mix the old and new
6
-implementations of factories, but I do want to allow importing both from the
7
-same place.
8
-
9
-In 2020, when all tests use the new factory-boy factories, we can rename this
10
-module to factories.py and drop the old ones.
11
-"""
12
-import datetime
13
-from decimal import Decimal as D
14
-from decimal import ROUND_HALF_UP
15
-
16
-import factory
17
-from django.conf import settings
18
-from django.contrib.auth import models as auth_models
19
-from django.utils.timezone import now
20
-
21
-from oscar.core.loading import get_model, get_class
22
-from oscar.core.compat import get_user_model
23
-from oscar.core.phonenumber import PhoneNumber
24
-from oscar.core.utils import slugify
25
-
26
-__all__ = ["UserFactory", "CountryFactory", "UserAddressFactory",
27
-           "BasketFactory", "VoucherFactory", "ProductFactory",
28
-           "ProductClassFactory", "StockRecordFactory",
29
-           "ProductAttributeFactory", "ProductAttributeValueFactory",
30
-           "AttributeOptionGroupFactory",
31
-           "AttributeOptionFactory", "PartnerFactory",
32
-           "ProductCategoryFactory", "CategoryFactory", "RangeFactory",
33
-           "OptionFactory", "BasketLineAttributeFactory",
34
-           "PermissionFactory", "ShippingAddressFactory",
35
-           "ProductReviewFactory", "SourceTypeFactory"]
36
-
37
-Selector = get_class('partner.strategy', 'Selector')
38
-
39
-
40
-class UserFactory(factory.DjangoModelFactory):
41
-    username = factory.Sequence(lambda n: 'the_j_meister nummer %d' % n)
42
-    email = factory.Sequence(lambda n: 'example_%s@example.com' % n)
43
-    first_name = 'joseph'
44
-    last_name = 'winterbottom'
45
-    password = factory.PostGenerationMethodCall('set_password', 'skelebrain')
46
-    is_active = True
47
-    is_superuser = False
48
-    is_staff = False
49
-
50
-    class Meta:
51
-        model = get_user_model()
52
-
53
-
54
-class CountryFactory(factory.DjangoModelFactory):
55
-    iso_3166_1_a2 = 'GB'
56
-    name = "UNITED KINGDOM"
57
-
58
-    class Meta:
59
-        model = get_model('address', 'Country')
60
-        django_get_or_create = ('iso_3166_1_a2',)
61
-
62
-
63
-class UserAddressFactory(factory.DjangoModelFactory):
64
-    title = "Dr"
65
-    first_name = "Barry"
66
-    last_name = 'Barrington'
67
-    line1 = "1 King Road"
68
-    line4 = "London"
69
-    postcode = "SW1 9RE"
70
-    phone_number = PhoneNumber.from_string('+49 351 3296645')
71
-    country = factory.SubFactory(CountryFactory)
72
-    user = factory.SubFactory(UserFactory)
73
-
74
-    class Meta:
75
-        model = get_model('address', 'UserAddress')
76
-
77
-
78
-class BasketFactory(factory.DjangoModelFactory):
79
-    @factory.post_generation
80
-    def set_strategy(self, create, extracted, **kwargs):
81
-        # Load default strategy (without a user/request)
82
-        self.strategy = Selector().strategy()
83
-
84
-    class Meta:
85
-        model = get_model('basket', 'Basket')
86
-
87
-
88
-class OptionFactory(factory.DjangoModelFactory):
89
-    class Meta:
90
-        model = get_model('catalogue', 'Option')
91
-
92
-    name = 'example option'
93
-    code = 'example'
94
-    type = Meta.model.OPTIONAL
95
-
96
-
97
-class BasketLineAttributeFactory(factory.DjangoModelFactory):
98
-    option = factory.SubFactory(OptionFactory)
99
-
100
-    class Meta:
101
-        model = get_model('basket', 'LineAttribute')
102
-
103
-
104
-class VoucherFactory(factory.DjangoModelFactory):
105
-    name = "My voucher"
106
-    code = "MYVOUCHER"
107
-
108
-    start_datetime = now() - datetime.timedelta(days=1)
109
-    end_datetime = now() + datetime.timedelta(days=10)
110
-
111
-    class Meta:
112
-        model = get_model('voucher', 'Voucher')
113
-
114
-
115
-class PartnerFactory(factory.DjangoModelFactory):
116
-    name = "Gardners"
117
-
118
-    class Meta:
119
-        model = get_model('partner', 'Partner')
120
-
121
-    @factory.post_generation
122
-    def users(self, create, extracted, **kwargs):
123
-        if not create:
124
-            return
125
-
126
-        if extracted:
127
-            for user in extracted:
128
-                self.users.add(user)
129
-
130
-
131
-class StockRecordFactory(factory.DjangoModelFactory):
132
-    partner = factory.SubFactory(PartnerFactory)
133
-    partner_sku = factory.Sequence(lambda n: 'unit%d' % n)
134
-    price_currency = "GBP"
135
-    price_excl_tax = D('9.99')
136
-    num_in_stock = 100
137
-
138
-    class Meta:
139
-        model = get_model('partner', 'StockRecord')
140
-
141
-
142
-class ProductClassFactory(factory.DjangoModelFactory):
143
-    name = "Books"
144
-    requires_shipping = True
145
-    track_stock = True
146
-
147
-    class Meta:
148
-        model = get_model('catalogue', 'ProductClass')
149
-
150
-
151
-class CategoryFactory(factory.DjangoModelFactory):
152
-    name = factory.Sequence(lambda n: 'Category %d' % n)
153
-
154
-    # Very naive handling of treebeard node fields. Works though!
155
-    depth = 1
156
-    path = factory.Sequence(lambda n: '%04d' % n)
157
-
158
-    class Meta:
159
-        model = get_model('catalogue', 'Category')
160
-
161
-
162
-class ProductCategoryFactory(factory.DjangoModelFactory):
163
-    category = factory.SubFactory(CategoryFactory)
164
-
165
-    class Meta:
166
-        model = get_model('catalogue', 'ProductCategory')
167
-
168
-
169
-class ProductFactory(factory.DjangoModelFactory):
170
-    class Meta:
171
-        model = get_model('catalogue', 'Product')
172
-
173
-    structure = Meta.model.STANDALONE
174
-    upc = factory.Sequence(lambda n: '978080213020%d' % n)
175
-    title = "A confederacy of dunces"
176
-    product_class = factory.SubFactory(ProductClassFactory)
177
-
178
-    stockrecords = factory.RelatedFactory(StockRecordFactory, 'product')
179
-    categories = factory.RelatedFactory(ProductCategoryFactory, 'product')
180
-
181
-
182
-class ProductAttributeFactory(factory.DjangoModelFactory):
183
-    code = name = 'weight'
184
-    product_class = factory.SubFactory(ProductClassFactory)
185
-    type = "float"
186
-
187
-    class Meta:
188
-        model = get_model('catalogue', 'ProductAttribute')
189
-
190
-
191
-class AttributeOptionGroupFactory(factory.DjangoModelFactory):
192
-    name = u'Grüppchen'
193
-
194
-    class Meta:
195
-        model = get_model('catalogue', 'AttributeOptionGroup')
196
-
197
-
198
-class AttributeOptionFactory(factory.DjangoModelFactory):
199
-    # Ideally we'd get_or_create a AttributeOptionGroup here, but I'm not
200
-    # aware of how to not create a unique option group for each call of the
201
-    # factory
202
-
203
-    option = factory.Sequence(lambda n: 'Option %d' % n)
204
-
205
-    class Meta:
206
-        model = get_model('catalogue', 'AttributeOption')
207
-
208
-
209
-class ProductAttributeValueFactory(factory.DjangoModelFactory):
210
-    attribute = factory.SubFactory(ProductAttributeFactory)
211
-    product = factory.SubFactory(ProductFactory)
212
-
213
-    class Meta:
214
-        model = get_model('catalogue', 'ProductAttributeValue')
215
-
216
-
217
-class ProductReviewFactory(factory.DjangoModelFactory):
218
-    score = 5
219
-    product = factory.SubFactory(ProductFactory, stockrecords=[])
220
-
221
-    class Meta:
222
-        model = get_model('reviews', 'ProductReview')
223
-
224
-
225
-class RangeFactory(factory.DjangoModelFactory):
226
-    name = factory.Sequence(lambda n: 'Range %d' % n)
227
-    slug = factory.Sequence(lambda n: 'range-%d' % n)
228
-
229
-    class Meta:
230
-        model = get_model('offer', 'Range')
231
-
232
-    @factory.post_generation
233
-    def products(self, create, extracted, **kwargs):
234
-        if not create or not extracted:
235
-            return
236
-
237
-        RangeProduct = get_model('offer', 'RangeProduct')
238
-
239
-        for product in extracted:
240
-            RangeProduct.objects.create(product=product, range=self)
241
-
242
-
243
-class ShippingAddressFactory(factory.DjangoModelFactory):
244
-    first_name = 'John'
245
-    last_name = 'Doe'
246
-    line1 = 'Streetname'
247
-    line2 = '1a'
248
-    line4 = 'City'
249
-    postcode = '1000 AA'
250
-    phone_number = '06-12345678'
251
-    country = factory.SubFactory(CountryFactory)
252
-
253
-    class Meta:
254
-        model = get_model('order', 'ShippingAddress')
255
-
256
-
257
-class BillingAddressFactory(factory.DjangoModelFactory):
258
-    country = factory.SubFactory(CountryFactory)
259
-
260
-    first_name = 'John'
261
-    last_name = 'Doe'
262
-    line1 = 'Streetname'
263
-    line2 = '1a'
264
-    line4 = 'City'
265
-    postcode = '1000AA'
266
-
267
-    class Meta:
268
-        model = get_model('order', 'BillingAddress')
269
-
270
-
271
-class OrderFactory(factory.DjangoModelFactory):
272
-    class Meta:
273
-        model = get_model('order', 'Order')
274
-        exclude = ('basket',)
275
-
276
-    if hasattr(settings, 'OSCAR_INITIAL_ORDER_STATUS'):
277
-        status = settings.OSCAR_INITIAL_ORDER_STATUS
278
-
279
-    site_id = settings.SITE_ID
280
-    number = factory.LazyAttribute(lambda o: '%d' % (100000 + o.basket.pk))
281
-    basket = factory.SubFactory(BasketFactory)
282
-
283
-    shipping_code = 'delivery'
284
-    shipping_incl_tax = D('4.95')
285
-    shipping_excl_tax = factory.LazyAttribute(
286
-        lambda o: tax_subtract(o.shipping_incl_tax))
287
-
288
-    total_incl_tax = factory.LazyAttribute(lambda o: o.basket.total_incl_tax)
289
-    total_excl_tax = factory.LazyAttribute(lambda o: o.basket.total_excl_tax)
290
-
291
-    guest_email = factory.LazyAttribute(
292
-        lambda o: (
293
-            '%s.%s@example.com' % (
294
-                o.billing_address.first_name[0],
295
-                o.billing_address.last_name
296
-            )).lower())
297
-
298
-    shipping_address = factory.SubFactory(ShippingAddressFactory)
299
-    billing_address = factory.SubFactory(BillingAddressFactory)
300
-
301
-    @classmethod
302
-    def _create(cls, target_class, *args, **kwargs):
303
-        date_placed = kwargs.pop('date_placed', None)
304
-        instance = super(OrderFactory, cls)._create(
305
-            target_class, *args, **kwargs)
306
-
307
-        if date_placed:
308
-            instance.date_placed = date_placed
309
-        return instance
310
-
311
-
312
-class OrderLineFactory(factory.DjangoModelFactory):
313
-    order = factory.SubFactory(OrderFactory)
314
-    product = factory.SubFactory(ProductFactory)
315
-    partner_sku = factory.LazyAttribute(lambda l: l.product.upc)
316
-    stockrecord = factory.LazyAttribute(
317
-        lambda l: l.product.stockrecords.first())
318
-    quantity = 1
319
-
320
-    line_price_incl_tax = factory.LazyAttribute(
321
-        lambda obj: tax_add(obj.stockrecord.price_excl_tax) * obj.quantity)
322
-    line_price_excl_tax = factory.LazyAttribute(
323
-        lambda obj: obj.stockrecord.price_excl_tax * obj.quantity)
324
-
325
-    line_price_before_discounts_incl_tax = (
326
-        factory.SelfAttribute('.line_price_incl_tax'))
327
-    line_price_before_discounts_excl_tax = (
328
-        factory.SelfAttribute('.line_price_excl_tax'))
329
-
330
-    unit_price_incl_tax = factory.LazyAttribute(
331
-        lambda obj: tax_add(obj.stockrecord.price_excl_tax))
332
-    unit_cost_price = factory.LazyAttribute(
333
-        lambda obj: obj.stockrecord.cost_price)
334
-    unit_price_excl_tax = factory.LazyAttribute(
335
-        lambda obj: obj.stockrecord.price_excl_tax)
336
-    unit_retail_price = factory.LazyAttribute(
337
-        lambda obj: obj.stockrecord.price_retail)
338
-
339
-    class Meta:
340
-        model = get_model('order', 'Line')
341
-
342
-
343
-class ShippingEventTypeFactory(factory.DjangoModelFactory):
344
-    name = 'Test event'
345
-    code = factory.LazyAttribute(lambda o: slugify(o.name).replace('-', '_'))
346
-
347
-    class Meta:
348
-        model = get_model('order', 'ShippingEventType')
349
-        django_get_or_create = ('code', )
350
-
351
-
352
-class ShippingEventFactory(factory.DjangoModelFactory):
353
-
354
-    order = factory.SubFactory(OrderFactory)
355
-    event_type = factory.SubFactory(ShippingEventTypeFactory)
356
-
357
-    class Meta:
358
-        model = get_model('order', 'ShippingEvent')
359
-
360
-
361
-def tax_subtract(price, tax_percentage=21):
362
-    """Subtract the given `tax_percentage` from the given `price`."""
363
-    if price is None:
364
-        return None
365
-
366
-    result = price / ((100 + tax_percentage) / D(100))
367
-    return result.quantize(D('0.01'), ROUND_HALF_UP)
368
-
369
-
370
-def tax_add(price, tax_percentage=21):
371
-    """Add the given `tax_percentage` to the given `price`."""
372
-    if price is None:
373
-        return None
374
-
375
-    result = price * ((100 + tax_percentage) / D(100))
376
-    return result.quantize(D('0.01'), ROUND_HALF_UP)
377
-
378
-
379
-class PermissionFactory(factory.DjangoModelFactory):
380
-    name = 'Dummy permission'
381
-    codename = 'dummy'
382
-
383
-    class Meta:
384
-        model = auth_models.Permission
385
-        django_get_or_create = ('content_type', 'codename')
386
-
387
-
388
-class SourceTypeFactory(factory.DjangoModelFactory):
389
-    name = 'Creditcard'
390
-    code = 'creditcard'
391
-
392
-    class Meta:
393
-        model = get_model('payment', 'SourceType')
394
-
395
-
396
-class SourceFactory(factory.DjangoModelFactory):
397
-    order = factory.SubFactory(OrderFactory)
398
-    source_type = factory.SubFactory(SourceTypeFactory)
399
-
400
-    class Meta:
401
-        model = get_model('payment', 'Source')
402
-
403
-
404
-class TransactionFactory(factory.DjangoModelFactory):
405
-    amount = factory.LazyAttribute(lambda obj: obj.source.order.total_incl_tax)
406
-    reference = factory.LazyAttribute(lambda obj: obj.source.order.number)
407
-    source = factory.SubFactory(SourceFactory)
408
-    status = 'authorised'
409
-
410
-    class Meta:
411
-        model = get_model('payment', 'Transaction')
412
-
413
-    @classmethod
414
-    def _create(cls, target_class, *args, **kwargs):
415
-        date_created = kwargs.pop('date_created', None)
416
-        instance = super(TransactionFactory, cls)._create(
417
-            target_class, *args, **kwargs)
418
-
419
-        if date_created:
420
-            instance.date_created = date_created
421
-            instance.save()
422
-        return instance
423
-
424
-
425
-class ConditionFactory(factory.DjangoModelFactory):
426
-    type = get_model('offer', 'Condition').COUNT
427
-    value = 10
428
-
429
-    class Meta:
430
-        model = get_model('offer', 'Condition')
431
-
432
-
433
-class BenefitFactory(factory.DjangoModelFactory):
434
-    type = get_model('offer', 'Benefit').PERCENTAGE
435
-    value = 10
436
-    max_affected_items = None
437
-    range = factory.SubFactory(RangeFactory)
438
-
439
-    class Meta:
440
-        model = get_model('offer', 'Benefit')
441
-
442
-
443
-class ConditionalOfferFactory(factory.DjangoModelFactory):
444
-    name = 'Test offer'
445
-    benefit = factory.SubFactory(BenefitFactory)
446
-    condition = factory.SubFactory(ConditionFactory)
447
-
448
-    class Meta:
449
-        model = get_model('offer','ConditionalOffer')
450
-
451
-
452
-class OrderDiscountFactory(factory.DjangoModelFactory):
453
-
454
-    class Meta:
455
-        model = get_model('order', 'OrderDiscount')
1
+import warnings
2
+
3
+from oscar.test.factories.address import *  # noqa
4
+from oscar.test.factories.basket import *  # noqa
5
+from oscar.test.factories.catalogue import *  # noqa
6
+from oscar.test.factories.contrib import *  # noqa
7
+from oscar.test.factories.customer import *  # noqa
8
+from oscar.test.factories.offer import *  # noqa
9
+from oscar.test.factories.order import *  # noqa
10
+from oscar.test.factories.partner import *  # noqa
11
+from oscar.test.factories.payment import *  # noqa
12
+from oscar.test.factories.utils import *  # noqa
13
+from oscar.test.factories.voucher import *  # noqa
14
+
15
+
16
+message = (
17
+    "Module '%s' is deprecated and will be removed in the next major version "
18
+    "of django-oscar"
19
+) % __name__
20
+
21
+warnings.warn(message, PendingDeprecationWarning)

+ 2
- 2
tests/functional/checkout/customer_checkout_tests.py 查看文件

@@ -3,9 +3,9 @@ from django.core.urlresolvers import reverse
3 3
 from django.utils.six.moves import http_client
4 4
 
5 5
 from oscar.core.loading import get_model, get_class
6
-from oscar.test.newfactories import UserAddressFactory
7
-from oscar.test.testcases import WebTestCase
8 6
 from oscar.test import factories
7
+from oscar.test.factories import UserAddressFactory
8
+from oscar.test.testcases import WebTestCase
9 9
 from . import CheckoutMixin
10 10
 
11 11
 Order = get_model('order', 'Order')

+ 2
- 3
tests/integration/catalogue/reviews/form_tests.py 查看文件

@@ -1,9 +1,8 @@
1 1
 from django.test import TestCase
2 2
 
3
-from oscar.core.compat import get_user_model
4
-from oscar.apps.catalogue.reviews import forms, models
3
+from oscar.apps.catalogue.reviews import forms
5 4
 from oscar.test.factories import create_product
6
-from oscar.test.newfactories import UserFactory
5
+from oscar.test.factories import UserFactory
7 6
 
8 7
 
9 8
 class TestReviewForm(TestCase):

+ 2
- 2
tests/integration/offer/applicator_tests.py 查看文件

@@ -5,9 +5,9 @@ from mock import Mock
5 5
 
6 6
 from oscar.apps.offer import models
7 7
 from oscar.apps.offer.utils import Applicator
8
-from oscar.test.basket import add_product
9 8
 from oscar.test import factories
10
-from oscar.test.newfactories import (
9
+from oscar.test.basket import add_product
10
+from oscar.test.factories import (
11 11
     BenefitFactory, ConditionalOfferFactory, ConditionFactory, RangeFactory)
12 12
 
13 13
 

+ 1
- 1
tests/integration/offer/availability_tests.py 查看文件

@@ -2,7 +2,7 @@ from django.test import TestCase
2 2
 
3 3
 from oscar.apps.offer import models
4 4
 from oscar.test.factories import create_order
5
-from oscar.test.newfactories import OrderDiscountFactory, UserFactory
5
+from oscar.test.factories import OrderDiscountFactory, UserFactory
6 6
 
7 7
 
8 8
 class TestAPerUserConditionalOffer(TestCase):

+ 1
- 2
tests/integration/offer/status_tests.py 查看文件

@@ -2,9 +2,8 @@ from decimal import Decimal as D
2 2
 
3 3
 from django.test import TestCase
4 4
 
5
-from oscar.apps.offer import models
6 5
 from oscar.core.loading import get_model
7
-from oscar.test.newfactories import ConditionalOfferFactory
6
+from oscar.test.factories import ConditionalOfferFactory
8 7
 
9 8
 
10 9
 class TestAnOfferChangesStatusWhen(TestCase):

+ 3
- 4
tests/integration/order/model_tests.py 查看文件

@@ -11,14 +11,13 @@ from oscar.apps.order.exceptions import (
11 11
 from oscar.apps.order.models import (
12 12
     Order, Line, ShippingEvent, ShippingEventType, ShippingEventQuantity,
13 13
     OrderNote, OrderDiscount)
14
+from oscar.test.basket import add_product
14 15
 from oscar.test.factories import (
15 16
     create_order, create_offer, create_voucher, create_basket)
16
-from oscar.test.newfactories import (
17
-    CountryFactory, OrderFactory, OrderLineFactory, ShippingAddressFactory,
17
+from oscar.test.factories import (
18
+    OrderFactory, OrderLineFactory, ShippingAddressFactory,
18 19
     ShippingEventFactory)
19 20
 
20
-from oscar.test.basket import add_product
21
-
22 21
 ORDER_PLACED = 'order_placed'
23 22
 
24 23
 

+ 2
- 3
tests/integration/payment/model_tests.py 查看文件

@@ -3,10 +3,9 @@ import datetime
3 3
 
4 4
 from django.test import TestCase
5 5
 
6
-from oscar.test import factories
7
-from oscar.apps.payment import models
8 6
 from oscar.apps.payment.models import Bankcard
9
-from oscar.test.newfactories import SourceFactory
7
+from oscar.test import factories
8
+from oscar.test.factories import SourceFactory
10 9
 
11 10
 
12 11
 class TestAPaymentSource(TestCase):

+ 1
- 1
tests/unit/customer/alert_tests.py 查看文件

@@ -3,7 +3,7 @@ from django.test import TestCase
3 3
 from oscar.apps.customer.models import ProductAlert
4 4
 from oscar.core.compat import get_user_model
5 5
 from oscar.test.factories import create_product
6
-from oscar.test.newfactories import UserFactory
6
+from oscar.test.factories import UserFactory
7 7
 
8 8
 
9 9
 User = get_user_model()

+ 1
- 1
tests/unit/voucher/model_tests.py 查看文件

@@ -7,7 +7,7 @@ from django.utils.timezone import utc
7 7
 
8 8
 from oscar.apps.voucher.models import Voucher
9 9
 from oscar.core.compat import get_user_model
10
-from oscar.test.newfactories import OrderFactory, UserFactory, VoucherFactory
10
+from oscar.test.factories import OrderFactory, UserFactory, VoucherFactory
11 11
 
12 12
 
13 13
 START_DATETIME = datetime.datetime(2011, 1, 1).replace(tzinfo=utc)

Loading…
取消
儲存