Skip to content

Commit aac7780

Browse files
committed
Merge remote-tracking branch 'awesto/master' into atomic-customer-creation
# Conflicts: # shop/models/customer.py
2 parents 2238429 + 264ecca commit aac7780

File tree

11 files changed

+1482
-1689
lines changed

11 files changed

+1482
-1689
lines changed

docs/authors.rst

+5-9
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@ CONTRIBUTORS
1313
* Aleš Kocjančič
1414
* Anders Petersson
1515
* Andrés Reyes Monge
16+
* Arturo Fernandez
1617
* Audrey Roy
17-
* Ben Lopatin
1818
* Benjamin Wohlwend
19+
* Ben Lopatin
1920
* Bojan Mihelac
2021
* Chris Morgan
2122
* Dino Perovic
@@ -29,9 +30,12 @@ CONTRIBUTORS
2930
* Justin Steward
3031
* Kristian Øllegaard
3132
* maltitco
33+
* Maltsev Artyom
3234
* Martin Ogden
3335
* Mike Yumatov
36+
* Mikhail Kolesnik
3437
* Pavel Zhukov
38+
* Pedro Gracia
3539
* Per Rosengren
3640
* Raúl Cumplido
3741
* Roberth Solís
@@ -42,14 +46,6 @@ CONTRIBUTORS
4246
* Stephen Muss
4347
* Thomas Woolford
4448

45-
TRANSLATORS
46-
===========
47-
48-
* Mikhail Kolesnik (Russian)
49-
* Pavel Zhukov (Russian)
50-
* Pedro Gracia (Spanish)
51-
* Arturo Fernandez (Spanish)
52-
5349
RETIRED CORE DEVELOPERS
5450
=======================
5551

example/tests/test_customer.py

+20
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,26 @@ def test_authenticated_visiting_customer(self):
173173
self.assertEqual(customer.last_name, 'Simpson')
174174
self.assertEqual(customer.email, '[email protected]')
175175

176+
def test_get_or_create_authenticated_customer_idempotent(self):
177+
lisa = get_user_model().objects.get(username='lisa')
178+
self.assertTrue(lisa.is_authenticated())
179+
request = self.factory.get('/', follow=True)
180+
request.user = lisa
181+
request.session = SessionStore()
182+
request.session.create()
183+
customer1 = Customer.objects.get_or_create_from_request(request)
184+
customer2 = Customer.objects.get_or_create_from_request(request)
185+
self.assertEqual(customer1, customer2)
186+
187+
def test_get_or_create_unauthenticated_customer_idempotent(self):
188+
request = self.factory.get('/', follow=True)
189+
request.user = AnonymousUser()
190+
request.session = SessionStore()
191+
request.session.create()
192+
customer1 = Customer.objects.get_or_create_from_request(request)
193+
customer2 = Customer.objects.get_or_create_from_request(request)
194+
self.assertEqual(customer1, customer2)
195+
176196
def test_select_related(self):
177197
"""
178198
Check that all queries on model Customer do an INNER JOIN on table `auth_user`.

example/tests/test_rest/__init__.py

Whitespace-only changes.
+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import mock
2+
import cms.api
3+
from cms.models import Page
4+
from django.core.exceptions import ImproperlyConfigured
5+
from django.test import RequestFactory, TestCase
6+
7+
from shop.rest.filters import RecursiveCMSPagesFilterBackend
8+
from myshop.models.polymorphic.product import Product, ProductPage
9+
from myshop.models.manufacturer import Manufacturer
10+
11+
12+
def create_page(name):
13+
page = cms.api.create_page(name, "INHERIT", "en")
14+
page.site_id = 1
15+
page.save()
16+
page.publish("en")
17+
page = page.get_public_object()
18+
return page
19+
20+
21+
class RecursiveCMSPagesFilterBackendTest(TestCase):
22+
23+
def setUp(self):
24+
self.manufacturer = Manufacturer.objects.create(name='Testmanufacturer')
25+
self.root = create_page("root")
26+
self.sibling = create_page("sibling")
27+
self.child = create_page("child")
28+
self.grandchild = create_page("grandchild")
29+
self.grandchild.move(target=self.child, pos="first-child")
30+
self.child.move(target=self.root, pos="first-child")
31+
32+
def _create_product(self, slug):
33+
return Product.objects.create(product_name=slug, slug=slug, order=1, manufacturer=self.manufacturer)
34+
35+
def test_products_on_child_and_grandchild(self):
36+
product = self._create_product("testproduct")
37+
product2 = self._create_product("testproduct2")
38+
ProductPage.objects.create(product=product, page=self.child)
39+
ProductPage.objects.create(product=product2, page=self.grandchild)
40+
41+
request = RequestFactory().get('/')
42+
request.current_page = Page.objects.get(title_set__title="root", publisher_is_draft=False)
43+
view = mock.Mock(cms_pages_fields=['cms_pages'])
44+
45+
queryset = Product.objects.all()
46+
backend = RecursiveCMSPagesFilterBackend()
47+
48+
self.assertEqual(backend.filter_queryset(request, queryset, view).count(), 2)
49+
50+
def test_product_on_sibling(self):
51+
product = self._create_product("testproduct")
52+
ProductPage.objects.create(product=product, page=self.sibling)
53+
54+
request = RequestFactory().get('/')
55+
request.current_page = self.root
56+
view = mock.Mock(cms_pages_fields=['cms_pages'])
57+
58+
queryset = Product.objects.all()
59+
backend = RecursiveCMSPagesFilterBackend()
60+
61+
self.assertEqual(backend.filter_queryset(request, queryset, view).count(), 0)
62+
63+
def test_checks_cms_pages_fields(self):
64+
request = RequestFactory().get('/')
65+
view = mock.Mock(cms_pages_fields='not-a-list-or-tuple')
66+
queryset = Product.objects.all()
67+
68+
backend = RecursiveCMSPagesFilterBackend()
69+
self.assertRaises(ImproperlyConfigured,
70+
lambda: backend.filter_queryset(request, queryset, view))

shop/locale/pl/LC_MESSAGES/django.mo

28.1 KB
Binary file not shown.

0 commit comments

Comments
 (0)