def setup_users(self): # make a bunch of users to subtitle/review the work subtitlers = [ test_factories.create_user(pay_rate_code='S%s' % i) for i in xrange(3) ] reviewers = [ test_factories.create_user(pay_rate_code='R%s' % i) for i in xrange(2) ] for u in subtitlers: test_factories.create_team_member(user=u, team=self.team, role=ROLE_CONTRIBUTOR) for u in reviewers: test_factories.create_team_member(user=u, team=self.team, role=ROLE_MANAGER) self.subtitler_iter = itertools.cycle(subtitlers) self.reviewer_iter = itertools.cycle(reviewers) self.admin = test_factories.create_team_member(team=self.team, role=ROLE_ADMIN).user self.users = dict((unicode(u), u) for u in subtitlers + reviewers) self.users[unicode(self.admin)] = self.admin
def test_permissions(self): self.check_user_perm(test_factories.create_user(), False) self.check_user_perm(test_factories.create_user(is_staff=True), True) for role in (ROLE_ADMIN, ROLE_OWNER): user = test_factories.create_user() test_factories.create_team_member(self.team, user, role=role) self.check_user_perm(user, True) for role in (ROLE_CONTRIBUTOR, ROLE_MANAGER): user = test_factories.create_user() test_factories.create_team_member(self.team, user, role=role) self.check_user_perm(user, False)
def test_permissions(self): # only team admins and staff members should be able to submit the form self.check_user_perm(test_factories.create_user(), False) self.check_user_perm(test_factories.create_user(is_staff=True), True) for role in (ROLE_ADMIN, ROLE_OWNER): user = test_factories.create_user() test_factories.create_team_member(self.team, user, role=role) self.check_user_perm(user, True) for role in (ROLE_CONTRIBUTOR, ROLE_MANAGER): user = test_factories.create_user() test_factories.create_team_member(self.team, user, role=role) self.check_user_perm(user, False)
def setUp(self): self.team = test_factories.create_team(workflow_enabled=True) w = test_factories.create_workflow(self.team, autocreate_subtitle=True, autocreate_translate=True) self.admin = test_factories.create_team_member( self.team, role=TeamMember.ROLE_ADMIN)
def setUp(self): self.team = test_factories.create_team(workflow_enabled=True) w = test_factories.create_workflow(self.team, autocreate_subtitle=True) self.admin = test_factories.create_team_member( self.team, role=TeamMember.ROLE_ADMIN) self.client.login(username=self.admin.user.username, password='******')
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)
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)
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)
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
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 test_non_ascii_text(self): non_ascii_text = u'abcd\xe9' user = test_factories.create_user(username=non_ascii_text) test_factories.create_team_member(self.team, user) self.video.title = non_ascii_text self.video.save() sv = add_subtitles(self.video, 'en', make_subtitle_lines(4), title=non_ascii_text, author=user, description=non_ascii_text, complete=True) video_changed_tasks(self.video.pk, sv.pk) report = BillingReport.objects.create( start_date=sv.created - timedelta(days=1), end_date=sv.created + timedelta(days=1), type=BillingReport.TYPE_NEW, ) report.teams.add(self.team) self.process_report(report)
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()
def test_video_feed_submit(self): team = test_factories.create_team() user = test_factories.create_team_member(team).user self.client.login(username=user.username, password='******') feed_url = u'http://example.com/feed' url = reverse('teams:add_videos', kwargs={'slug': team.slug}) data = { 'feed_url': feed_url, } response = self.client.post(url, data) self.assertEqual(team.videos.count(), 2) for video in team.videos.all(): self.assertEquals(video.user, user) self.assertEquals(video.get_team_video().added_by, user)
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)
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)
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)
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)
def setup_team(self): self.team = test_factories.create_team() self.owner = test_factories.create_team_member( self.team, self.owner_account, role=TeamMember.ROLE_OWNER) self.test_project = test_factories.create_project(self.team) self.default_project = self.team.default_project
def setUp(self): self.team = test_factories.create_team() self.user = test_factories.create_team_member(self.team).user
def create_member(self): return test_factories.create_team_member( self.team, role=TeamMember.ROLE_CONTRIBUTOR)