Merge pull request #4 from i701/feat/topups
All checks were successful
Build and Push Docker Images / Build and Push Docker Images (push) Successful in 5m5s

feat(billing): Implement TopupDetailAPIView for retrieving single top…
This commit is contained in:
Abdulla Aidhaan
2025-07-04 10:12:15 +05:00
committed by GitHub
3 changed files with 22 additions and 1 deletions

View File

@ -190,3 +190,11 @@ class TopupTests(TestCase):
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.json()["data"]), 1) self.assertEqual(len(response.json()["data"]), 1)
self.assertEqual(response.json()["data"][0]["amount"], 100.00) self.assertEqual(response.json()["data"][0]["amount"], 100.00)
def test_retrieve_single_topup(self):
topup = Topup.objects.create(amount=50.00, user=self.real_user)
url = reverse("retrieve-topup", kwargs={"pk": topup.pk})
response = self.client.get(url, format="json")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.json()["amount"], 50.00)
self.assertEqual(response.json()["user"]["id"], getattr(self.real_user, "id"))

View File

@ -8,6 +8,7 @@ from .views import (
DeletePaymentView, DeletePaymentView,
ListCreateTopupView, ListCreateTopupView,
VerifyTopupPaymentAPIView, VerifyTopupPaymentAPIView,
TopupDetailAPIView,
) )
urlpatterns = [ urlpatterns = [
@ -28,7 +29,7 @@ urlpatterns = [
), ),
# Topups # Topups
path("topup/", ListCreateTopupView.as_view(), name="create-list-topups"), path("topup/", ListCreateTopupView.as_view(), name="create-list-topups"),
# path("topup/<str:pk>/", TopupDetailAPIView.as_view(), name="retrieve-topup"), path("topup/<str:pk>/", TopupDetailAPIView.as_view(), name="retrieve-topup"),
path( path(
"topup/<str:pk>/verify/", "topup/<str:pk>/verify/",
VerifyTopupPaymentAPIView.as_view(), VerifyTopupPaymentAPIView.as_view(),

View File

@ -288,6 +288,18 @@ class ListCreateTopupView(StaffEditorPermissionMixin, generics.ListCreateAPIView
return queryset.filter(user=self.request.user) return queryset.filter(user=self.request.user)
class TopupDetailAPIView(StaffEditorPermissionMixin, generics.RetrieveAPIView):
queryset = Topup.objects.all()
serializer_class = TopupSerializer
lookup_field = "pk"
def get_queryset(self):
queryset = super().get_queryset()
if getattr(self.request.user, "is_admin") or self.request.user.is_superuser:
return queryset
return queryset.filter(user=self.request.user)
class VerifyTopupPaymentAPIView(StaffEditorPermissionMixin, generics.UpdateAPIView): class VerifyTopupPaymentAPIView(StaffEditorPermissionMixin, generics.UpdateAPIView):
queryset = Topup.objects.all() queryset = Topup.objects.all()
serializer_class = TopupSerializer serializer_class = TopupSerializer