Coverage for baibu/notifications/views.py: 100%

33 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2026-10-06 13:07 +0000

1from django.contrib.auth.decorators import login_required 

2from django.core.paginator import Paginator 

3from django.http import HttpRequest 

4from django.http import HttpResponse 

5from django.shortcuts import get_object_or_404 

6from django.shortcuts import redirect 

7from django.shortcuts import render 

8from django.utils.http import url_has_allowed_host_and_scheme 

9from django.views.decorators.cache import cache_control 

10from django.views.decorators.http import require_GET 

11from django.views.decorators.http import require_POST 

12 

13from . import services 

14from .models import Notification 

15 

16 

17@login_required 

18@cache_control(private=True, no_store=True) 

19@require_GET 

20def inbox(request: HttpRequest) -> HttpResponse: 

21 page = Paginator(Notification.objects.filter(user=request.user), 30).get_page(request.GET.get("page")) 

22 return render(request, "notifications/inbox.html", {"page": page}) 

23 

24 

25@login_required 

26@require_POST 

27def open_notification(request: HttpRequest, pk) -> HttpResponse: 

28 notification = get_object_or_404(Notification, pk=pk, user=request.user) 

29 services.mark_read(notification) 

30 link = notification.link 

31 if link and url_has_allowed_host_and_scheme(link, allowed_hosts={request.get_host()}): 

32 return redirect(link) 

33 return redirect("notifications:inbox") 

34 

35 

36@login_required 

37@require_POST 

38def mark_all_read(request: HttpRequest) -> HttpResponse: 

39 services.mark_all_read(request.user) 

40 return redirect("notifications:inbox")