mirror of
				https://github.com/ae-utbm/sith.git
				synced 2025-11-04 02:53:06 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from datetime import date, datetime
 | 
						|
 | 
						|
import pytest
 | 
						|
from dateutil.relativedelta import relativedelta
 | 
						|
from django.contrib.auth.models import Permission
 | 
						|
from django.core.exceptions import ValidationError
 | 
						|
from django.test import Client
 | 
						|
from django.urls import reverse
 | 
						|
from django.utils.timezone import localdate
 | 
						|
from model_bakery import baker
 | 
						|
from pytest_django.asserts import assertRedirects
 | 
						|
 | 
						|
from club.models import Club
 | 
						|
from core.models import User
 | 
						|
from counter.baker_recipes import sale_recipe
 | 
						|
from counter.forms import InvoiceCallForm
 | 
						|
from counter.models import Customer, InvoiceCall, Selling
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.django_db
 | 
						|
@pytest.mark.parametrize(
 | 
						|
    "month", [date(2025, 10, 20), "2025-10", datetime(2025, 10, 15, 12, 30)]
 | 
						|
)
 | 
						|
def test_invoice_date_with_date(month: date | datetime | str):
 | 
						|
    club = baker.make(Club)
 | 
						|
    invoice = InvoiceCall.objects.create(club=club, month=month)
 | 
						|
    invoice.refresh_from_db()
 | 
						|
    assert not invoice.is_validated
 | 
						|
    assert invoice.month == date(2025, 10, 1)
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.django_db
 | 
						|
def test_invoice_call_invalid_month_string():
 | 
						|
    club = baker.make(Club)
 | 
						|
 | 
						|
    with pytest.raises(ValidationError):
 | 
						|
        InvoiceCall.objects.create(club=club, month="2025-13")
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.django_db
 | 
						|
@pytest.mark.parametrize("query", [None, {"month": "2025-08"}])
 | 
						|
def test_invoice_call_view(client: Client, query: dict | None):
 | 
						|
    user = baker.make(
 | 
						|
        User,
 | 
						|
        user_permissions=[
 | 
						|
            *Permission.objects.filter(
 | 
						|
                codename__in=["view_invoicecall", "change_invoicecall"]
 | 
						|
            )
 | 
						|
        ],
 | 
						|
    )
 | 
						|
    client.force_login(user)
 | 
						|
    url = reverse("counter:invoices_call", query=query)
 | 
						|
    assert client.get(url).status_code == 200
 | 
						|
    assertRedirects(client.post(url), url)
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.django_db
 | 
						|
def test_invoice_call_form():
 | 
						|
    Selling.objects.all().delete()
 | 
						|
    month = localdate() - relativedelta(months=1)
 | 
						|
    clubs = baker.make(Club, _quantity=2)
 | 
						|
    recipe = sale_recipe.extend(date=month, customer=baker.make(Customer, amount=10000))
 | 
						|
    recipe.make(club=clubs[0], quantity=2, unit_price=200)
 | 
						|
    recipe.make(club=clubs[0], quantity=3, unit_price=5)
 | 
						|
    recipe.make(club=clubs[1], quantity=20, unit_price=10)
 | 
						|
    form = InvoiceCallForm(
 | 
						|
        month=month, data={str(clubs[0].id): True, str(clubs[1].id): False}
 | 
						|
    )
 | 
						|
    assert form.is_valid()
 | 
						|
    form.save()
 | 
						|
    assert InvoiceCall.objects.filter(
 | 
						|
        club=clubs[0], month=month, is_validated=True
 | 
						|
    ).exists()
 | 
						|
    assert InvoiceCall.objects.filter(
 | 
						|
        club=clubs[1], month=month, is_validated=False
 | 
						|
    ).exists()
 |