Add admin dashboard with KPIs
This commit is contained in:
@@ -1,7 +1,14 @@
|
||||
from datetime import timedelta
|
||||
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.test import TestCase, override_settings
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
|
||||
from .models import Claim
|
||||
from .validators import validate_receipt_file
|
||||
from .views import SubmitClaimView
|
||||
|
||||
@@ -65,3 +72,44 @@ class ClaimFormsetLimitTests(TestCase):
|
||||
formset = view.build_formset(data=data)
|
||||
self.assertFalse(formset.is_valid())
|
||||
self.assertTrue(formset.non_form_errors())
|
||||
|
||||
|
||||
class DashboardViewTests(TestCase):
|
||||
def setUp(self):
|
||||
User = get_user_model()
|
||||
self.user = User.objects.create_user(username="admin", password="test123", email="admin@example.com")
|
||||
view_perm = Permission.objects.get(codename="view_claim")
|
||||
self.user.user_permissions.add(view_perm)
|
||||
self.client.force_login(self.user)
|
||||
|
||||
def _create_claim(self, **kwargs):
|
||||
defaults = {
|
||||
"full_name": "Test User",
|
||||
"email": "test@example.com",
|
||||
"amount": 123,
|
||||
"currency": Claim.Currency.SEK,
|
||||
"description": "Taxi",
|
||||
"account_number": "123-456",
|
||||
}
|
||||
defaults.update(kwargs)
|
||||
claim = Claim.objects.create(**defaults)
|
||||
return claim
|
||||
|
||||
def test_dashboard_summary_counts(self):
|
||||
recent_pending = self._create_claim()
|
||||
recent_approved = self._create_claim(status=Claim.Status.APPROVED)
|
||||
paid_claim = self._create_claim(status=Claim.Status.APPROVED, amount=500)
|
||||
paid_claim.paid_at = timezone.now()
|
||||
paid_claim.save(update_fields=["paid_at"])
|
||||
|
||||
old_claim = self._create_claim(status=Claim.Status.REJECTED)
|
||||
Claim.objects.filter(pk=old_claim.pk).update(created_at=timezone.now() - timedelta(days=10))
|
||||
|
||||
response = self.client.get(reverse("claims:admin-list"))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
summary = response.context["summary"]
|
||||
self.assertEqual(summary["total_claims"], 4)
|
||||
self.assertEqual(summary["last_week_claims"], 3)
|
||||
self.assertEqual(summary["pending_count"], 1)
|
||||
self.assertEqual(summary["approved_count"], 2)
|
||||
self.assertEqual(summary["ready_to_pay"], 1)
|
||||
|
||||
Reference in New Issue
Block a user