예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
    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."))
예제 #4
0
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)