Skip to content

Commit

Permalink
[DONE] Fix additional owner rights (#1167)
Browse files Browse the repository at this point in the history
* First try to fix the additional owners bug:
Add 2 funcs :  and

* Add Unit tests

* Clean duplicated UserFolders

* Flake8 compliance
  • Loading branch information
Badatos authored Jun 28, 2024
1 parent 46941e1 commit c59c7b4
Show file tree
Hide file tree
Showing 29 changed files with 385 additions and 207 deletions.
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
![last commit push](https://img.shields.io/github/last-commit/EsupPortail/Esup-Pod)
[![Author](https://img.shields.io/badge/author-Ptitloup-blue)](https://www.linkedin.com/in/nicolas-can-a6bb7869/)


## [FR]

### Plateforme de gestion de fichier vidéo
Expand Down
8 changes: 5 additions & 3 deletions pod/ai_enhancement/static/ai_enhancement/js/enrich-form.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
* @since 3.7.0
*/

// Read-only globals defined in main.js
/* global decodeString remove_quotes removeAccentsAndLowerCase */

const BORDER_CLASS = 'border-d';

Expand Down Expand Up @@ -92,7 +94,7 @@ function addTogglePairInput(aiVersionElement, initialVersionElement, input, elem
aiVersionElement.addEventListener('click', () => {
let input = document.getElementById('id_' + element);
togglePairInput(aiVersionElement, initialVersionElement, input, element);
})
});
input.addEventListener('input', () => event__inputChange(initialVersionElement, aiVersionElement));
}

Expand Down Expand Up @@ -182,7 +184,7 @@ function addEventListeners(videoSlug, videoTitle, videoDescription, videoDiscipl
'description',
'tags',
'disciplines',
]
];
const options = {
method: 'GET',
headers: {
Expand Down Expand Up @@ -227,7 +229,7 @@ function addEventListeners(videoSlug, videoTitle, videoDescription, videoDiscipl
});
aiVersionElement.addEventListener('click', () => {
toggleMultiplePairInput(aiVersionElement, initialVersionElement, input);
})
});
input.addEventListener('input', () => event__inputChange(initialVersionElement, aiVersionElement));
break;
}
Expand Down
6 changes: 1 addition & 5 deletions pod/ai_enhancement/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
from pod.main.lang_settings import ALL_LANG_CHOICES, PREF_LANG_CHOICES
from pod.main.utils import json_to_web_vtt
from pod.main.views import in_maintenance
from pod.podfile.models import UserFolder
from pod.quiz.utils import import_quiz
from pod.video.models import Video, Discipline
from pod.video_encode_transcript.transcript import saveVTT
Expand Down Expand Up @@ -349,10 +348,7 @@ def enhance_subtitles(request: WSGIRequest, video_slug: str) -> HttpResponse:
+ str(True)
)

video_folder, created = UserFolder.objects.get_or_create(
name=video.slug,
owner=request.user,
)
video_folder = video.get_or_create_video_folder()
if enhancement_is_already_asked(video):
enhancement = AIEnhancement.objects.filter(video=video).first()
if enhancement.is_ready:
Expand Down
50 changes: 25 additions & 25 deletions pod/completion/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def test_attributs_full(self) -> None:

print(" ---> test_attributs_full: OK! --- ContributorModel")

def test_attributs(self):
def test_attributs(self) -> None:
contributor = Contributor.objects.get(id=2)
video = Video.objects.get(id=1)
self.assertEqual(contributor.video, video)
Expand All @@ -76,7 +76,7 @@ def test_attributs(self):
print(" [ BEGIN COMPLETION_TEST_MODELS ] ")
print(" ---> test_attributs: OK! --- ContributorModel")

def test_bad_attributs(self):
def test_bad_attributs(self) -> None:
video = Video.objects.get(id=1)
contributor = Contributor()
contributor.video = video
Expand All @@ -90,7 +90,7 @@ def test_bad_attributs(self):

print(" ---> test_bad_attributs: OK! --- ContributorModel")

def test_same(self):
def test_same(self) -> None:
video = Video.objects.get(id=1)
contributor = Contributor()
contributor.video = video
Expand All @@ -100,20 +100,20 @@ def test_same(self):

print(" ---> test_same: OK! --- ContributorModel")

def test_delete(self):
def test_delete(self) -> None:
Contributor.objects.get(id=1).delete()
Contributor.objects.get(id=2).delete()
self.assertTrue(Contributor.objects.all().count() == 0)

print(" ---> test_delete: OK! --- ContributorModel")

def test_sites_property(self):
def test_sites_property(self) -> None:
"""Test the sites property of the Contributor model."""
contributor = Contributor.objects.get(id=1)
self.assertEqual(contributor.sites, Video.objects.get(id=1).sites)
print(" ---> test_sites_property: OK! --- ContributorModel")

def test_str(self):
def test_str(self) -> None:
"""Test the sites property of the Contributor model when the video is deleted."""
contributor = Contributor.objects.get(id=1)
video = Video.objects.get(id=1)
Expand Down Expand Up @@ -143,7 +143,7 @@ class DocumentModelTestCase(TestCase):
"initial_data.json",
]

