1
0
mirror of https://gitlab.com/animath/si/plateforme-corres2math.git synced 2025-02-12 08:21:17 +00:00

Compare commits

..

3 Commits

Author SHA1 Message Date
Yohann D'ANELLO
7ae2b152c6 Test participation admin pages 2020-11-02 16:57:38 +01:00
Yohann D'ANELLO
682ef05110 Rename a test 2020-11-02 16:19:39 +01:00
Yohann D'ANELLO
4043d04826 Add admin pages for Participation app 2020-11-02 16:17:07 +01:00
3 changed files with 116 additions and 6 deletions

View File

@ -0,0 +1,46 @@
from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from .models import Participation, Phase, Question, Team, Video
@admin.register(Team)
class TeamAdmin(admin.ModelAdmin):
list_display = ('name', 'trigram', 'problem', 'valid',)
search_fields = ('name', 'trigram',)
list_filter = ('participation__problem', 'participation__valid',)
def problem(self, team):
return team.participation.get_problem_display()
problem.short_description = _('problem number')
def valid(self, team):
return team.participation.valid
valid.short_description = _('valid')
@admin.register(Participation)
class ParticipationAdmin(admin.ModelAdmin):
list_display = ('team', 'problem', 'valid',)
search_fields = ('team__name', 'team__trigram',)
list_filter = ('problem', 'valid',)
@admin.register(Video)
class VideoAdmin(admin.ModelAdmin):
list_display = ('participation', 'link',)
search_fields = ('participation__team__name', 'participation__team__trigram', 'link',)
@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
list_display = ('participation', 'question',)
search_fields = ('participation__team__name', 'participation__team__trigram', 'question',)
@admin.register(Phase)
class PhaseAdmin(admin.ModelAdmin):
list_display = ('phase_number', 'start', 'end',)
ordering = ('phase_number', 'start',)

View File

@ -1,9 +1,11 @@
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.contrib.sites.models import Site
from django.test import TestCase from django.test import TestCase
from django.urls import reverse from django.urls import reverse
from registration.models import StudentRegistration from registration.models import StudentRegistration
from .models import Team from .models import Participation, Question, Team, Video
class TestStudentParticipation(TestCase): class TestStudentParticipation(TestCase):
@ -27,11 +29,72 @@ class TestStudentParticipation(TestCase):
access_code="azerty", access_code="azerty",
grant_animath_access_videos=True, grant_animath_access_videos=True,
) )
self.question = Question.objects.create(participation=self.team.participation,
question="Pourquoi l'existence précède l'essence ?")
self.client.force_login(self.user) self.client.force_login(self.user)
# TODO Remove these lines def test_admin_pages(self):
str(self.team) """
str(self.team.participation) Load Django-admin pages.
"""
superuser = User.objects.create_superuser(
username="admin",
email="admin@example.com",
password="toto1234",
)
self.client.force_login(superuser)
# Test team pages
response = self.client.get(reverse("admin:index") + "participation/team/")
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse("admin:index")
+ f"participation/team/{self.team.pk}/change/")
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse("admin:index") +
f"r/{ContentType.objects.get_for_model(Team).id}/"
f"{self.team.pk}/")
self.assertRedirects(response, "http://" + Site.objects.get().domain +
str(self.team.get_absolute_url()), 302, 200)
# Test participation pages
self.team.participation.valid = True
self.team.participation.save()
response = self.client.get(reverse("admin:index") + "participation/participation/")
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse("admin:index")
+ f"participation/participation/{self.team.participation.pk}/change/")
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse("admin:index") +
f"r/{ContentType.objects.get_for_model(Participation).id}/"
f"{self.team.participation.pk}/")
self.assertRedirects(response, "http://" + Site.objects.get().domain +
str(self.team.participation.get_absolute_url()), 302, 200)
# Test video pages
response = self.client.get(reverse("admin:index") + "participation/video/")
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse("admin:index")
+ f"participation/video/{self.team.participation.solution.pk}/change/")
self.assertEqual(response.status_code, 200)
# Test question pages
response = self.client.get(reverse("admin:index") + "participation/question/")
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse("admin:index")
+ f"participation/question/{self.question.pk}/change/")
self.assertEqual(response.status_code, 200)
# Test phase pages
response = self.client.get(reverse("admin:index") + "participation/phase/")
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse("admin:index")
+ f"participation/phase/1/change/")
self.assertEqual(response.status_code, 200)
def test_create_team(self): def test_create_team(self):
""" """
@ -62,6 +125,7 @@ class TestStudentParticipation(TestCase):
trigram="TET", trigram="TET",
grant_animath_access_videos=False, grant_animath_access_videos=False,
)) ))
self.assertEqual(response.status_code, 403)
def test_join_team(self): def test_join_team(self):
""" """

View File

@ -318,7 +318,7 @@ class TestRegistration(TestCase):
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertTrue(response.context["object_list"]) self.assertTrue(response.context["object_list"])
def test_string_render(self): def test_not_implemented_error(self):
# TODO These string field tests will be removed when used in a template # Only for coverage
self.assertRaises(NotImplementedError, lambda: Registration().type) self.assertRaises(NotImplementedError, lambda: Registration().type)
self.assertRaises(NotImplementedError, lambda: Registration().form_class) self.assertRaises(NotImplementedError, lambda: Registration().form_class)