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' %} {% extends 'generic/supervisor_base.html' %}
{% block content %} {% block content %}
<h2>Supervisor: {{object.name}}</h2> <h2>Supervisor: <span id="name">{{object.name}}</span></h2>
{{object.email}} <span id="email">{{object.email}}</span>
<br/>User account: {{object.user}} <br/>User account: <span id="user">{{object.user}}</span>
<br/>Site: {{object.site}} <br/>Site: <span id="site">{{object.site}}</span>
<br/>Trainee(s): {% for trainee in object.trainee.all %} <br/>Trainee(s): {% for trainee in object.trainee.all %}
<a href="{% url 'account_profile' trainee.user.username %}">{{trainee.user}} <a href="{% url 'account_profile' trainee.user.username %}">{{trainee.user}}
@@ -3,9 +3,9 @@
<h2>Supervisors</h2> <h2>Supervisors</h2>
<ul> <ul id="supervisor-list">
{% for supervisor in object_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}}] <br/>{{supervisor.email}} [{{supervisor.site}}]
</li> </li>
{% endfor %} {% endfor %}
+79 -3
View File
@@ -17,6 +17,8 @@ from longs.views import GenericExamViews as LongExamViews
from physics.views import GenericExamViews as PhysicExamViews from physics.views import GenericExamViews as PhysicExamViews
from anatomy.views import GenericExamViews as AnatomyExamViews from anatomy.views import GenericExamViews as AnatomyExamViews
from generic.models import Supervisor
APP_NAMES = ("rapids", "anatomy", "longs", "physics", "sbas") APP_NAMES = ("rapids", "anatomy", "longs", "physics", "sbas")
JSON_APPS = ("rapids", "anatomy", "longs") JSON_APPS = ("rapids", "anatomy", "longs")
@@ -52,6 +54,12 @@ def create_cid_manager(db, django_user_model):
user.groups.add(g) user.groups.add(g)
return user 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) @pytest.fixture(params=EXAM_VIEWS)
def set_up_exams(request, django_user_model, create_superuser): 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 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 = [ urls = [
reverse(f"people"), reverse(f"people"),
#reverse(f"generic:update_cid"), #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"),
reverse(f"generic:cid_group_view_all"), reverse(f"generic:cid_group_view_all"),
reverse(f"generic:cid_group_create"), reverse(f"generic:cid_group_create"),
reverse(f"generic:supervisor"),
] ]
for url in urls: for url in urls:
response = client.get(url) response = client.get(url)
# Some urls will try to redirect to a login page
if response.status_code == 302: if response.status_code == 302:
assert "accounts/login/" in response.url assert "accounts/login/" in response.url
else: else:
# Others just forbid
assert response.status_code == 403 assert response.status_code == 403
pass 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 cid_manager = create_cid_manager
client.force_login(cid_manager) client.force_login(cid_manager)
for url in urls: for url in urls:
print(url)
response = client.get(url) response = client.get(url)
assert response.status_code == 200 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 crispy-bootstrap4
django-rich django-rich
ipython ipython
django-htmx-autocomplete django-htmx-autocomplete
faker
pytest-faker