예제 #1
0
    def test_language_number(self):
        date_maker = CreationDateMaker()
        user = test_factories.create_team_member(self.team).user

        video = test_factories.create_video(primary_audio_language_code='en')
        test_factories.create_team_video(self.team, user, video)
        self.add_subtitles(video, 'en', make_subtitle_lines(4),
                           created=date_maker.next_date(),
                           complete=True)
        self.add_subtitles(video, 'fr', make_subtitle_lines(4),
                           created=date_maker.next_date(),
                           complete=True)
        self.add_subtitles(video, 'de', make_subtitle_lines(4),
                           created=date_maker.next_date(),
                           complete=True)

        video2 = test_factories.create_video(primary_audio_language_code='en')
        test_factories.create_team_video(self.team, user, video2)
        # the english version was added before the date range of the report.
        # It should still bump the language number though.
        self.add_subtitles(video2, 'en', make_subtitle_lines(4),
                           created=date_maker.date_before_start(),
                           complete=True)
        self.add_subtitles(video2, 'fr', make_subtitle_lines(4),
                           created=date_maker.next_date(),
                           complete=True)

        data = self.get_report_data(self.team,
                                           date_maker.start_date(),
                                           date_maker.end_date())
        self.assertEquals(data['record count'], 4)
        self.assertEquals(data[video.video_id]['en']['Language number'], 1)
        self.assertEquals(data[video.video_id]['fr']['Language number'], 2)
        self.assertEquals(data[video.video_id]['de']['Language number'], 3)
        self.assertEquals(data[video2.video_id]['fr']['Language number'], 2)
예제 #2
0
    def test_check_authorization_team(self):
        # test check_authorization when linked to a team
        team = test_factories.create_team()
        tpa = test_factories.create_third_party_account(self.vurl)
        tpa.teams.add(team)

        self.assertEquals(check_authorization(self.video), (False, False))
        test_factories.create_team_video(team, video=self.video)
        self.assertEquals(check_authorization(self.video), (True, True))
예제 #3
0
파일: forms.py 프로젝트: Harpreetkk/Amara
 def test_user_permissions_check(self):
     team = test_factories.create_team(subtitle_policy=40)
     test_factories.create_team_video(team=team, video=self.video)
     form = self.make_form({
         'primary_audio_language_code': 'en',
         'subtitle_language_code': 'fr',
     })
     # The form should be invalid, because our user doesn't have
     # permissions to subtitle the video.
     self.assertEquals(form.is_valid(), False)
예제 #4
0
 def test_delete_tasks(self):
     # Add a review task for the last SubtitleVersion
     Task(team=self.team,
          team_video=self.team_video,
          assignee=None,
          language=self.language.language_code,
          type=Task.TYPE_IDS['Review'],
          new_subtitle_version=self.versions[-1]).save()
     # add a completed review task for the one before that
     Task(team=self.team,
          team_video=self.team_video,
          assignee=None,
          language=self.language.language_code,
          type=Task.TYPE_IDS['Review'],
          approved=Task.APPROVED_IDS['Approved'],
          new_subtitle_version=self.versions[-1]).save()
     # add a task for another video, but with the same language
     other_team_video = test_factories.create_team_video(
         self.team, self.user)
     Task(team=self.team,
          team_video=other_team_video,
          assignee=None,
          language=self.language.language_code,
          type=Task.TYPE_IDS['Translate']).save()
     self.check_task_count(3)
     # deleting the language should delete both tasks for this video, but
     # not the task for the other video.
     self.language.nuke_language()
     self.check_task_count(1)
예제 #5
0
    def test_move_video_allowed(self):
        # Check that moving works when the user has permission.
        video = test_factories.create_video()
        old_team = test_factories.create_team(video_policy=Team.VP_MANAGER)
        new_team = test_factories.create_team(video_policy=Team.VP_MANAGER)
        team_video = test_factories.create_team_video(old_team, self.user,
                                                      video)
        # Convenient functions for pulling models fresh from the DB.
        get_video = lambda: Video.objects.get(pk=video.pk)
        get_team_video = lambda: get_video().get_team_video()

        # Create a member that's an admin of BOTH teams.
        # This member should be able to move the video.
        member = self._create_member(old_team, TeamMember.ROLE_ADMIN)
        self._create_member(new_team, TeamMember.ROLE_ADMIN, member.user)

        self.assertEqual(get_team_video().team.pk, old_team.pk,
                         "Video did not start in the correct team.")

        # Move the video.
        self.client.login(username=member.user.username,
                          password=member.user.username)
        url = reverse("teams:move_video")
        response = self.client.post(url, {'team_video': get_team_video().pk,
                                          'team': new_team.pk,})
        self.assertEqual(response.status_code, 302)

        self.assertEqual(get_team_video().team.pk, new_team.pk,
                         "Video was not moved to the new team.")

        self.assertEqual(get_team_video().project.team, new_team,
                         "Video ended up with a project for the first team")
