def test_save_role(self): from apps.icanhaz.models import VideoVisibilityPolicy owner = self.team.members.filter(role=ROLE_OWNER)[0] member = self.team.members.filter(role=ROLE_CONTRIBUTOR)[0] member.user.set_password("hey") member.user.save() tv = self.team.teamvideo_set.all()[0] video_url = reverse("videos:video", args=(tv.video.video_id, )) owner.user.set_password("hey") owner.user.save() policy = VideoVisibilityPolicy.objects.create_for_video( tv.video, VideoVisibilityPolicy.SITE_VISIBILITY_PRIVATE_OWNER, self.team, ) resp = self.client.get(video_url, follow=True) self.assertNotEqual(resp.status_code, 200) self.team.video_policy = Team.VP_MEMBER self.task_assign_policy = 10 self.team.save() self.assertTrue(can_add_video(self.team, member.user)) self.assertTrue(can_add_video_somewhere(self.team, member.user)) self.assertTrue(can_view_tasks_tab(self.team, member.user)) self.assertTrue(can_create_and_edit_subtitles(member.user, tv)) self.assertTrue(can_create_and_edit_translations(member.user, tv)) self.assertFalse(can_view_settings_tab(self.team, member.user)) save_role(self.team, member, ROLE_ADMIN, [], [], owner.user) member = TeamMember.objects.get(pk=member.pk) self.assertEqual(member.role, ROLE_ADMIN) self.assertTrue(can_add_video_somewhere(self.team, member.user)) self.assertTrue(can_view_tasks_tab(self.team, member.user)) self.assertTrue(can_create_and_edit_subtitles(member.user, tv)) self.assertTrue(can_create_and_edit_translations(member.user, tv)) self.assertTrue(can_view_settings_tab(self.team, member.user)) save_role(self.team, member, ROLE_CONTRIBUTOR, [], [], owner.user) member = TeamMember.objects.get(pk=member.pk) self.assertEqual(member.role, ROLE_CONTRIBUTOR) self.assertFalse(can_view_settings_tab(self.team, member.user)) self.assertTrue(can_add_video_somewhere(self.team, member.user)) self.assertTrue(can_view_tasks_tab(self.team, member.user)) self.assertTrue(can_create_and_edit_subtitles(member.user, tv)) self.assertTrue(can_create_and_edit_translations(member.user, tv)) self.client.login(username=member.user.username, password="******") resp = self.client.get(video_url, follow=True) self.assertEqual(resp.status_code, 200)
def test_save_role(self): owner = self.owner member_account = test_factories.create_user(username='******', password='******') member = test_factories.create_team_member( self.team, member_account, role=TeamMember.ROLE_CONTRIBUTOR) tv = self.project_video video_url = reverse("videos:video", args=(tv.video.video_id,)) owner.user.set_password("hey") owner.user.save() self.team.is_visible = False self.team.save() resp = self.client.get(video_url, follow=True) self.assertNotEqual(resp.status_code, 200) self.team.video_policy = Team.VP_MEMBER self.task_assign_policy = 10 self.team.save() self.assertTrue(can_add_video(self.team, member.user)) self.assertTrue(can_add_video_somewhere(self.team, member.user)) self.assertTrue(can_view_tasks_tab(self.team, member.user)) self.assertTrue(can_create_and_edit_subtitles(member.user, tv)) self.assertTrue(can_create_and_edit_translations(member.user, tv)) self.assertFalse(can_view_settings_tab(self.team, member.user)) save_role(self.team, member, ROLE_ADMIN, [], [], owner.user) member = TeamMember.objects.get(pk=member.pk) self.assertEqual(member.role, ROLE_ADMIN) self.assertTrue(can_add_video_somewhere(self.team, member.user)) self.assertTrue(can_view_tasks_tab(self.team, member.user)) self.assertTrue(can_create_and_edit_subtitles(member.user, tv)) self.assertTrue(can_create_and_edit_translations(member.user, tv)) self.assertTrue(can_view_settings_tab(self.team, member.user)) save_role(self.team, member, ROLE_CONTRIBUTOR, [], [], owner.user) member = TeamMember.objects.get(pk=member.pk) self.assertEqual(member.role, ROLE_CONTRIBUTOR) self.assertFalse(can_view_settings_tab(self.team, member.user)) self.assertTrue(can_add_video_somewhere(self.team, member.user)) self.assertTrue(can_view_tasks_tab(self.team, member.user)) self.assertTrue(can_create_and_edit_subtitles(member.user, tv)) self.assertTrue(can_create_and_edit_translations(member.user, tv)) self.client.login(username=member.user.username, password="******") resp = self.client.get(video_url, follow=True) self.assertEqual(resp.status_code, 200)
def _verify_team_policies(self, team_video, language_code, from_language_code): # if this is being saved as part of a task, than permissions mean # something else. For example a team might require admins to transcribe # but if it allows managers to review, then saves done as part of a review # task can be done by a manager (nice huh?) possible_task_languages = [language_code, ''] try: # If a task exist, we should let permissions be checked by _verify_no_blocking_review... # so don't bother with assignment team_video.task_set.incomplete_review_or_approve().filter(language__in=possible_task_languages).exists() return except Task.DoesNotExist: pass is_transcription = (not from_language_code) if is_transcription: allowed = can_create_and_edit_subtitles(self.user, team_video, language_code) if not allowed: raise forms.ValidationError(_( u"Sorry, we can't upload your subtitles because this " u"language is moderated and you don't have permission to " u"transcribe subtitles.")) else: allowed = can_create_and_edit_translations(self.user, team_video, language_code) if not allowed: raise forms.ValidationError(_( u"Sorry, we can't upload your subtitles because this " u"language is moderated and you don't have permission to " u"translate subtitles."))
def can_create_translations_for(user, video): """Return True if the user can create translations for this video. Safe to use with anonymous users as well as non-team videos. Usage: {% if request.user|can_create_translations_for:video %} ... {% endif %} """ team_video = video.get_team_video() if not team_video: return True else: return can_create_and_edit_translations(user, team_video)