-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #64 from ErezCohenn/main_daycare
Adding Homepage for daycare user
- Loading branch information
Showing
7 changed files
with
201 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
import pytest | ||
from .models import DayCare, Image | ||
from daycare.models import DayCare, Image | ||
|
||
|
||
@pytest.fixture | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
{% extends "main/base_template.html" %} | ||
|
||
{% block stylesheets %} | ||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.0/css/all.css" | ||
integrity="sha384-lZN37f5QGtY3VHgisS14W3ExzMWZxybE1SJSEsQp9S+oqd12jhcu+A56Ebc1zFSJ" crossorigin="anonymous"> | ||
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js"></script> | ||
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"></script> | ||
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script> | ||
<style> | ||
/* Make the image fully responsive */ | ||
.img { | ||
float: left; | ||
width: 100px; | ||
height: 100px; | ||
object-fit:cover; | ||
} | ||
</style> | ||
{% endblock %} | ||
|
||
{% block content %} | ||
<div class="card mb-2"> | ||
<div class="row row-cols-md-2"> | ||
<div class="col-md-7"> | ||
<hr> | ||
<div class="mt-5 mb-5"> | ||
<h5> <i class="fas fa-user"></i> Hello {{ daycare.name }}</h5> | ||
<h6>This is where you can manage your daycare. | ||
<br> You will be able:</h6> | ||
<p class="text-muted"># Manage your booking schedule</p> | ||
<p class="text-muted"># Set filters of approved dogs and services you provide</p> | ||
<p class="text-muted"># Read / write reviews of dog owners and their dogs</p> | ||
<p class="text-muted"># Chat with dog owners</p> | ||
</div> | ||
<hr> | ||
<div class="mt-5"> | ||
<h5>Have a look at your reviews</h5> | ||
<table class="table table-hover table-bordered table-responsive"> | ||
<thead class="table-dark"> | ||
<tr> | ||
<th scope="col">#</th> | ||
<th scope="col">Name</th> | ||
<th scope="col">Date</th> | ||
<th scope="col">Review</th> | ||
<th scope="col">Rating</th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
{% for review in reviews %} | ||
<tr> | ||
<th scope="row">{{ forloop.counter }}</th> | ||
<td>{{ review.dogowner_id }}</td> | ||
<td>{{ review.creation_date }}</td> | ||
<td>{{ review.review }}</td> | ||
<td>{{ review.rating }}</td> | ||
</tr> | ||
{% endfor %} | ||
</tbody> | ||
</table> | ||
|
||
</div> | ||
</div> | ||
<div class="col-md-5"> | ||
<div class="card h-100"> | ||
<ul class="nav nav-pills" id="myTab" role="tablist"> | ||
<li class="nav-item"> | ||
<a class="nav-link active" id="apt-tab-{{daycare.id}}" data-toggle="tab" | ||
href="#apt-{{daycare.id}}" role="tab" aria-controls="apt-{{daycare.id}}" | ||
aria-selected="true">Daycare Profile Details</a> | ||
</li> | ||
</ul> | ||
|
||
<div class="tab-content" id="card-tab-content"> | ||
<div class="tab-pane fade show active" id="apt-{{daycare.id}}" role="tabpanel" | ||
aria-labelledby="apt-tab-{{daycare.id}}"> | ||
|
||
<div id="imageSlides" class="carousel slide" data-ride="carousel"> | ||
<!-- Indicators --> | ||
<ul class="carousel-indicators"> | ||
{% for image in images %} | ||
{% if forloop.counter == 1 %} | ||
<li data-target="#imageSlides" data-slide-to={{image.id}} class="active"></li> | ||
{% else %} | ||
<li data-target="#imageSlides" data-slide-to={{image.id}}></li> | ||
{% endif %} | ||
{% endfor%} | ||
</ul> | ||
|
||
|
||
<!-- The slideshow --> | ||
<div class="carousel-inner"> | ||
{% for image in images %} | ||
{% if forloop.counter == 1 %} | ||
<div class="carousel-item active"> | ||
<img src={{image.url}} class="img-fluid" width="900" height="400"> | ||
</div> | ||
{% else %} | ||
<div class="carousel-item"> | ||
<img src={{image.url}} class="img-fluid" width="900" height="400"> | ||
</div> | ||
{% endif %} | ||
{% endfor %} | ||
</div> | ||
|
||
<!-- Left and right controls --> | ||
<a class="carousel-control-prev" href="#imageSlides" data-slide="prev"> | ||
<span class="carousel-control-prev-icon"></span> | ||
</a> | ||
<a class="carousel-control-next" href="#imageSlides" data-slide="next"> | ||
<span class="carousel-control-next-icon"></span> | ||
</a> | ||
</div> | ||
<div class="card-body"> | ||
<h5 class="card-title">{{daycare.address}}, {{daycare.city}}</h5> | ||
<br> | ||
<h6><i class="fas fa-dog"></i> Capacity: {{daycare.capacity}} | ||
<br> | ||
<br> | ||
<i class="fas fa-coins"></i> Price: {{daycare.price_per_day}} | ||
</h6> | ||
<br> | ||
<h6><strong>About</strong></h6> | ||
<p class="card-text">{{daycare.description}}</p> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
|
||
</div> | ||
</div> | ||
|
||
{% endblock %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,6 +2,9 @@ | |
from .models import DayCare | ||
from django.core.exceptions import ValidationError | ||
from django.contrib.auth.models import User | ||
from .models import Image | ||
import random | ||
from review.models import Review | ||
|
||
|
||
@pytest.mark.django_db() | ||
|
@@ -61,3 +64,26 @@ def test_daycare_user_creation_with_same_user_name(self, create_daycare_user): | |
DayCare.create(username='testUser01', email="[email protected]", password='pass123', name='daycare', | ||
description='new description', price_per_day=10, capacity=50, | ||
area='north', city='haifa', address='new address') | ||
|
||
def test_daycare_redirected_homepage_after_login(self, client, create_daycare_user): | ||
client.force_login(user=create_daycare_user.user) | ||
response = client.get('/') | ||
assert response.status_code == 302 | ||
assert response['Location'] == '/homepage/' | ||
|
||
def test_relevant_daycare_homepage_with_static_data(self, client, create_daycare_user): | ||
dayCare = random.choice([daycare for daycare in DayCare.objects.all() if 'static' in daycare.user.username]) | ||
client.force_login(user=dayCare.user) | ||
|
||
response = client.get('/homepage/') | ||
|
||
daycare_shown_in_homepage = response.context['daycare'] | ||
assert daycare_shown_in_homepage == dayCare | ||
|
||
images_shown_in_homepage = set(response.context['images']) | ||
daycare_images = set(Image.get_images_by_daycare_id(daycare_id=dayCare.id)) | ||
assert images_shown_in_homepage == daycare_images | ||
|
||
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,15 @@ | ||
# from django.shortcuts import render | ||
from django.shortcuts import render | ||
from django.contrib.auth.decorators import login_required | ||
from .models import Image | ||
from review.models import Review | ||
|
||
# Create your views here. | ||
|
||
@login_required(login_url='login') | ||
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) | ||
} | ||
|
||
return render(request, 'daycare/daycare-homepage.html', context) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -52,6 +52,24 @@ def test_invalid_login_dog_owner_user_info(self, client): | |
response = client.post('/login/', form, follow=True) | ||
assert response.wsgi_request.user.is_anonymous | ||
|
||
def test_valid_login_daycare_user_info(self, client, create_daycare_user): | ||
previous_logged_user = client.get('/').wsgi_request.user | ||
form = {'username': 'testuser01', | ||
'password': 'pass', | ||
} | ||
|
||
response = client.post('/login/', form, follow=True) | ||
current_log_user = response.wsgi_request.user | ||
assert current_log_user == create_daycare_user.user | ||
assert previous_logged_user != current_log_user | ||
|
||
def test_invalid_login_daycare_user_info(self, client): | ||
form = {'username': "[email protected]", | ||
'password': "incorrect", | ||
} | ||
response = client.post('/login/', form, follow=True) | ||
assert response.wsgi_request.user.is_anonymous | ||
|
||
def test_block_logged_user_from_login_page(self, client, create_dog_owner_user): | ||
client.force_login(user=create_dog_owner_user.user) | ||
response = client.get("/login/") | ||
|
@@ -75,8 +93,8 @@ def test_root_entrypoint_redirection_unlogged_user(self, client): | |
assert response.status_code == 302 | ||
assert response['Location'] == '/login/' | ||
|
||
def test_root_entrypoint_redirection_logged_user(self, client, create_dog_owner_user): | ||
client.force_login(user=create_dog_owner_user.user) | ||
def test_root_entrypoint_redirection_logged_daycare_user(self, client, create_daycare_user): | ||
client.force_login(user=create_daycare_user.user) | ||
response = client.get("/") | ||
assert response.status_code == 302 | ||
assert response['Location'] == '/homepage/' | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters