mirror of
https://github.com/ae-utbm/sith.git
synced 2025-01-09 08:31:11 +00:00
Properly test annotations in counter click
This commit is contained in:
parent
3464d5d860
commit
38f491cf57
@ -21,7 +21,7 @@ import string
|
|||||||
from datetime import date, datetime, timedelta
|
from datetime import date, datetime, timedelta
|
||||||
from datetime import timezone as tz
|
from datetime import timezone as tz
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Self, Tuple
|
from typing import Self
|
||||||
|
|
||||||
from dict2xml import dict2xml
|
from dict2xml import dict2xml
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@ -138,7 +138,7 @@ class Customer(models.Model):
|
|||||||
return (date.today() - subscription.subscription_end) < timedelta(days=90)
|
return (date.today() - subscription.subscription_end) < timedelta(days=90)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_or_create(cls, user: User) -> Tuple[Customer, bool]:
|
def get_or_create(cls, user: User) -> tuple[Customer, bool]:
|
||||||
"""Work in pretty much the same way as the usual get_or_create method,
|
"""Work in pretty much the same way as the usual get_or_create method,
|
||||||
but with the default field replaced by some under the hood.
|
but with the default field replaced by some under the hood.
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
# OR WITHIN THE LOCAL FILE "LICENSE"
|
# OR WITHIN THE LOCAL FILE "LICENSE"
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
import re
|
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
@ -40,7 +39,7 @@ from counter.models import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestRefilling(TestCase):
|
class FullClickSetup:
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpTestData(cls):
|
def setUpTestData(cls):
|
||||||
cls.customer = subscriber_user.make()
|
cls.customer = subscriber_user.make()
|
||||||
@ -54,6 +53,11 @@ class TestRefilling(TestCase):
|
|||||||
cls.counter.sellers.add(cls.barmen)
|
cls.counter.sellers.add(cls.barmen)
|
||||||
cls.counter.sellers.add(cls.board_admin)
|
cls.counter.sellers.add(cls.board_admin)
|
||||||
|
|
||||||
|
cls.other_counter = baker.make(Counter, type="BAR")
|
||||||
|
cls.other_counter.sellers.add(cls.barmen)
|
||||||
|
|
||||||
|
cls.yet_another_counter = baker.make(Counter, type="BAR")
|
||||||
|
|
||||||
cls.customer_old_can_buy = subscriber_user.make()
|
cls.customer_old_can_buy = subscriber_user.make()
|
||||||
sub = cls.customer_old_can_buy.subscriptions.first()
|
sub = cls.customer_old_can_buy.subscriptions.first()
|
||||||
sub.subscription_end = localdate() - timedelta(days=89)
|
sub.subscription_end = localdate() - timedelta(days=89)
|
||||||
@ -71,6 +75,8 @@ class TestRefilling(TestCase):
|
|||||||
user=cls.club_admin,
|
user=cls.club_admin,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestRefilling(FullClickSetup, TestCase):
|
||||||
def login_in_bar(self, barmen: User | None = None):
|
def login_in_bar(self, barmen: User | None = None):
|
||||||
used_barman = barmen if barmen is not None else self.board_admin
|
used_barman = barmen if barmen is not None else self.board_admin
|
||||||
self.client.post(
|
self.client.post(
|
||||||
@ -190,136 +196,12 @@ class TestRefilling(TestCase):
|
|||||||
assert self.updated_amount(self.customer_old_can_buy) == 1
|
assert self.updated_amount(self.customer_old_can_buy) == 1
|
||||||
|
|
||||||
|
|
||||||
class TestCounter(TestCase):
|
class TestCounterClick(FullClickSetup, TestCase):
|
||||||
@classmethod
|
|
||||||
def setUpTestData(cls):
|
|
||||||
cls.skia = User.objects.filter(username="skia").first()
|
|
||||||
cls.sli = User.objects.filter(username="sli").first()
|
|
||||||
cls.krophil = User.objects.filter(username="krophil").first()
|
|
||||||
cls.richard = User.objects.filter(username="rbatsbak").first()
|
|
||||||
cls.mde = Counter.objects.filter(name="MDE").first()
|
|
||||||
cls.foyer = Counter.objects.get(id=2)
|
|
||||||
|
|
||||||
def test_full_click(self):
|
|
||||||
self.client.post(
|
|
||||||
reverse("counter:login", kwargs={"counter_id": self.mde.id}),
|
|
||||||
{"username": self.skia.username, "password": "plop"},
|
|
||||||
)
|
|
||||||
response = self.client.get(
|
|
||||||
reverse("counter:details", kwargs={"counter_id": self.mde.id})
|
|
||||||
)
|
|
||||||
|
|
||||||
assert 'class="link-button">S' Kia</button>' in str(response.content)
|
|
||||||
|
|
||||||
counter_token = re.search(
|
|
||||||
r'name="counter_token" value="([^"]*)"', str(response.content)
|
|
||||||
).group(1)
|
|
||||||
|
|
||||||
response = self.client.post(
|
|
||||||
reverse("counter:details", kwargs={"counter_id": self.mde.id}),
|
|
||||||
{"code": self.richard.customer.account_id, "counter_token": counter_token},
|
|
||||||
)
|
|
||||||
counter_url = response.get("location")
|
|
||||||
refill_url = reverse(
|
|
||||||
"counter:refilling_create",
|
|
||||||
kwargs={"customer_id": self.richard.customer.pk},
|
|
||||||
)
|
|
||||||
|
|
||||||
response = self.client.get(counter_url)
|
|
||||||
assert ">Richard Batsbak</" in str(response.content)
|
|
||||||
|
|
||||||
self.client.post(
|
|
||||||
refill_url,
|
|
||||||
{
|
|
||||||
"amount": "5",
|
|
||||||
"payment_method": "CASH",
|
|
||||||
"bank": "OTHER",
|
|
||||||
},
|
|
||||||
HTTP_REFERER=counter_url,
|
|
||||||
)
|
|
||||||
self.client.post(counter_url, "action=code&code=BARB", content_type="text/xml")
|
|
||||||
self.client.post(
|
|
||||||
counter_url, "action=add_product&product_id=4", content_type="text/xml"
|
|
||||||
)
|
|
||||||
self.client.post(
|
|
||||||
counter_url, "action=del_product&product_id=4", content_type="text/xml"
|
|
||||||
)
|
|
||||||
self.client.post(
|
|
||||||
counter_url, "action=code&code=2xdeco", content_type="text/xml"
|
|
||||||
)
|
|
||||||
self.client.post(
|
|
||||||
counter_url, "action=code&code=1xbarb", content_type="text/xml"
|
|
||||||
)
|
|
||||||
response = self.client.post(
|
|
||||||
counter_url, "action=code&code=fin", content_type="text/xml"
|
|
||||||
)
|
|
||||||
|
|
||||||
response_get = self.client.get(response.get("location"))
|
|
||||||
response_content = response_get.content.decode("utf-8")
|
|
||||||
assert "2 x Barbar" in str(response_content)
|
|
||||||
assert "2 x Déconsigne Eco-cup" in str(response_content)
|
|
||||||
assert "<p>Client : Richard Batsbak - Nouveau montant : 3.60" in str(
|
|
||||||
response_content
|
|
||||||
)
|
|
||||||
|
|
||||||
self.client.post(
|
|
||||||
reverse("counter:login", kwargs={"counter_id": self.mde.id}),
|
|
||||||
{"username": self.sli.username, "password": "plop"},
|
|
||||||
)
|
|
||||||
|
|
||||||
response = self.client.post(
|
|
||||||
refill_url,
|
|
||||||
{
|
|
||||||
"amount": "5",
|
|
||||||
"payment_method": "CASH",
|
|
||||||
"bank": "OTHER",
|
|
||||||
},
|
|
||||||
HTTP_REFERER=counter_url,
|
|
||||||
)
|
|
||||||
assert response.status_code == 302
|
|
||||||
|
|
||||||
self.client.post(
|
|
||||||
reverse("counter:login", kwargs={"counter_id": self.foyer.id}),
|
|
||||||
{"username": self.krophil.username, "password": "plop"},
|
|
||||||
)
|
|
||||||
|
|
||||||
response = self.client.get(
|
|
||||||
reverse("counter:details", kwargs={"counter_id": self.foyer.id})
|
|
||||||
)
|
|
||||||
|
|
||||||
counter_token = re.search(
|
|
||||||
r'name="counter_token" value="([^"]*)"', str(response.content)
|
|
||||||
).group(1)
|
|
||||||
|
|
||||||
response = self.client.post(
|
|
||||||
reverse("counter:details", kwargs={"counter_id": self.foyer.id}),
|
|
||||||
{"code": self.richard.customer.account_id, "counter_token": counter_token},
|
|
||||||
)
|
|
||||||
counter_url = response.get("location")
|
|
||||||
refill_url = reverse(
|
|
||||||
"counter:refilling_create",
|
|
||||||
kwargs={
|
|
||||||
"customer_id": self.richard.customer.pk,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
response = self.client.post(
|
|
||||||
refill_url,
|
|
||||||
{
|
|
||||||
"amount": "5",
|
|
||||||
"payment_method": "CASH",
|
|
||||||
"bank": "OTHER",
|
|
||||||
},
|
|
||||||
HTTP_REFERER=counter_url,
|
|
||||||
)
|
|
||||||
assert response.status_code == 403 # Krophil is not board admin
|
|
||||||
|
|
||||||
def test_annotate_has_barman_queryset(self):
|
def test_annotate_has_barman_queryset(self):
|
||||||
"""Test if the custom queryset method `annotate_has_barman` works as intended."""
|
"""Test if the custom queryset method `annotate_has_barman` works as intended."""
|
||||||
self.sli.counters.set([self.foyer, self.mde])
|
counters = Counter.objects.annotate_has_barman(self.barmen)
|
||||||
counters = Counter.objects.annotate_has_barman(self.sli)
|
|
||||||
for counter in counters:
|
for counter in counters:
|
||||||
if counter.name in ("Foyer", "MDE"):
|
if counter in (self.counter, self.other_counter):
|
||||||
assert counter.has_annotated_barman
|
assert counter.has_annotated_barman
|
||||||
else:
|
else:
|
||||||
assert not counter.has_annotated_barman
|
assert not counter.has_annotated_barman
|
||||||
|
Loading…
Reference in New Issue
Block a user