mirror of
https://github.com/ae-utbm/sith.git
synced 2025-11-15 17:09:21 +00:00
105 lines
3.2 KiB
Python
105 lines
3.2 KiB
Python
import csv
|
|
import itertools
|
|
|
|
import pytest
|
|
from django.test import Client
|
|
from django.urls import reverse
|
|
from model_bakery import baker
|
|
|
|
from club.forms import SellingsForm
|
|
from club.models import Club
|
|
from core.models import User
|
|
from counter.baker_recipes import product_recipe, sale_recipe
|
|
from counter.models import Counter, Customer, Product, Selling
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_sales_page_doesnt_crash(client: Client):
|
|
"""Basic crashtest on club sales view."""
|
|
club = baker.make(Club)
|
|
product = baker.make(Product, club=club)
|
|
admin = baker.make(User, is_superuser=True)
|
|
client.force_login(admin)
|
|
url = reverse("club:club_sellings", kwargs={"club_id": club.id})
|
|
assert client.get(url).status_code == 200
|
|
assert client.post(url).status_code == 200
|
|
assert client.post(url, data={"products": [product.id]}).status_code == 200
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_sales_form_counter_filter():
|
|
"""Test that counters are properly filtered in SellingsForm"""
|
|
club = baker.make(Club)
|
|
counters = baker.make(
|
|
Counter, _quantity=5, _bulk_create=True, name=iter(["Z", "a", "B", "e", "f"])
|
|
)
|
|
counters[0].club = club
|
|
counters[0].save()
|
|
sale_recipe.make(
|
|
counter=counters[1], club=club, unit_price=0, customer=baker.make(Customer)
|
|
)
|
|
product_recipe.make(counters=[counters[2]], club=club)
|
|
|
|
form = SellingsForm(club)
|
|
form_counters = list(form.fields["counters"].queryset)
|
|
assert form_counters == [counters[1], counters[2], counters[0]]
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_club_sales_csv(client: Client):
|
|
client.force_login(baker.make(User, is_superuser=True))
|
|
club = baker.make(Club)
|
|
counter = baker.make(Counter, club=club)
|
|
product = product_recipe.make(club=club, counters=[counter], purchase_price=0.5)
|
|
customers = baker.make(Customer, amount=100, _quantity=2, _bulk_create=True)
|
|
sales: list[Selling] = sale_recipe.make(
|
|
club=club,
|
|
counter=counter,
|
|
quantity=2,
|
|
unit_price=1.5,
|
|
product=iter([product, product, None]),
|
|
customer=itertools.cycle(customers),
|
|
_quantity=3,
|
|
)
|
|
url = reverse("club:sellings_csv", kwargs={"club_id": club.id})
|
|
response = client.post(url, data={"counters": [counter.id]})
|
|
assert response.status_code == 200
|
|
reader = csv.reader(s.decode() for s in response.streaming_content)
|
|
data = list(reader)
|
|
sale_rows = [
|
|
[
|
|
str(s.date),
|
|
str(counter),
|
|
str(s.seller),
|
|
s.customer.user.get_display_name(),
|
|
s.label,
|
|
"2",
|
|
"1.50",
|
|
"3.00",
|
|
"Compte utilisateur",
|
|
]
|
|
for s in sales[::-1]
|
|
]
|
|
sale_rows[2].extend(["0.50", "1.00"])
|
|
sale_rows[1].extend(["0.50", "1.00"])
|
|
sale_rows[0].extend(["", ""])
|
|
assert data == [
|
|
["Quantité", "6"],
|
|
["Total", "9"],
|
|
["Bénéfice", "1"],
|
|
[
|
|
"Date",
|
|
"Comptoir",
|
|
"Barman",
|
|
"Client",
|
|
"Étiquette",
|
|
"Quantité",
|
|
"Prix unitaire",
|
|
"Total",
|
|
"Méthode de paiement",
|
|
"Prix d'achat",
|
|
"Bénéfice",
|
|
],
|
|
*sale_rows,
|
|
]
|