def test_create_invalid_review(invalid_review): invalid = False try: Review(*invalid_review).clean_fields() except ValidationError: invalid = True assert invalid
def my_profile(request): try: followed_user_courses = FollowedUserCourses.get_courses_followed_by_app_user(request.user.appuser) last_user_reviews = Review.profile_page_feed(request.user) return render(request, 'homepage/users/my_profile.html', {'user_reviews': last_user_reviews, 'user_followed_courses': followed_user_courses}) except AppUser.DoesNotExist: return render(request, 'homepage/users/my_profile.html', {'user_reviews': None, 'user_followed_courses': None})
def generate_data(apps, schema_editor): from homepage.models import AppUser from homepage.models import Course from homepage.models import Review from homepage.models import Professor from django.core.files.uploadedfile import SimpleUploadedFile from os import path from django.conf import settings from datetime import datetime import pytz users = AppUser.objects.all() courses = Course.objects.all() professors = Professor.objects.all() image = '' # prevent creating a new image upon every pytest run if not path.exists(path.join(settings.MEDIA_ROOT, IMAGES_DIR, NEW_IMAGE_FILE)): image_path = path.join(settings.MEDIA_ROOT, IMAGES_DIR, IMAGE_FILE) image = SimpleUploadedFile( name=NEW_IMAGE_FILE, content=open(image_path, 'rb').read(), content_type='image/jpeg') else: image = path.join(IMAGES_DIR, NEW_IMAGE_FILE) date1 = datetime(2015, 10, 9, 23, 55, 59, 5, tzinfo=pytz.UTC) date2 = datetime(2016, 10, 9, 23, 55, 59, 5, tzinfo=pytz.UTC) date3 = datetime(2015, 10, 3, 20, 00, 3, 5, tzinfo=pytz.UTC) date4 = datetime(2017, 3, 9, 18, 20, 00, 5, tzinfo=pytz.UTC) date5 = datetime(2016, 5, 2, 7, 00, 00, 5, tzinfo=pytz.UTC) date6 = datetime(2015, 6, 1, 12, 20, 00, 5, tzinfo=pytz.UTC) test_data_review = [ (1, courses[0].course_id, users[0].user.id, 5, date1, "Great course", 3, 10, professors[2].id, image), (2, courses[0].course_id, users[0].user.id, 4, date2, "I've learned a lot!", 2, 4), (3, courses[1].course_id, users[1].user.id, 4.5, date3, "The course was difficult", 5, 0, professors[0].id), (4, courses[1].course_id, users[1].user.id, 3.2, date4, "I didn't learn anything new", 3.7), (5, courses[2].course_id, users[2].user.id, 4.5, date5, "This course helped me to find a job", 2.5), (6, courses[2].course_id, users[2].user.id, 3.5, date6, "I didn't understand the material", 4), ] with transaction.atomic(): for tdr in test_data_review: Review(*tdr).save()
def add_review(request, course_id): if Review.user_already_posted_review(request.user.id, course_id): messages.error(request, 'You have already posted a review for this course') return redirect(f'/course/{course_id}/') try: course = Course.objects.get(pk=course_id) except ObjectDoesNotExist: return redirect('/add_review_search/') if request.method == "POST": form = ReviewForm(request.POST, user=request.user.id, course=course_id) if form.is_valid(): review = form.save() course = Course.objects.get(pk=review.course.course_id) course.update_course_per_review(review.rate, review.course_load, review.content) return redirect(f'/course/{course_id}/') else: form = ReviewForm(user=request.user.id, course=course_id) return render(request, 'homepage/add_review.html', {'form': form, 'course_name': course.name})
def review_write(request): userprofile = request.user.userprofile if request.method == "GET": rid = int(request.GET.get('rid')) if not rid: return redirect('index') r = Reservation.objects.get(id=rid) context = {'rid': r.id} if userprofile.id == r.userprofile.id: return render(request, 'review/review_write.html', context=context) return redirect('index') elif request.method == "POST": data = request.POST rid = int(data.get('rid')) subject = data.get('subject') content = data.get('content') r = Reservation.objects.get(id=rid) if not r.userprofile.id == userprofile.id: return redirect('index') review = Review() review.reservation = r review.title = subject review.content = content review.save() r.written_review = True r.save() return redirect('sitter_detail', r.sitter.id)
def test_profile_page_reviews(self, sign_in, user_profile_reviews): user_reviews = Review.profile_page_feed(sign_in.wsgi_request.user) assert all(review in user_profile_reviews for review in user_reviews)
def test_user_already_posted_review(user_id, course_id, expected_result): assert Review.user_already_posted_review(user_id, course_id) == expected_result
def test_review_str(new_review, expected_string): review = Review(*new_review) assert str(review) == expected_string
def test_add_valid_review(valid_review): review = Review(*valid_review) review.save() assert Review.objects.filter(pk=review.id).exists()
def test_landing_feed(): result = Review.landing_page_feed() assert isinstance(result, QuerySet) assert all(isinstance(review, Review) for review in result) ids_list = list(result.values_list('id')) assert [arg[0] for arg in ids_list] == [4, 2, 5]
def test_main_feed(): result = Review.main_feed() assert isinstance(result, QuerySet) assert all(isinstance(review, Review) for review in result) ids_list = list(result.values_list('id')) assert [arg[0] for arg in ids_list] == [4, 2, 5, 1, 3, 6]
def reviews(request): reviews = Review.main_feed() liked_reviews = [] if not request.user.is_anonymous: liked_reviews = UserLikes.get_liked_reviews_by_user(request.user) return render(request, 'homepage/reviews/reviews.html', {'reviews': reviews, 'liked_reviews': liked_reviews})
def landing(request): last_reviews = Review.landing_page_feed() return render(request, 'homepage/landing/landing.html', {'reviews': last_reviews})