Exemple #1
0
def test_create_invalid_review(invalid_review):
    invalid = False

    try:
        Review(*invalid_review).clean_fields()
    except ValidationError:
        invalid = True

    assert invalid
Exemple #2
0
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()
Exemple #4
0
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})
Exemple #5
0
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
Exemple #8
0
def test_review_str(new_review, expected_string):
    review = Review(*new_review)

    assert str(review) == expected_string
Exemple #9
0
def test_add_valid_review(valid_review):
    review = Review(*valid_review)
    review.save()

    assert Review.objects.filter(pk=review.id).exists()
Exemple #10
0
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]
Exemple #11
0
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]
Exemple #12
0
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})
Exemple #13
0
def landing(request):
    last_reviews = Review.landing_page_feed()
    return render(request, 'homepage/landing/landing.html', {'reviews': last_reviews})