Add some unit tests for supervisor management

This commit is contained in:
Ross
2023-11-27 13:41:49 +00:00
parent 5cc57587aa
commit f720bbe765
4 changed files with 88 additions and 10 deletions
@@ -1,11 +1,11 @@
{% extends 'generic/supervisor_base.html' %}
{% block content %}
<h2>Supervisor: {{object.name}}</h2>
{{object.email}}
<h2>Supervisor: <span id="name">{{object.name}}</span></h2>
<span id="email">{{object.email}}</span>
<br/>User account: {{object.user}}
<br/>Site: {{object.site}}
<br/>User account: <span id="user">{{object.user}}</span>
<br/>Site: <span id="site">{{object.site}}</span>
<br/>Trainee(s): {% for trainee in object.trainee.all %}
<a href="{% url 'account_profile' trainee.user.username %}">{{trainee.user}}
@@ -3,9 +3,9 @@
<h2>Supervisors</h2>
<ul>
<ul id="supervisor-list">
{% for supervisor in object_list %}
<li><a href="{% url 'generic:supervisor_detail' pk=supervisor.pk %}">{{supervisor.name}}</a>
<li class="supervisor"><a href="{% url 'generic:supervisor_detail' pk=supervisor.pk %}">{{supervisor.name}}</a>
<br/>{{supervisor.email}} [{{supervisor.site}}]
</li>
{% endfor %}
+79 -3
View File
@@ -17,6 +17,8 @@ from longs.views import GenericExamViews as LongExamViews
from physics.views import GenericExamViews as PhysicExamViews
from anatomy.views import GenericExamViews as AnatomyExamViews
from generic.models import Supervisor
APP_NAMES = ("rapids", "anatomy", "longs", "physics", "sbas")
JSON_APPS = ("rapids", "anatomy", "longs")
@@ -52,6 +54,12 @@ def create_cid_manager(db, django_user_model):
user.groups.add(g)
return user
@pytest.fixture
def create_basic_user(db, django_user_model):
user = django_user_model.objects.create_user(
"basicuser", "basic@user.com", "password1234"
)
return user
@pytest.fixture(params=EXAM_VIEWS)
def set_up_exams(request, django_user_model, create_superuser):
@@ -227,7 +235,7 @@ def test_index(client, create_superuser, exam_views, django_user_model):
assert len(json_response) == 2
def test_cid_management(client, create_cid_manager, django_user_model):
def test_cid_management(client, create_cid_manager, django_user_model, create_basic_user):
urls = [
reverse(f"people"),
#reverse(f"generic:update_cid"),
@@ -237,24 +245,92 @@ def test_cid_management(client, create_cid_manager, django_user_model):
reverse(f"generic:cid_group_view"),
reverse(f"generic:cid_group_view_all"),
reverse(f"generic:cid_group_create"),
reverse(f"generic:supervisor"),
]
for url in urls:
response = client.get(url)
# Some urls will try to redirect to a login page
if response.status_code == 302:
assert "accounts/login/" in response.url
else:
# Others just forbid
assert response.status_code == 403
pass
basic_user = create_basic_user
client.force_login(basic_user)
for url in urls:
# When logged in there should be no redirection (if access denied)
response = client.get(url)
assert response.status_code == 403
cid_manager = create_cid_manager
client.force_login(cid_manager)
for url in urls:
print(url)
response = client.get(url)
assert response.status_code == 200
pass
pass
def create_supervisor(db, faker):
return Supervisor.objects.create(email=faker.email(), name=faker.name())
def test_supervisor_management(db, faker, client, create_cid_manager, django_user_model, create_basic_user ):
s1 = create_supervisor(db, faker)
s2 = create_supervisor(db, faker)
print(s1)
print(s2)
basic_user = create_basic_user
client.force_login(basic_user)
response = client.get(reverse(f"generic:supervisor_detail", kwargs={"pk": s1.pk}))
assert response.status_code == 403
response = client.get(reverse(f"generic:supervisor"))
assert response.status_code == 403
# Check we can not delete
response = client.post(reverse(f"generic:supervisor_delete", kwargs={"pk": s2.pk}))
assert response.status_code == 403
cid_manager = create_cid_manager
client.force_login(cid_manager)
response = client.get(reverse(f"generic:supervisor"))
assert response.status_code == 200
soup = BeautifulSoup(response.content, "html.parser")
assert len(soup.find(id="supervisor-list").find_all("li")) == 2
response = client.get(reverse(f"generic:supervisor_detail", kwargs={"pk": s1.pk}))
soup = BeautifulSoup(response.content, "html.parser")
assert soup.find(id="name").text == s1.name
assert soup.find(id="email").text == s1.email
new_email = "new@email.com"
response = client.post(reverse(f"generic:supervisor_edit", kwargs={"pk": s1.pk}), {"email":new_email, "name": s1.name})
soup = BeautifulSoup(response.content, "html.parser")
assert response.status_code == 302
response = client.get(reverse(f"generic:supervisor_detail", kwargs={"pk": s1.pk}))
soup = BeautifulSoup(response.content, "html.parser")
assert soup.find(id="name").text == s1.name
assert soup.find(id="email").text == new_email
# Check we can delete
response = client.post(reverse(f"generic:supervisor_delete", kwargs={"pk": s2.pk}))
assert response.status_code == 302
response = client.get(reverse(f"generic:supervisor"))
assert response.status_code == 200
soup = BeautifulSoup(response.content, "html.parser")
assert len(soup.find(id="supervisor-list").find_all("li")) == 1
+3 -1
View File
@@ -38,4 +38,6 @@ django-ninja
crispy-bootstrap4
django-rich
ipython
django-htmx-autocomplete
django-htmx-autocomplete
faker
pytest-faker