Add admin dashboard with KPIs

This commit is contained in:
Victor Andersson
2025-11-09 10:13:17 +01:00
parent 79f5cb8ff3
commit 13361234fc
7 changed files with 383 additions and 195 deletions

View File

@@ -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)