Coverage for reader\views.py: 93%

42 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-06-29 10:02 +0100

1from django.contrib import messages 

2from django.contrib.auth import get_user 

3from django.http import HttpResponseServerError 

4from django.shortcuts import render, redirect 

5from django.views import View 

6from django.conf import settings 

7from book.models import Book 

8from reader.forms import ProfileImageForm 

9from reader.models import ProfileImage 

10 

11 

12class ProfileDetail(View): 

13 def get(self, request): 

14 """ 

15 Handles the GET request for the reader view. 

16 

17 Args: 

18 request (HttpRequest): The HTTP request object. 

19 

20 Returns: 

21 HttpResponse: The HTTP response object containing the rendered 

22 template. 

23 """ 

24 reader = get_user(request) 

25 books = Book.objects.filter(reader=reader) 

26 image = ProfileImage.objects.filter(user=reader) 

27 if image: 

28 reader.image = image[0].image 

29 context = {'reader': reader, 'books': books, 'DEBUG': settings.DEBUG} 

30 return render(request, "reader/reader.html", context) 

31 

32 def post(self, request): 

33 """ 

34 Handle the POST request for updating user profile. 

35 

36 Args: 

37 request (HttpRequest): The HTTP request object. 

38 

39 Returns: 

40 HttpResponseRedirect: Redirects to the 'books' page. 

41 

42 Raises: 

43 HttpResponseServerError: If 'emulate-error' parameter is present 

44 in the request. 

45 """ 

46 if request.POST.get('emulate-error'): 

47 raise HttpResponseServerError() 

48 if request.FILES.get('fileInput'): 

49 self.save_image(request) 

50 user = get_user(request) 

51 user.first_name = request.POST['first-name'] 

52 user.last_name = request.POST['last-name'] 

53 user.email = request.POST['email'] 

54 user.save() 

55 messages.add_message(request, messages.SUCCESS, 

56 f'Updated profile for {user}') 

57 return redirect('books') 

58 

59 def save_image(self, request): 

60 """ 

61 Saves the profile image for the user. 

62 

63 Args: 

64 request (HttpRequest): The HTTP request object. 

65 

66 Returns: 

67 None 

68 """ 

69 reader = get_user(request) 

70 image = ProfileImage.objects.filter(user=reader).first() 

71 

72 if image: 

73 image_form = ProfileImageForm(data=request.POST, instance=image) 

74 else: 

75 image_form = ProfileImageForm(data=request.POST) 

76 

77 if image_form.is_valid(): 

78 image = image_form.save(commit=False) 

79 image.image = request.FILES['fileInput'] 

80 if not hasattr(image, 'user'): 

81 image.user = reader 

82 image.save()