예제 #6
0
    def test_move_video_disallowed_new(self):
        # Check that moving does not work when the user is blocked by the new
        # team.
        video = test_factories.create_video()
        old_team = test_factories.create_team(video_policy=Team.VP_MANAGER)
        new_team = test_factories.create_team(video_policy=Team.VP_MANAGER)
        team_video = test_factories.create_team_video(old_team, self.user,
                                                      video)
        # Convenient functions for pulling models fresh from the DB.
        get_video = lambda: Video.objects.get(pk=video.pk)
        get_team_video = lambda: get_video().get_team_video()

        # Create a member that's a contributor to the new/target team.
        # This member should NOT be able to move the video because they cannot
        # add it to the second team.
        member = self._create_member(old_team, TeamMember.ROLE_ADMIN)
        self._create_member(new_team, TeamMember.ROLE_CONTRIBUTOR, member.user)

        self.assertEqual(get_team_video().team.pk, old_team.pk,
                         "Video did not start in the correct team.")

        # Try to move the video.
        self.client.login(username=member.user.username,
                          password=member.user.username)
        url = reverse("teams:move_video")
        response = self.client.post(url, {'team_video': get_team_video().pk,
                                          'team': new_team.pk,})
        self.assertEqual(response.status_code, 302)

        self.assertEqual(get_team_video().team.pk, old_team.pk,
                         "Video did not stay in the old team.")
예제 #7
0
    def test_team_edit(self):
        team = self._create_base_team()
        self.client.login(**self.auth)
        url = reverse("teams:settings_basic", kwargs={"slug": team.slug})

        member = self._create_member(team, TeamMember.ROLE_ADMIN)
        videos = [test_factories.create_video() for i in xrange(4)]

        response = self.client.get(url)
        self.failUnlessEqual(response.status_code, 200)

        for video in videos:
            test_factories.create_team_video(team, member.user, video)

        self.assertTrue(all([v.is_public for v in videos]))

        self.assertFalse(team.logo)

        data = {
            "name": u"New team",
            "is_visible": u"0",
            "description": u"testing",
            "logo": open(path.join(settings.MEDIA_ROOT, "test/71600102.jpg"), "rb")
        }

        url = reverse("teams:settings_basic", kwargs={"slug": team.slug})
        response = self.client.post(url, data)
        self.failUnlessEqual(response.status_code, 302)

        team = Team.objects.get(pk=team.pk)
        self.assertTrue(team.logo)
        self.assertEqual(team.name, u"New team")
        self.assertEqual(team.description, u"testing")
        self.assertFalse(team.is_visible)
        self.assertTrue(all([v.is_public for v in videos]))

        data = {
            "name": u"New team",
            "is_visible": u"1",
            "description": u"testing",
        }

        url = reverse("teams:settings_basic", kwargs={"slug": team.slug})
        response = self.client.post(url, data)

        self.failUnlessEqual(response.status_code, 302)
        self.assertTrue(all([v.is_public for v in videos]))
예제 #8
0
 def test_no_audio_language(self):
     video = test_factories.create_video(primary_audio_language_code='')
     tv = test_factories.create_team_video(self.team, self.admin.user,
                                           video)
     tasks = tv.task_set.all()
     self.assertEqual(tasks.count(), 1)
     transcribe_task = tasks.filter(type=10, language='')
     self.assertEqual(transcribe_task.count(), 1)
예제 #9
0
 def test_search_by_language(self):
     # make a bunch of videos that either have or don't have french
     # subtitles.  Make sure we test both single languages and multiple
     # languages.
     tv1 = test_factories.create_team_video(team=self.team)
     tv2 = test_factories.create_team_video(team=self.team)
     tv3 = test_factories.create_team_video(team=self.team)
     tv4 = test_factories.create_team_video(team=self.team)
     pipeline.add_subtitles(tv1.video, 'en', None, complete=True)
     pipeline.add_subtitles(tv2.video, 'en', None, complete=True)
     pipeline.add_subtitles(tv2.video, 'es', None, complete=True)
     pipeline.add_subtitles(tv3.video, 'fr', None, complete=True)
     pipeline.add_subtitles(tv4.video, 'en', None, complete=True)
     pipeline.add_subtitles(tv4.video, 'fr', None, complete=True)
     self.reindex_team_videos()
     self.check_search_results(language='fr', correct=[tv3, tv4])
     self.check_search_results(exclude_language='fr', correct=[tv1, tv2])
