diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aef73af..c4a942e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ stages: - test - quality-assurance -py38-django31: +py38: stage: test image: python:3-alpine before_script: diff --git a/apps/participation/tests.py b/apps/participation/tests.py index 8bbeefa..b748b5c 100644 --- a/apps/participation/tests.py +++ b/apps/participation/tests.py @@ -122,6 +122,32 @@ class TestStudentParticipation(TestCase): self.assertRedirects(response, reverse("participation:team_detail", args=(self.team.pk,)), 302, 200) self.assertTrue(Team.objects.filter(trigram="BBB", participation__problem=3).exists()) + def test_participation_detail(self): + self.user.registration.team = self.team + self.user.registration.save() + + response = self.client.get(reverse("participation:participation_detail", args=(self.team.participation.pk,))) + self.assertEqual(response.status_code, 200) + + def test_upload_video(self): + self.user.registration.team = self.team + self.user.registration.save() + + response = self.client.get(reverse("participation:upload_video", args=(self.team.participation.solution.pk,))) + self.assertEqual(response.status_code, 200) + + response = self.client.post(reverse("participation:upload_video", args=(self.team.participation.solution.pk,)), + data=dict(link="https://youtube.com/watch?v=73nsrixx7eI")) + self.assertRedirects(response, + reverse("participation:participation_detail", args=(self.team.participation.id,)), + 302, 200) + self.team.participation.refresh_from_db() + self.assertEqual(self.team.participation.solution.platform, "youtube") + self.assertEqual(self.team.participation.solution.youtube_code, "73nsrixx7eI") + + response = self.client.get(reverse("participation:participation_detail", args=(self.team.participation.pk,))) + self.assertEqual(response.status_code, 200) + class TestAdminForbidden(TestCase): def setUp(self) -> None: diff --git a/apps/participation/views.py b/apps/participation/views.py index 313f399..920bf56 100644 --- a/apps/participation/views.py +++ b/apps/participation/views.py @@ -147,7 +147,7 @@ class UploadVideoView(LoginRequiredMixin, UpdateView): def dispatch(self, request, *args, **kwargs): user = request.user if user.registration.is_admin or user.registration.participates\ - and user.registration.team.participation.pk == self.object.participation.pk: + and user.registration.team.participation.pk == self.get_object().participation.pk: return super().dispatch(request, *args, **kwargs) raise PermissionDenied diff --git a/apps/registration/views.py b/apps/registration/views.py index 7b4819a..1b8acf7 100644 --- a/apps/registration/views.py +++ b/apps/registration/views.py @@ -4,7 +4,7 @@ from corres2math.tokens import email_validation_token from django.conf import settings from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.models import User -from django.core.exceptions import ValidationError, PermissionDenied +from django.core.exceptions import PermissionDenied, ValidationError from django.db import transaction from django.http import FileResponse, Http404 from django.shortcuts import redirect, resolve_url diff --git a/tox.ini b/tox.ini index 009e2e8..d9a9ec9 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] envlist = - py38-django31 + py38 linters skipsdist = True