This commit is contained in:
112
backend/modules/invoicing/tests/conftest.py
Normal file
112
backend/modules/invoicing/tests/conftest.py
Normal file
@@ -0,0 +1,112 @@
|
||||
# backend/modules/invoicing/tests/conftest.py
|
||||
|
||||
import pytest
|
||||
from django.contrib.auth import get_user_model
|
||||
from modules.invoicing.models import Invoice
|
||||
from unittest.mock import MagicMock
|
||||
from django.conf import settings
|
||||
from core.celery import app as celery_app
|
||||
import modules.invoicing.tasks as tasks
|
||||
import uuid
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
@pytest.fixture
|
||||
def user():
|
||||
# Dodan username
|
||||
return User.objects.create_user(email="test@test.hr", password="password")
|
||||
|
||||
@pytest.fixture
|
||||
def api_client(user):
|
||||
from rest_framework.test import APIClient
|
||||
client = APIClient()
|
||||
client.force_authenticate(user=user)
|
||||
return client
|
||||
|
||||
@pytest.fixture
|
||||
def staff_user():
|
||||
return User.objects.create_superuser(email='admin@erp.hr', password='password', first_name='Admin', last_name='User')
|
||||
|
||||
@pytest.fixture
|
||||
def regular_user():
|
||||
return User.objects.create_user(email='user@erp.hr', password='password', first_name='User', last_name='User')
|
||||
|
||||
@pytest.fixture
|
||||
def serviser_a():
|
||||
return User.objects.create_user(email="a@test.hr", password="password", first_name='A', last_name='User')
|
||||
|
||||
@pytest.fixture
|
||||
def serviser_b():
|
||||
return User.objects.create_user(email="b@test.hr", password="password", first_name='B', last_name='User')
|
||||
|
||||
@pytest.fixture
|
||||
def test_client():
|
||||
from modules.crm.models import Client
|
||||
return Client.objects.create(name="Testni Klijent", tax_id="12345678901")
|
||||
|
||||
@pytest.fixture
|
||||
def invoice_a(serviser_a, test_client): # Dodali smo test_client
|
||||
from modules.invoicing.utils import generate_invoice_number
|
||||
return Invoice.objects.create(
|
||||
invoice_number=generate_invoice_number(),
|
||||
creator=serviser_a,
|
||||
client=test_client, # OVDJE JE BIO PROBLEM (bio je null)
|
||||
amount=100.00,
|
||||
due_date="2026-12-31"
|
||||
)
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def paperless_settings(settings):
|
||||
# Postavi privremene vrijednosti za vrijeme trajanja testa
|
||||
settings.PAPERLESS_API_URL = "http://mock-paperless.local"
|
||||
settings.PAPERLESS_API_TOKEN = "mock-token"
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def force_celery_eager(settings):
|
||||
settings.CELERY_TASK_ALWAYS_EAGER = True
|
||||
settings.CELERY_TASK_EAGER_PROPAGATES = True
|
||||
|
||||
# Ovo je ključ: prisilno ažuriraj konfiguraciju Celery aplikacije
|
||||
celery_app.conf.update(
|
||||
task_always_eager=True,
|
||||
task_eager_propagates=True,
|
||||
)
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def mock_paperless_gateway(monkeypatch):
|
||||
"""
|
||||
Koristi monkeypatch za zamjenu PaperlessGateway klase.
|
||||
"""
|
||||
mock_client = MagicMock()
|
||||
mock_client.get_document_metadata.return_value = {
|
||||
"correspondent": "INV-2026-TEST",
|
||||
"total_amount": "100.00",
|
||||
"created": "2026-07-01"
|
||||
}
|
||||
|
||||
# Kreiramo tvornicu koja vraća naš mock
|
||||
MockGateway = MagicMock(return_value=mock_client)
|
||||
|
||||
# Zamijeni klasu unutar tasks modula
|
||||
monkeypatch.setattr(tasks, "PaperlessGateway", MockGateway)
|
||||
|
||||
yield MockGateway
|
||||
|
||||
@pytest.fixture
|
||||
def mock_client(db):
|
||||
"""Kreira klijenta kojeg koristi PaperlessGateway u testovima."""
|
||||
from modules.crm.models import Client
|
||||
return Client.objects.create(name="INV-2026-TEST") # Ime mora odgovarati mocku iz conftest.py
|
||||
|
||||
@pytest.fixture
|
||||
def create_unique_client(db):
|
||||
"""Factory funkcija za kreiranje unikatnog klijenta."""
|
||||
from modules.crm.models import Client
|
||||
def _create_client(name):
|
||||
return Client.objects.create(
|
||||
name=name,
|
||||
tax_id=str(uuid.uuid4()), # Garantira unikatnost
|
||||
email=f"{uuid.uuid4()}@test.hr" # Garantira unikatnost
|
||||
)
|
||||
return _create_client
|
||||
|
||||
Reference in New Issue
Block a user