def setUp(self):
def setUp(self) -> None:
owner = User.objects.create(username="test")
videotype = Type.objects.create(title="others")
video = Video.objects.create(
Expand All @@ -168,7 +168,7 @@ def setUp(self):
Document.objects.create(video=video, document=file)
Document.objects.create(video=video)

def test_attributs_full(self):
def test_attributs_full(self) -> None:
document = Document.objects.get(id=1)
video = Video.objects.get(id=1)
self.assertEqual(document.video, video)
Expand All @@ -179,28 +179,28 @@ def test_attributs_full(self):

print(" ---> test_attributs_full: OK! --- DocumentModel")

def test_attributs(self):
def test_attributs(self) -> None:
document = Document.objects.get(id=2)
video = Video.objects.get(id=1)
self.assertEqual(document.video, video)
self.assertEqual(document.document, None)

print(" ---> test_attributs: OK! --- DocumentModel")

def test_delete(self):
def test_delete(self) -> None:
Document.objects.get(id=1).delete()
Document.objects.get(id=2).delete()
self.assertTrue(Document.objects.all().count() == 0)

print(" ---> test_delete: OK! --- DocumentModel")

def test_sites_property(self):
def test_sites_property(self) -> None:
"""Test the sites property of the Contributor model."""
document = Document.objects.get(id=1)
self.assertEqual(document.sites, Video.objects.get(id=1).sites)
print(" ---> test_sites_property: OK! --- DocumentModel")

def test_str(self):
def test_str(self) -> None:
"""Test the __str__ method of the Document model."""
document = Document.objects.get(id=1)
video = Video.objects.get(id=1)
Expand All @@ -209,7 +209,7 @@ def test_str(self):
)
print(" ---> test_str: OK! --- DocumentModel")

def test_verify_document(self):
def test_verify_document(self) -> None:
"""Test the verify_document method of the Document model."""
document = Document.objects.get(id=1)
document.document = None
Expand All @@ -223,7 +223,7 @@ class OverlayModelTestCase(TestCase):
"initial_data.json",
]

def setUp(self):
def setUp(self) -> None:
owner = User.objects.create(username="test")
videotype = Type.objects.create(title="others")
video = Video.objects.create(
Expand All @@ -243,7 +243,7 @@ def setUp(self):
)
Overlay.objects.create(video=video, title="overlay2", content="test")

def test_attributs_full(self):
def test_attributs_full(self) -> None:
overlay = Overlay.objects.get(id=1)
video = Video.objects.get(id=1)
self.assertEqual(overlay.video, video)
Expand All @@ -255,7 +255,7 @@ def test_attributs_full(self):

print(" ---> test_attributs_full: OK! --- OverlayModel")

def test_attributs(self):
def test_attributs(self) -> None:
overlay = Overlay.objects.get(id=2)
video = Video.objects.get(id=1)
self.assertEqual(overlay.video, video)
Expand All @@ -268,7 +268,7 @@ def test_attributs(self):

print(" ---> test_attributs: OK! --- OverlayModel")

def test_title(self):
def test_title(self) -> None:
video = Video.objects.get(id=1)
overlay = Overlay()
overlay.video = video
Expand All @@ -279,7 +279,7 @@ def test_title(self):

print(" ---> test_title: OK! --- OverlayModel")

def test_times(self):
def test_times(self) -> None:
video = Video.objects.get(id=1)
overlay = Overlay()
overlay.video = video
Expand All @@ -295,7 +295,7 @@ def test_times(self):

print(" ---> test_times: OK! --- OverlayModel")

def test_overlap(self):
def test_overlap(self) -> None:
video = Video.objects.get(id=1)
overlay = Overlay()
overlay.video = video
Expand All @@ -307,7 +307,7 @@ def test_overlap(self):

print(" ---> test_overlap: OK! --- OverlayModel")

def test_delete(self):
def test_delete(self) -> None:
Overlay.objects.get(id=1).delete()
Overlay.objects.get(id=2).delete()
self.assertTrue(Overlay.objects.all().count() == 0)
Expand All @@ -320,7 +320,7 @@ class TrackModelTestCase(TestCase):
"initial_data.json",
]

