diff --git a/daycare/templates/daycare/daycare-homepage.html b/daycare/templates/daycare/daycare-homepage.html index 3f6a91b..56b6c88 100644 --- a/daycare/templates/daycare/daycare-homepage.html +++ b/daycare/templates/daycare/daycare-homepage.html @@ -1,132 +1,137 @@ {% extends "main/base_template.html" %} {% block stylesheets %} - - - - - + + + + + {% endblock %} {% block content %} -
-
-
-
-
-
Hello {{ daycare.name }}
-
This is where you can manage your daycare. -
You will be able:
-

# Manage your booking schedule

-

# Set filters of approved dogs and services you provide

-

# Read / write reviews of dog owners and their dogs

-

# Chat with dog owners

-
-
-
-
Have a look at your reviews
- - - - - - - - - - - - {% for review in reviews %} - - - - - - - - {% endfor %} - -
#NameDateReviewRating
{{ forloop.counter }}{{ review.dogowner_id }}{{ review.creation_date }}{{ review.review }}{{ review.rating }}
+
+
+
+
+
+
Hello {{ daycare.name }}
+
This is where you can manage your daycare. +
You will be able:
+

# Manage your booking schedule

+

# Set filters of approved dogs and services you provide

+

# Read / write reviews of dog owners and their dogs

+

# Chat with dog owners

+
+
+
+
Have a look at your reviews
+ + + + + + + + + + + + {% for review in reviews %} + + + + + + + + {% endfor %} + +
#NameDateReviewRating
{{ forloop.counter }}{{ review.dogowner_id }}{{ review.creation_date }}{{ review.review }}{{ review.rating }}
-
-
-
- +
+
+
+ -
-
+
+
- +
+
{{ daycare.address }}, {{ daycare.city }}
+
+
+ Capacity: {{ daycare.capacity }} +
+
+ Price: {{ daycare.price_per_day }} +
+
+ Rating: {{ rating }} +
+
+
About
+

{{ daycare.description }}

+
+
+
+
-
-
-
-
+
- {% endblock %} \ No newline at end of file +{% endblock %} diff --git a/daycare/test_daycare.py b/daycare/test_daycare.py index 9c23cd9..54a3b87 100644 --- a/daycare/test_daycare.py +++ b/daycare/test_daycare.py @@ -71,7 +71,7 @@ def test_daycare_redirected_homepage_after_login(self, client, create_daycare_us assert response.status_code == 302 assert response['Location'] == '/homepage/' - def test_relevant_daycare_homepage_with_static_data(self, client, create_daycare_user): + def test_relevant_daycare_homepage_with_static_data(self, client): dayCare = random.choice([daycare for daycare in DayCare.objects.all() if 'static' in daycare.user.username]) client.force_login(user=dayCare.user) @@ -87,3 +87,7 @@ def test_relevant_daycare_homepage_with_static_data(self, client, create_daycare reviews_shown_in_homepage = set(response.context['reviews']) daycare_reviews = set(Review.get_review_by_daycare_id(daycare_id=dayCare.id)) assert reviews_shown_in_homepage == daycare_reviews + + average_rating_in_homepage = response.context['rating'] + average_rating = Review.get_average_rating_by_daycare_id(daycare_id=dayCare.id) + assert average_rating_in_homepage == average_rating diff --git a/daycare/views.py b/daycare/views.py index 1e79271..c50b6c1 100644 --- a/daycare/views.py +++ b/daycare/views.py @@ -9,7 +9,7 @@ def daycare_home(request): context = { 'daycare': request.user.daycare, 'reviews': Review.get_review_by_daycare_id(request.user.daycare.id), - 'images': Image.get_images_by_daycare_id(request.user.daycare.id) + 'images': Image.get_images_by_daycare_id(request.user.daycare.id), + 'rating': Review.get_average_rating_by_daycare_id(request.user.daycare.id) } - return render(request, 'daycare/daycare-homepage.html', context) diff --git a/review/models.py b/review/models.py index 52a38e3..21aa081 100644 --- a/review/models.py +++ b/review/models.py @@ -27,3 +27,10 @@ def get_review_by_daycare_id(daycare_id): return Review.objects.filter(daycare_id=daycare_id) except ObjectDoesNotExist: return None + + @staticmethod + def get_average_rating_by_daycare_id(daycare_id): + reviews = Review.get_review_by_daycare_id(daycare_id) + if reviews.exists(): + return float("{:.2f}".format(reviews.aggregate(models.Avg('rating'))['rating__avg'])) + return 0 diff --git a/review/tests.py b/review/tests.py index 1984deb..ab2986d 100644 --- a/review/tests.py +++ b/review/tests.py @@ -46,3 +46,25 @@ def test_get_review_by_daycare_id(self, number_of_reviews, create_dog_owner_user assert len(reviews_by_id_list) == number_of_reviews for position, review in enumerate(reviews_by_id_list): assert review == review_list[position] + + @pytest.mark.parametrize('daycare_id, expected_rating', [(1, 2), (2, 4.67)]) + def test_get_average_rating_for_test_data(self, daycare_id, expected_rating): + average_rating = Review.get_average_rating_by_daycare_id(daycare_id) + + assert expected_rating == average_rating + + def test_get_average_rating_for_invalid_daycare(self): + average_rating = Review.get_average_rating_by_daycare_id(-1) + + assert 0 == average_rating + + @pytest.mark.parametrize('number_of_reviews, rating', [(100, 1), (50, 2), (500, 3), (7, 4), (10, 5)]) + def test_get_average_rating_by_daycare_id(self, number_of_reviews, rating, create_dog_owner_user, + create_daycare_user): + [Review.create(review='review', rating=rating, daycare_id=create_daycare_user.id, + dogowner_id=create_dog_owner_user.id) + for _ in range(number_of_reviews)] + + average_rating = Review.get_average_rating_by_daycare_id(create_daycare_user.id) + + assert rating == average_rating