Exemple #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)
Exemple #2
0
 def test_gauge_videos_long(self):
     video1 = test_factories.create_video()
     video2 = test_factories.create_video()
     pipeline.add_subtitles(video1, 'de', [
         (100, 200, "foo", {
             'new_paragraph': True
         }),
         (300, 400, "bar", {
             'new_paragraph': True
         }),
     ])
     pipeline.add_subtitles(video2, 'en', [
         (100, 200, "foo", {
             'new_paragraph': True
         }),
         (300, 400, "bar", {
             'new_paragraph': True
         }),
     ])
     pipeline.add_subtitles(video2, 'en', [
         (100, 200, "foo", {
             'new_paragraph': True
         }),
         (300, 400, "bar", {
             'new_paragraph': True
         }),
         (500, 600, "baz", {
             'new_paragraph': True
         }),
     ])
     gauge_videos_long()
     self.assertEquals(set(self.gauges.keys()), set([
         'videos.Subtitle',
     ]))
     self.gauges['videos.Subtitle'].report.assert_called_once_with(5)
Exemple #3
0
 def make_three_objects(self):
     v1 = test_factories.create_video()
     v2 = test_factories.create_video()
     return [
         pipeline.add_subtitles(v1, 'en', None).subtitle_language,
         pipeline.add_subtitles(v1, 'fr', None).subtitle_language,
         pipeline.add_subtitles(v2, 'en', None).subtitle_language,
     ]
Exemple #4
0
 def test_gauge_videos(self):
     videos = [test_factories.create_video() for i in range(10)]
     # video #1 has 1 language with 1 version
     pipeline.add_subtitles(videos[0], 'en', None)
     # video #2 has 2 languages with 1 version
     pipeline.add_subtitles(videos[1], 'en', None)
     pipeline.add_subtitles(videos[1], 'fr', None)
     # video #3 has 2 languages with 2 versions
     pipeline.add_subtitles(videos[2], 'de', None)
     pipeline.add_subtitles(videos[2], 'de', None)
     pipeline.add_subtitles(videos[2], 'pt-br', None)
     pipeline.add_subtitles(videos[2], 'pt-br', None)
     gauge_videos()
     self.assertEquals(
         set(self.gauges.keys()),
         set([
             'videos.Video',
             'videos.Video-captioned',
             'videos.SubtitleVersion',
             'videos.SubtitleLanguage',
         ]))
     gauges = self.gauges
     gauges['videos.Video'].report.assert_called_once_with(10)
     gauges['videos.Video-captioned'].report.assert_called_once_with(3)
     gauges['videos.SubtitleVersion'].report.assert_called_once_with(7)
     gauges['videos.SubtitleLanguage'].report.assert_called_once_with(5)
Exemple #5
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()
Exemple #6
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")
Exemple #7
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.")
Exemple #8
0
def create_kaltura_video(name):
    # generate something that looks like a kaltura id
    entry_id = '1_' + hashlib.md5(name).hexdigest()[:8]
    url = ('http://cdnbakmi.kaltura.com'
           '/p/1492321/sp/149232100/serveFlavor/entryId/'
           '%s/flavorId/1_dqgopb2z/name/%s.mp4') % (entry_id, name)
    return test_factories.create_video(url=url, video_type='K')
Exemple #9
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)
Exemple #10
0
 def test_noop_for_non_team_feed(self):
     team = test_factories.create_team()
     user = test_factories.create_user()
     videos = [test_factories.create_video() for i in xrange(5)]
     feed = mock.Mock(team=None, user=user)
     feed_imported.send(sender=feed, new_videos=videos)
     for video in videos:
         self.assertEquals(video.get_team_video(), None)
Exemple #11
0
 def setUp(self):
     TestCase.setUp(self)
     self.video = test_factories.create_video()
     self.video.update_metadata({
         'location': 'Place',
     })
     pipeline.add_subtitles(self.video, 'fr', None, metadata={
         'location': 'Place-fr',
     })
Exemple #12
0
 def test_video_language_title_fallback(self):
     # if a language doesn't have a title, then we fall back to the video
     # title (which is the english title, since that's the primary audoio
     video = test_factories.create_video(primary_audio_language_code='en',
                                         title='Video Title')
     en_version = pipeline.add_subtitles(video, 'en', None)
     en = en_version.subtitle_language
     self.assertEquals(views.language_page_title(en),
                       'Video Title with subtitles | Amara')