예제 #10
0
    def test_missing_records(self):
        date_maker = DateMaker()
        user = test_factories.create_team_member(self.team).user

        video = test_factories.create_video(primary_audio_language_code='en')
        test_factories.create_team_video(self.team, user, video)
        # For en and de, we call pipeline.add_subtitles directly, so there's
        # no BillingRecord in the sytem.  This simulates the languages that
        # were completed before BillingRecords were around.
        add_subtitles(video,
                      'en',
                      make_subtitle_lines(4),
                      created=date_maker.next_date(),
                      complete=True)
        add_subtitles(video,
                      'de',
                      make_subtitle_lines(4),
                      created=date_maker.next_date(),
                      complete=True)
        # pt-br has a uncompleted subtitle language.  We should not list that
        # language in the report
        add_subtitles(video,
                      'pt-br',
                      make_subtitle_lines(4),
                      created=date_maker.next_date(),
                      complete=False)
        self.add_subtitles(video,
                           'fr',
                           make_subtitle_lines(4),
                           created=date_maker.next_date(),
                           complete=True)
        self.add_subtitles(video,
                           'es',
                           make_subtitle_lines(4),
                           created=date_maker.next_date(),
                           complete=True)
        data = self.get_report_data(self.team, date_maker.start_date(),
                                    date_maker.end_date())
        self.assertEquals(len(data), 4)
        self.assertEquals(data[video.video_id, 'en']['Language number'], 0)
        self.assertEquals(data[video.video_id, 'de']['Language number'], 0)
        self.assertEquals(data[video.video_id, 'fr']['Language number'], 1)
        self.assertEquals(data[video.video_id, 'es']['Language number'], 2)
        self.assertEquals(data[video.video_id, 'en']['Minutes'], 0)
        self.assertEquals(data[video.video_id, 'de']['Minutes'], 0)
예제 #11
0
 def setup_team(self):
     self.team = test_factories.create_team(workflow_enabled=True)
     workflow = self.team.get_workflow()
     workflow.review_allowed = workflow.REVIEW_IDS['Admin must review']
     workflow.approve_allowed = workflow.APPROVE_IDS['Admin must approve']
     workflow.save()
     self.user = test_factories.create_team_member(self.team).user
     self.team_video = test_factories.create_team_video(
         self.team, self.user, self.video)
예제 #12
0
 def setUp(self):
     TestCase.setUp(self)
     self.team = test_factories.create_team()
     self.project = Project.objects.create(team=self.team, name='project1')
     self.team2 = test_factories.create_team()
     self.project2 = Project.objects.create(team=self.team2,
                                            name='project2')
     self.video = test_factories.create_video()
     self.team_video = test_factories.create_team_video(self.team,
                                                        video=self.video)
예제 #13
0
 def test_search(self):
     video = test_factories.create_video(primary_audio_language_code='en',
                                         title='MyTitle')
     tv = test_factories.create_team_video(self.team, self.admin.user,
                                           video)
     self.assertEqual(tv.task_set.count(), 1)
     self.check_task_list(tv.task_set.all(), q='MyTitle')
     self.check_task_list(tv.task_set.all(), q='mytitle')
     self.check_task_list(tv.task_set.all(), q='my')
     self.check_task_list([], q='OtherTitle')
예제 #14
0
 def test_search_by_metadata(self):
     video = test_factories.create_video(primary_audio_language_code='en',
                                         title='MyTitle')
     video.update_metadata({'speaker-name': 'Person'})
     tv = test_factories.create_team_video(self.team, self.admin.user,
                                           video)
     self.assertEqual(tv.task_set.count(), 1)
     self.check_task_list(tv.task_set.all(), q='Person')
     self.check_task_list(tv.task_set.all(), q='person')
     self.check_task_list(tv.task_set.all(), q='pers')
예제 #15
0
    def test_team_permission(self):
        team = test_factories.create_team(slug="private-team",
                                          name="Private Team",
                                          is_visible=False)
        TeamMember.objects.create_first_member(team, self.user)
        video = test_factories.create_video()
        test_factories.create_team_video(team, self.user, video)

        url = reverse("videos:video", kwargs={"video_id": video.video_id})

        response = self.client.get(url, follow=True)
        self.assertEqual(response.status_code, 404)

        self.client.login(**self.auth)

        response = self.client.get(url, follow=True)
        self.assertEquals(response.status_code, 200)

        self.client.logout()
예제 #16
0
 def setUp(self, mock_now):
     self.date_maker = DateMaker()
     mock_now.side_effect = self.date_maker.next_date
     self.team = test_factories.create_team(workflow_enabled=True)
     test_factories.create_workflow(
         self.team,
         review_allowed=0,  # no review
         approve_allowed=20,  # admin must approve
     )
     self.admin = test_factories.create_team_member(team=self.team,
                                                    role=ROLE_ADMIN).user
     self.video = test_factories.create_team_video(self.team).video
예제 #17
0
 def setUp(self):
     self.team = test_factories.create_team(workflow_enabled=True)
     self.workflow = test_factories.create_workflow(
         self.team,
         review_allowed=DONT_REQUIRE_REVIEW,
         approve_allowed=DONT_REQUIRE_APPROVAL)
     self.admin = test_factories.create_team_member(
         self.team, role=TeamMember.ROLE_ADMIN)
     self.team_video = test_factories.create_team_video(
         self.team, self.admin.user)
     self.client = Client()
     self.login(self.admin.user)
예제 #18
0
파일: syncing.py 프로젝트: Harpreetkk/Amara
 def setUp(self, mock_delete_subtitles, mock_update_subtitles, mock_now):
     self.now = datetime.datetime(2013, 1, 1)
     mock_now.side_effect = self.make_now
     self.mock_update_subtitles = mock_update_subtitles
     self.mock_delete_subtitles = mock_delete_subtitles
     self.video = create_kaltura_video('video')
     self.video_url = self.video.get_primary_videourl_obj()
     team_video = test_factories.create_team_video(video=self.video)
     self.team = team_video.team
     self.account = KalturaAccount.objects.create(team=self.team,
                                                  partner_id=1234,
                                                  secret='abcd')
     pipeline.add_subtitles(self.video, 'en', None)
     self.reset_history()
예제 #19
0
    def test_minutes(self):
        date_maker = DateMaker()
        user = test_factories.create_team_member(self.team).user

        video = test_factories.create_video(primary_audio_language_code='en')
        test_factories.create_team_video(self.team, user, video)
        self.add_subtitles(video,
                           'en',
                           make_subtitle_lines(100, 100),
                           created=date_maker.next_date(),
                           complete=True)
        self.add_subtitles(video,
                           'fr',
                           make_subtitle_lines(100, 80),
                           created=date_maker.next_date(),
                           complete=True)

        data = self.get_report_data(self.team, date_maker.start_date(),
                                    date_maker.end_date())
        self.assertEquals(len(data), 2)
        # For english the duration is 1:40, for french it's 1:20.  We should
        # always round up, so both should count as 2 minutes
        self.assertEquals(data[video.video_id, 'en']['Minutes'], 2)
        self.assertEquals(data[video.video_id, 'fr']['Minutes'], 2)
예제 #20
0
파일: syncing.py 프로젝트: Harpreetkk/Amara
 def setUp(self, mock_delete_subtitles, mock_update_subtitles,
           mock_update_all_subtitles):
     self.mock_delete_subtitles = mock_delete_subtitles
     self.mock_update_subtitles = mock_update_subtitles
     self.mock_update_all_subtitles = mock_update_all_subtitles
     self.video = create_kaltura_video('video')
     self.video_url = self.video.get_primary_videourl_obj()
     team_video = test_factories.create_team_video(video=self.video)
     self.team = team_video.team
     self.account = KalturaAccount.objects.create(team=self.team,
                                                  partner_id=1234,
                                                  secret='abcd')
     pipeline.add_subtitles(self.video, 'en', None)
     self.mock_update_all_subtitles.reset_mock()
     self.mock_update_subtitles.reset_mock()
     self.mock_delete_subtitles.reset_mock()
예제 #21
0
 def setUp(self):
     self.team = test_factories.create_team(workflow_enabled=True)
     self.workflow = test_factories.create_workflow(self.team)
     self.user = test_factories.create_user(is_staff=True)
     self.member = test_factories.create_team_member(self.team,
                                                     self.user,
                                                     role=ROLE_ADMIN)
     self.video = test_factories.create_video()
     self.team_video = test_factories.create_team_video(
         self.team, self.user, self.video)
     self.non_team_video = test_factories.create_video()
     # create a bunch of versions
     self.versions = [
         pipeline.add_subtitles(self.video, 'en', None) for i in xrange(5)
     ]
     self.language = self.video.get_primary_audio_subtitle_language()