def setUp(self):
def setUp(self) -> None:
owner = User.objects.create(username="test")
videotype = Type.objects.create(title="others")
video = Video.objects.create(
Expand All @@ -345,7 +345,7 @@ def setUp(self):
Track.objects.create(video=video, lang="fr", kind="captions", src=file)
Track.objects.create(video=video, lang="en")

def test_attributs_full(self):
def test_attributs_full(self) -> None:
track = Track.objects.get(id=1)
video = Video.objects.get(id=1)
self.assertEqual(track.video, video)
Expand All @@ -356,7 +356,7 @@ def test_attributs_full(self):

print(" ---> test_attributs_full: OK! --- TrackModel")

def test_attributs(self):
def test_attributs(self) -> None:
track = Track.objects.get(id=2)
video = Video.objects.get(id=1)
self.assertEqual(track.video, video)
Expand All @@ -366,7 +366,7 @@ def test_attributs(self):

print(" ---> test_attributs: OK! --- TrackModel")

def test_bad_attributs(self):
def test_bad_attributs(self) -> None:
track = Track.objects.get(id=1)
track.kind = None
self.assertRaises(ValidationError, track.clean)
Expand All @@ -381,7 +381,7 @@ def test_bad_attributs(self):

print(" ---> test_bad_attributs: OK! --- TrackModel")

def test_same(self):
def test_same(self) -> None:
video = Video.objects.get(id=1)
track = Track()
track.video = video
Expand Down
10 changes: 3 additions & 7 deletions pod/completion/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
from .models import Overlay
from .forms import OverlayForm
from .models import CustomFileModel
from pod.podfile.models import UserFolder
from pod.podfile.views import get_current_session_folder, file_edit_save
from pod.main.lang_settings import ALL_LANG_CHOICES, PREF_LANG_CHOICES
from pod.main.settings import LANGUAGE_CODE
Expand Down Expand Up @@ -58,9 +57,7 @@ def get_completion_home_page_title(video: Video) -> str:
def video_caption_maker(request, slug):
"""Caption maker app."""
video = get_object_or_404(Video, slug=slug, sites=get_current_site(request))
video_folder, created = UserFolder.objects.get_or_create(
name=video.slug, owner=request.user
)

request.session["current_session_folder"] = video.slug
action = None
if (
Expand All @@ -74,6 +71,7 @@ def video_caption_maker(request, slug):
request, messages.ERROR, _("You cannot complement this video.")
)
raise PermissionDenied
video_folder = video.get_or_create_video_folder()
if request.method == "POST" and request.POST.get("action"):
action = request.POST.get("action")
if action in __CAPTION_MAKER_ACTION__:
Expand Down Expand Up @@ -111,9 +109,7 @@ def video_caption_maker(request, slug):
@staff_member_required(redirect_field_name="referrer")
def video_caption_maker_save(request, video):
"""Caption maker save view."""
video_folder, created = UserFolder.objects.get_or_create(
name=video.slug, owner=request.user
)
video_folder = video.get_or_create_video_folder()

if request.method == "POST":
error = False
Expand Down
21 changes: 13 additions & 8 deletions pod/cut/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,20 @@
from .. import views
from importlib import reload

# ggignore-start
# gitguardian:ignore
PWD = "azerty1234" # nosec
# ggignore-end


class CutVideoViewsTestCase(TestCase):
fixtures = [
"initial_data.json",
]

def setUp(self):
self.user = User.objects.create(username="test", password="azerty", is_staff=True)
self.user2 = User.objects.create(username="test2", password="azerty")
def setUp(self) -> None:
self.user = User.objects.create(username="test", password=PWD, is_staff=True)
self.user2 = User.objects.create(username="test2", password=PWD)
self.video = Video.objects.create(
title="videotest",
owner=self.user,
Expand All @@ -30,7 +35,7 @@ def setUp(self):
)
self.video.additional_owners.add(self.user2)

def test_maintenance(self):
def test_maintenance(self) -> None:
"""Test Pod maintenance mode in CutVideoViewsTestCase."""
self.client.force_login(self.user)
url = reverse("cut:video_cut", kwargs={"slug": self.video.slug})
Expand All @@ -46,7 +51,7 @@ def test_maintenance(self):
self.assertRedirects(response, "/maintenance/")
print(" ---> test_maintenance ok")

def test_get_full_duration(self):
def test_get_full_duration(self) -> None:
"""Test test_get_full_duration."""
CutVideo.objects.create(
video=self.video, start=time(0, 0, 0), end=time(0, 0, 10), duration="00:00:10"
Expand All @@ -61,7 +66,7 @@ def test_get_full_duration(self):
print(" ---> test_get_full_duration ok")

@override_settings(RESTRICT_EDIT_VIDEO_ACCESS_TO_STAFF_ONLY=True, USE_CUT=True)
def test_restrict_edit_video_access_staff_only(self):
def test_restrict_edit_video_access_staff_only(self) -> None:
"""Test test_restrict_edit_video_access_staff_only."""
reload(views)
self.client.force_login(self.user2)
Expand All @@ -80,7 +85,7 @@ def test_restrict_edit_video_access_staff_only(self):

print(" ---> test_restrict_edit_video_access_staff_only ok")

def test_post_cut_valid_form(self):
def test_post_cut_valid_form(self) -> None:
"""Test test_post_cut_valid_form."""
self.client.force_login(self.user)
post_data = {
Expand All @@ -101,7 +106,7 @@ def test_post_cut_valid_form(self):

print(" ---> test_post_cut_valid_form ok")

def test_post_cut_invalid_form(self):
def test_post_cut_invalid_form(self) -> None:
"""Test test_post_cut_invalid_form."""
self.client.force_login(self.user)
post_data = {
Expand Down
Loading

0 comments on commit c59c7b4

Please sign in to comment.