Просмотр исходного кода

Backport some additions to the test support package

master
David Winterbottom 12 лет назад
Родитель
Сommit
ccd16355e1
2 измененных файлов: 34 добавлений и 9 удалений
  1. 26
    0
      oscar/test/contextmanagers.py
  2. 8
    9
      oscar/test/factories.py

+ 26
- 0
oscar/test/contextmanagers.py Просмотреть файл

@@ -0,0 +1,26 @@
1
+from contextlib import contextmanager
2
+from mock import Mock
3
+
4
+
5
+@contextmanager
6
+def mock_signal_receiver(signal, wraps=None, **kwargs):
7
+    """
8
+    Temporarily attaches a receiver to the provided ``signal`` within the scope
9
+    of the context manager.
10
+
11
+    Example use::
12
+
13
+        with mock_signal_receiver(signal) as receiver:
14
+            # Do the thing that should trigger the signal
15
+            self.assertEquals(receiver.call_count, 1)
16
+
17
+    Implementation based on:
18
+    https://github.com/dcramer/mock-django/blob/master/mock_django/signals.py
19
+    """
20
+    if wraps is None:
21
+        wraps = lambda *args, **kwargs: None
22
+
23
+    receiver = Mock(wraps=wraps)
24
+    signal.connect(receiver, **kwargs)
25
+    yield receiver
26
+    signal.disconnect(receiver)

+ 8
- 9
oscar/test/factories.py Просмотреть файл

@@ -35,8 +35,14 @@ def create_product(price=None, title=u"Dummy title",
35 35
     Helper method for creating products that are used in tests.
36 36
     """
37 37
     ic, __ = ProductClass._default_manager.get_or_create(name=product_class)
38
-    item = Product._default_manager.create(title=title, product_class=ic,
39
-                                           upc=upc, **kwargs)
38
+    item = Product(title=title, product_class=ic, upc=upc, **kwargs)
39
+
40
+    if attributes:
41
+        for key, value in attributes.items():
42
+            setattr(item.attr, key, value)
43
+
44
+    item.save()
45
+
40 46
     if price is not None or partner_sku or num_in_stock is not None:
41 47
         if not partner_sku:
42 48
             partner_sku = 'sku_%d_%d' % (item.id, random.randint(0, 10000))
@@ -48,13 +54,6 @@ def create_product(price=None, title=u"Dummy title",
48 54
                                             partner_sku=partner_sku,
49 55
                                             price_excl_tax=price,
50 56
                                             num_in_stock=num_in_stock)
51
-    if attributes:
52
-        for key, value in attributes.items():
53
-            attr, __ = ProductAttribute.objects.get_or_create(
54
-                name=key, code=key)
55
-            ProductAttributeValue.objects.create(
56
-                product=item, attribute=attr, value=value)
57
-
58 57
     return item
59 58
 
60 59
 

Загрузка…
Отмена
Сохранить