예제 #22
0
    def test_rules(self):
        team_video = test_factories.create_team_video()
        video = team_video.video
        username = video.user.username

        def check_sync_rule(should_sync, **rule_kwargs):
            YoutubeSyncRule.objects.all().delete()
            rule = YoutubeSyncRule.objects.create(**rule_kwargs)
            self.assertEquals(rule.should_sync(video), should_sync)

        check_sync_rule(False)  # blank rule
        check_sync_rule(True, team=team_video.team.slug)
        check_sync_rule(True, user=username)
        check_sync_rule(True, video=video.video_id)
        check_sync_rule(True, team='*')
        # Videos can have the user field set to None
        video.user = None
        video.save()
        check_sync_rule(False, user=username)
예제 #23
0
 def setUp(self):
     self.video = test_factories.create_video()
     self.team = test_factories.create_team()
     self.member = test_factories.create_team_member(self.team)
     self.team_video = test_factories.create_team_video(
         self.team, self.member.user, self.video)
예제 #24
0
파일: syncing.py 프로젝트: Harpreetkk/Amara
 def test_tasks_not_called_for_non_team_videos(self):
     video = test_factories.create_video()
     test_factories.create_team_video(team=self.team, video=video)
     self.check_tasks_not_called(video)
예제 #25
0
파일: syncing.py 프로젝트: Harpreetkk/Amara
 def test_tasks_not_called_if_no_account(self):
     # for non-team videos, we shouldn't schedule a task
     video = create_kaltura_video('video2')
     other_team = test_factories.create_team()
     test_factories.create_team_video(other_team, video=video)
     self.check_tasks_not_called(video)
예제 #26
0
    def setup_videos(self):
        # make a bunch of languages that have moved through the review process
        self.subtitled_languages = collections.defaultdict(list)
        self.reviewed_languages = collections.defaultdict(list)
        self.notes = {}
        self.approved_languages = []
        self.approval_dates = {}
        self.review_dates = {}
        self.subtitle_dates = {}
        self.translations = set()

        v1 = test_factories.create_team_video(self.team).video
        v2 = test_factories.create_team_video(self.team).video
        v3 = test_factories.create_team_video(self.team).video
        languages = [
            (v1, 'en'),
            (v1, 'fr'),
            (v1, 'de'),
            (v1, 'pt-br'),
            (v2, 'en'),
            (v2, 'es'),
            (v2, 'fr'),
            (v2, 'de'),
            (v2, 'pt-br'),
            (v3, 'en'),
            (v3, 'de'),
        ]
        self.videos = {
            v1.video_id: v1,
            v2.video_id: v2,
            v3.video_id: v3,
        }
        notes_iter = itertools.cycle(['Great', 'Bad', 'Okay', ''])

        for i, (video, language_code) in enumerate(languages):
            video_id = video.video_id
            subtitler = self.subtitler_iter.next()
            reviewer = self.reviewer_iter.next()
            note = notes_iter.next()
            if i % 3 == 0:
                task_type = 'Translate'
                self.translations.add((video_id, language_code))
            else:
                task_type = 'Subtitle'
            review_task = test_factories.make_review_task(
                video.get_team_video(),
                language_code,
                subtitler,
                task_type,
                sub_data=make_subtitle_lines(10, 90))
            self.subtitle_dates[video_id, language_code] = \
                    self.date_maker.current_date
            review_task.body = note
            approve_task = review_task.complete_approved(reviewer)
            self.review_dates[video_id, language_code] = \
                    self.date_maker.current_date
            self.assertEquals(approve_task.type, Task.TYPE_IDS['Approve'])
            self.notes[video_id, language_code, 'Review'] = note
            if i < 6:
                # for some of those videos, approve them
                approve_task.complete_approved(self.admin)
                self.add_approved_language(video, language_code, subtitler,
                                           reviewer)
            if 6 <= i < 8:
                # for some of those videos, send them back to review, then
                # review again and approve the final result
                # for some of those videos, approve them
                review_task2 = approve_task.complete_rejected(self.admin)
                note = notes_iter.next()
                review_task2.body = note
                self.notes[video_id, language_code, 'Review'] = note
                approve_task2 = review_task2.complete_approved(reviewer)
                self.review_dates[video_id, language_code] = \
                        self.date_maker.current_date
                approve_task2.complete_approved(self.admin)
                self.add_approved_language(video, language_code, subtitler,
                                           reviewer)
예제 #27
0
 def create_team_video():
     return test_factories.create_team_video(team, owner.user)
예제 #28
0
 def setup_videos(self):
     self.project_video = test_factories.create_team_video(
         self.team, self.owner_account, project=self.test_project)
     self.nonproject_video = test_factories.create_team_video(
         self.team, self.owner_account)