Add some unit tests for supervisor management
This commit is contained in:
@@ -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 %}
|
||||
|
||||
@@ -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
@@ -38,4 +38,6 @@ django-ninja
|
||||
crispy-bootstrap4
|
||||
django-rich
|
||||
ipython
|
||||
django-htmx-autocomplete
|
||||
django-htmx-autocomplete
|
||||
faker
|
||||
pytest-faker
|
||||
Reference in New Issue
Block a user