Coverage for src / mesh / views / views_inbox.py: 56%

25 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-08-27 14:14 +0000

1import ast 

2 

3from django.contrib.auth.mixins import LoginRequiredMixin 

4from django.http import JsonResponse 

5from django.shortcuts import get_object_or_404, render 

6from django.utils.decorators import method_decorator 

7from django.views import View 

8from django.views.decorators.csrf import csrf_exempt 

9 

10from mesh.crud.discussion import get_inbox_comments, remove_inbox_item 

11from mesh.models.orm import Comment, Discussion, Inbox 

12 

13 

14class InboxItemsView(LoginRequiredMixin, View): 

15 def get(self, request, **kwargs): 

16 inbox_items = get_inbox_comments(request.user) 

17 return render(request, "mesh/submission/inbox/inbox.html", {"inbox_items": inbox_items}) 

18 

19 

20@method_decorator([csrf_exempt], name="dispatch") 

21class InboxItemRemoveView(LoginRequiredMixin, View): 

22 def post(self, request, **kwargs): 

23 request_body = ast.literal_eval(request.body.decode("UTF-8")) 

24 if "comment_pk" in request_body: 

25 comment = get_object_or_404(Comment, pk=request_body["comment_pk"]) 

26 remove_inbox_item(user=request.user, comment=comment) 

27 elif "discussion_pk" in request_body: 

28 discussion = get_object_or_404(Discussion, pk=request_body["discussion_pk"]) 

29 remove_inbox_item(user=request.user, discussion=discussion) 

30 count = Inbox.objects.filter(user=request.user).count() 

31 return JsonResponse({"inbox_count": count})