Exemple #13
0
    def test_migrate_updates_view_count(self):
        video = test_factories.create_video()
        video2 = test_factories.create_video()
        self.add_hit(video, datetime(2013, 1, 1, 0))
        self.add_hit(video, datetime(2013, 1, 1, 1))
        self.add_hit(video, datetime(2013, 1, 1, 2))
        self.add_hit(video2, datetime(2013, 1, 1, 3))
        self.add_hit(video2, datetime(2013, 1, 1, 4))
        self.migrate(datetime(2013, 1, 2, 0, 5))
        self.assertEquals(Video.objects.get(id=video.id).view_count, 3)
        self.assertEquals(Video.objects.get(id=video2.id).view_count, 2)

        self.add_hit(video, datetime(2013, 1, 2, 0))
        self.add_hit(video, datetime(2013, 1, 2, 1))
        self.add_hit(video, datetime(2013, 1, 2, 2))
        self.add_hit(video, datetime(2013, 1, 2, 3))
        self.migrate(datetime(2013, 1, 3, 0, 5))
        self.assertEquals(Video.objects.get(id=video.id).view_count, 7)
        self.assertEquals(Video.objects.get(id=video2.id).view_count, 2)
Exemple #14
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)
Exemple #15
0
 def test_video_language_title(self):
     video = test_factories.create_video(primary_audio_language_code='en',
                                         title='Video Title')
     en_version = pipeline.add_subtitles(video,
                                         'en',
                                         None,
                                         title="English Title")
     en = en_version.subtitle_language
     self.assertEquals(views.language_page_title(en),
                       'English Title with subtitles | Amara')
Exemple #16
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')
Exemple #17
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')
Exemple #18
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]))
Exemple #19
0
 def setUp(self):
     TestCase.setUp(self)
     self.partner_id = 1234
     self.secret = 'Secret'
     self.account = KalturaAccount.objects.create(
         team=test_factories.create_team(),
         partner_id=self.partner_id,
         secret=self.secret)
     self.entry_id = 'EntryId'
     url = ('http://cdnbakmi.kaltura.com'
            '/p/1492321/sp/149232100/serveFlavor/entryId/'
            '%s/flavorId/1_dqgopb2z/name/video.mp4') % self.entry_id
     self.video = test_factories.create_video(url=url, video_type='K')
     self.video_url = self.video.get_primary_videourl_obj()
     self.version = pipeline.add_subtitles(self.video, 'en',
                                           [(100, 200, "sub 1")])
     self.language = self.version.subtitle_language
Exemple #20
0
 def test_video_language_title_translation(self):
     # for translated languages, we display the title in the same way.  In
     # the past we displayed it differently, this test is still useful
     video = test_factories.create_video(primary_audio_language_code='en',
                                         title='Video Title')
     en_version = pipeline.add_subtitles(video,
                                         'en',
                                         None,
                                         title="English Title")
     fr_version = pipeline.add_subtitles(video,
                                         'fr',
                                         None,
                                         title="French Title",
                                         parents=[en_version])
     fr = fr_version.subtitle_language
     self.assertEquals(views.language_page_title(fr),
                       'French Title with subtitles | Amara')
Exemple #21
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)
Exemple #22
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()
Exemple #23
0
    def test_create_team_videos_for_team_feed(self):
        api_teamvideo_new_handler = mock.Mock()
        api_teamvideo_new.connect(api_teamvideo_new_handler, weak=False)
        self.addCleanup(api_teamvideo_new.disconnect,
                        api_teamvideo_new_handler)

        team = test_factories.create_team()
        user = test_factories.create_team_member(team).user
        videos = [test_factories.create_video() for i in xrange(5)]
        feed = mock.Mock(team=team, user=user)
        feed_imported.send(sender=feed, new_videos=videos)
        for video in videos:
            self.assertNotEquals(video.get_team_video(), None)
            self.assertEquals(video.get_team_video().team, team)

        correct_api_calls = [
            mock.call(signal=api_teamvideo_new, sender=video.get_team_video())
            for video in videos
        ]

        api_teamvideo_new_handler.assert_has_calls(correct_api_calls,
                                                   any_order=True)
Exemple #24
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)
Exemple #25
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)
Exemple #26
0
 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)
Exemple #27
0
 def make_three_objects(self):
     return [test_factories.create_video() for i in range(3)]
 def setUp(self):
     TestCase.setUp(self)
     self.video = test_factories.create_video()
Exemple #29
0
 def setUp(self):
     self.video = test_factories.create_video()
     self.user_0 = test_factories.create_user()
Exemple #30
0
 def setUp(self, mock_get_user_languages_from_request):
     self.video = test_factories.create_video()
     self.user = test_factories.create_user()
     self.mock_get_user_languages_from_request = \
             mock_get_user_languages_from_request