mirror of
https://github.com/ae-utbm/sith.git
synced 2026-05-23 17:30:17 +00:00
test sold out items in eboutic
This commit is contained in:
+3
-1
@@ -371,7 +371,9 @@ class ProductQuerySet(models.QuerySet):
|
|||||||
nb_basket_items_subquery = Subquery(
|
nb_basket_items_subquery = Subquery(
|
||||||
BasketItem.objects.filter(
|
BasketItem.objects.filter(
|
||||||
product_id=OuterRef("id"),
|
product_id=OuterRef("id"),
|
||||||
basket__date__gt=now() - settings.SITH_EBOUTIC_BASKET_TIMEOUT,
|
basket__date__gt=now()
|
||||||
|
- settings.SITH_EBOUTIC_BASKET_TIMEOUT
|
||||||
|
- settings.SITH_EBOUTIC_ETRANSACTION_TIMEOUT,
|
||||||
)
|
)
|
||||||
.values("product_id")
|
.values("product_id")
|
||||||
.annotate(res=Sum("quantity"))
|
.annotate(res=Sum("quantity"))
|
||||||
|
|||||||
@@ -276,7 +276,9 @@ class TestProductClicLimit(TestCase):
|
|||||||
item = BasketItem.objects.filter(product=self.products[1])[0]
|
item = BasketItem.objects.filter(product=self.products[1])[0]
|
||||||
item.basket = baker.make(
|
item.basket = baker.make(
|
||||||
Basket,
|
Basket,
|
||||||
date=now() - settings.SITH_EBOUTIC_BASKET_TIMEOUT - timedelta(minutes=1),
|
date=now()
|
||||||
|
- settings.SITH_EBOUTIC_BASKET_TIMEOUT
|
||||||
|
- settings.SITH_EBOUTIC_ETRANSACTION_TIMEOUT,
|
||||||
)
|
)
|
||||||
item.save()
|
item.save()
|
||||||
assert list(self.qs.under_clic_limit()) == self.products[1:]
|
assert list(self.qs.under_clic_limit()) == self.products[1:]
|
||||||
|
|||||||
@@ -1,16 +1,19 @@
|
|||||||
import re
|
import re
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
|
import freezegun
|
||||||
import pytest
|
import pytest
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
from django.conf import settings
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test.client import Client
|
from django.test.client import Client
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.timezone import localdate
|
from django.utils.timezone import localdate, now
|
||||||
from model_bakery import baker
|
from model_bakery import baker
|
||||||
from pytest_django.asserts import assertRedirects
|
from pytest_django.asserts import assertRedirects
|
||||||
|
|
||||||
|
import eboutic.models
|
||||||
from core.baker_recipes import subscriber_user
|
from core.baker_recipes import subscriber_user
|
||||||
from core.models import Group, User
|
from core.models import Group, User
|
||||||
from counter.baker_recipes import (
|
from counter.baker_recipes import (
|
||||||
@@ -235,17 +238,45 @@ class TestEboutic(TestCase):
|
|||||||
|
|
||||||
def test_add_forbidden_product(self):
|
def test_add_forbidden_product(self):
|
||||||
self.client.force_login(self.new_customer)
|
self.client.force_login(self.new_customer)
|
||||||
response = self.submit_basket([BasketItem(self.beer.id, 1)])
|
for product in self.beer, self.cotiz, self.not_in_counter:
|
||||||
assert response.status_code == 200
|
response = self.submit_basket([BasketItem(product.id, 1)])
|
||||||
assert Basket.objects.first() is None
|
assert response.status_code == 200
|
||||||
|
assert not Basket.objects.exists()
|
||||||
|
|
||||||
response = self.submit_basket([BasketItem(self.cotiz.id, 1)])
|
def test_sold_out_product(self):
|
||||||
|
sold_out = product_recipe.make(
|
||||||
|
clic_limit=3, counters=[self.eboutic], product_type=baker.make(ProductType)
|
||||||
|
)
|
||||||
|
price = price_recipe.make(product=sold_out, groups=[self.group_cotiz], amount=0)
|
||||||
|
sale_recipe.make(
|
||||||
|
product=sold_out,
|
||||||
|
customer=self.subscriber.customer,
|
||||||
|
unit_price=0,
|
||||||
|
quantity=1,
|
||||||
|
)
|
||||||
|
baker.make(
|
||||||
|
eboutic.models.BasketItem,
|
||||||
|
basket=baker.make(Basket),
|
||||||
|
product=sold_out,
|
||||||
|
quantity=2,
|
||||||
|
)
|
||||||
|
self.client.force_login(self.subscriber)
|
||||||
|
response = self.submit_basket([BasketItem(price.id, 1)])
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert Basket.objects.first() is None
|
assert Basket.objects.count() == 1
|
||||||
|
with freezegun.freeze_time(
|
||||||
response = self.submit_basket([BasketItem(self.not_in_counter.id, 1)])
|
now()
|
||||||
assert response.status_code == 200
|
+ settings.SITH_EBOUTIC_BASKET_TIMEOUT
|
||||||
assert Basket.objects.first() is None
|
+ settings.SITH_EBOUTIC_ETRANSACTION_TIMEOUT
|
||||||
|
):
|
||||||
|
# after a while, unpaid basket items should expire and make the
|
||||||
|
# product available again.
|
||||||
|
response = self.submit_basket([BasketItem(price.id, 1)])
|
||||||
|
assertRedirects(
|
||||||
|
response,
|
||||||
|
reverse("eboutic:checkout", kwargs={"basket_id": Basket.objects.last().id}),
|
||||||
|
)
|
||||||
|
assert Basket.objects.count() == 2
|
||||||
|
|
||||||
def test_create_basket(self):
|
def test_create_basket(self):
|
||||||
self.client.force_login(self.new_customer)
|
self.client.force_login(self.new_customer)
|
||||||
|
|||||||
Reference in New Issue
Block a user