def test_member__safe_invite(self): """Use safe-members api to invite user from 1 team to anther. POST /api2/partners/teams/[team-slug]/safe-members/ """ #create a second team with 'second_member' as a member. second_user = UserFactory.create(username='******') second_team = TeamMemberFactory.create( team__name="normal team", team__slug='normal-team', team__description='this is the junior team', user=self.user, ).team TeamContributorMemberFactory.create(team=second_team, user=second_user) #Create a post the request user_details = { "username": second_user.username, "role": "admin", "note": "we need you on our team" } url_part = 'teams/%s/safe-members/' % self.open_team.slug status, response = self.data_utils.post_api_request( self.user, url_part, user_details) #Login in a verify invitation message is displayed usr_messages_pg = user_messages_page.UserMessagesPage(self) usr_messages_pg.log_in(second_user.username, 'password') usr_messages_pg.open_messages() invite_subject = ("You've been invited to team %s on Amara" % self.open_team.name) self.assertEqual(invite_subject, usr_messages_pg.message_subject())
def test_member__create_contributor(self): """Verify video urls for a particular video are listed. POST /api2/partners/teams/[team-slug]/members/ """ #create a second team with 'second_member' as a member. second_user = UserFactory.create(username='******') second_team = TeamMemberFactory.create( team__name="normal team", team__slug='normal-team', team__description='this is the junior team', user=self.user, ).team TeamContributorMemberFactory.create(team=second_team, user=second_user) user_details = {"username": second_user.username, "role": "admin"} url_part = 'teams/%s/members/' % self.open_team.slug status, response = self.data_utils.post_api_request( self.user, url_part, user_details) self.teams_dir_pg.open_page('teams/%s/members/' % self.open_team.slug) self.teams_dir_pg.log_in(self.user.username, 'password') url_part = 'teams/%s/members/' % self.open_team.slug status, response = self.data_utils.api_get_request(self.user, url_part) self.assertNotEqual(None, response, "Got a None response")
def test_delete__contributor(self): """A Contributor can not delete the team. DELETE /api2/partners/teams/[team-slug]/ """ TeamContributorMemberFactory.create(team=self.priv_team, user=self.user) url_part = 'teams/%s/' % self.priv_team.slug s, _ = self.data_utils.delete_api_request(self.user, url_part) self.assertEqual(s, 403)
def test_browse_suggestion__displayed(self): """Browse videos link displayed, when no videos found. """ test_team = TeamMemberFactory.create( team__name='No Videos yet', team__slug='no-videos', user=self.team_owner, ).team TeamContributorMemberFactory.create(team=test_team, user=self.mono_glot) self.dashboard_tab.log_in(self.mono_glot.username, 'password') self.dashboard_tab.open_team_page(test_team.slug) self.assertTrue( self.dashboard_tab.suggestion_present(suggestion_type='browse'))
def setUpClass(cls): super(TestCaseViewSubtitles, cls).setUpClass() cls.data_utils = data_helpers.DataHelpers() cls.video_pg = video_page.VideoPage(cls) cls.user = UserFactory.create() cls.owner = UserFactory.create() cls.basic_team = TeamMemberFactory.create( team__workflow_enabled=False, team__translate_policy=20, #any team team__subtitle_policy=20, #any team user=cls.owner, ).team cls.team = TeamMemberFactory.create( team__workflow_enabled=True, team__translate_policy=20, #any team team__subtitle_policy=20, #any team team__task_assign_policy=10, #any team user=cls.owner, ).team cls.workflow = WorkflowFactory( team=cls.team, autocreate_subtitle=True, autocreate_translate=True, approve_allowed=10, # manager review_allowed=10, # peer ) cls.contributor = TeamContributorMemberFactory(team=cls.team).user cls.subs_dir = os.path.join(os.getcwd(), 'apps', 'webdriver_testing', 'subtitle_data') cls.rev1 = os.path.join(cls.subs_dir, 'Timed_text.en.srt') cls.rev2 = os.path.join(cls.subs_dir, 'Timed_text.rev2.en.srt') de = os.path.join(cls.subs_dir, 'Timed_text.rev3.en.srt') cls.sv = os.path.join(cls.subs_dir, 'Timed_text.sv.dfxp') #Create en source language 2 revisions - approved. cls.video, cls.tv = cls._add_team_video() cls._upload_subtitles(cls.video, 'en', cls.rev1, cls.contributor, complete=False) cls._upload_subtitles(cls.video, 'en', cls.rev2, cls.contributor) cls.data_utils.complete_review_task(cls.tv, 20, cls.owner) cls.data_utils.complete_approve_task(cls.tv, 20, cls.owner) #Add sv translation, reviewed cls._upload_translation(cls.video, 'sv', cls.sv, cls.contributor) cls.data_utils.complete_review_task(cls.tv, 20, cls.owner) #Add de translation complete waiting review cls._upload_translation(cls.video, 'de', cls.sv, cls.contributor) #Add ru translation, incomplete. cls._upload_translation(cls.video, 'ru', cls.sv, cls.contributor, complete=False)
def setUpClass(cls): super(TestCaseTaskFreeDashboard, cls).setUpClass() cls.data_utils = data_helpers.DataHelpers() cls.dashboard_tab = dashboard_tab.DashboardTab(cls) cls.logger.info('setup: Create a team and team owner, add some videos') cls.team_owner = UserFactory() cls.team = TeamMemberFactory.create(user=cls.team_owner, ).team #Add some videos with various languages required. test_videos = [('jaws.mp4', 'fr', 'fr'), ('Birds_short.oggtheora.ogg', None, None), ('fireplace.mp4', 'en', 'en')] for vid in test_videos: vidurl_data = { 'url': ('http://qa.pculture.org/amara_tests/%s' % vid[0]), 'video__title': vid[0] } video = cls.data_utils.create_video(**vidurl_data) if vid[1] is not None: video_data = { 'language_code': vid[1], 'video_language': vid[2], 'video': video.pk, 'draft': open('apps/webdriver_testing/subtitle_data/' 'Timed_text.sv.dfxp'), 'is_complete': True } cls.data_utils.upload_subs(video, video_data) TeamVideoFactory(video=video, team=cls.team, added_by=cls.team_owner) cls.logger.info( 'setup: Create team members Polly Glott and Mono Glot.') cls.polly_glott = TeamContributorMemberFactory.create( team=cls.team, user=UserFactory(username='******')).user cls.mono_glot = TeamContributorMemberFactory.create( team=cls.team, user=UserFactory(username='******')).user
def setUpClass(cls): super(TestCaseMembersTab, cls).setUpClass() cls.team_dir_pg = TeamsDirPage(cls) cls.user_message_pg = user_messages_page.UserMessagesPage(cls) cls.members_tab = members_tab.MembersTab(cls) cls.team_owner = UserFactory.create() cls.team = TeamMemberFactory.create( team__name='Members tab roles Test', user=cls.team_owner).team cls.promoted_manager = TeamContributorMemberFactory.create( team=cls.team, user=UserFactory()).user cls.promoted_admin = TeamContributorMemberFactory.create( team=cls.team, user=UserFactory()).user cls.project = TeamProjectFactory.create( team=cls.team, workflow_enabled=True, ) cls.members_tab.open_members_page(cls.team.slug)
def setUpClass(cls): super(TestCaseManageMembers, cls).setUpClass() cls.members_tab = members_tab.MembersTab(cls) cls.team_owner = UserFactory.create() cls.team = TeamMemberFactory.create(team__membership_policy=1, user=cls.team_owner).team cls.manager = TeamManagerMemberFactory.create(team=cls.team).user cls.admin = TeamAdminMemberFactory.create(team=cls.team).user cls.member = TeamContributorMemberFactory.create(team=cls.team).user cls.members_tab.open_members_page(cls.team.slug)
def test_public__2nd_member(self): """Rollback active for 2nd team member on published version """ member2 = TeamContributorMemberFactory(team=self.team).user video, tv = self._add_team_video() v1, _ = self._create_complete_rev(video, self.contributor) self.video_lang_pg.open_video_lang_page(video.video_id, 'en') self.video_lang_pg.log_in(member2.username, 'password') self.video_lang_pg.open_page(v1.get_absolute_url()) self.assertTrue(self.video_lang_pg.rollback_exists())
def test_unpublished__member_with_no_create_tasks(self): """Member can't edit unpublished version when create tasks is manager level. """ self.team.task_assign_policy = 30 self.team.save() team_member = TeamContributorMemberFactory(team=self.team).user self.video_lang_pg.log_in(team_member.username, 'password') self.video_lang_pg.open_video_lang_page(self.video.video_id, 'en') self.assertEqual(self.video_lang_pg.EDIT_INACTIVE_TEXT, self.video_lang_pg.edit_subtitles_active())
def setUpClass(cls): super(TestCaseTeamMemberResource, cls).setUpClass() cls.data_utils = data_helpers.DataHelpers() cls.user = UserFactory.create(username='******', is_partner=True) cls.team_member = UserFactory.create(username='******') cls.data_utils.create_user_api_key(cls.user) #create an open team with description text and 2 members cls.open_team = TeamMemberFactory.create( team__name="A1 Waay Cool team", team__slug='a1-waay-cool-team', team__description='this is the coolest, most creative team ever', user=cls.user, ).team TeamContributorMemberFactory.create( team=cls.open_team, user=UserFactory.create(username='******')) #Open to the teams page so you can see what's there. cls.teams_dir_pg = TeamsDirPage(cls) cls.teams_dir_pg.open_teams_page()
def test_draft__not_task_assignee(self): """Rollback active for member when task not started. """ member2 = TeamContributorMemberFactory(team=self.team).user video, tv = self._add_team_video() v1, _ = self._create_two_drafts(video, self.contributor) self.video_lang_pg.open_video_lang_page(video.video_id, 'en') self.video_lang_pg.log_in(member2.username, 'password') self.video_lang_pg.open_page(v1.get_absolute_url()) self.assertFalse(self.video_lang_pg.rollback_exists())
def test_diffing_page__not_task_assignee(self): """Rollback not active for member not assigned with task. """ member2 = TeamContributorMemberFactory(team=self.team).user video, tv = self._add_team_video() v1, v2 = self._create_two_drafts(video, self.contributor) self.video_lang_pg.open_video_lang_page(video.video_id, 'en') self.video_lang_pg.log_in(member2.username, 'password') self.diffing_pg.open_diffing_page(v1.id, v2.id) self.assertFalse(self.diffing_pg.rollback_exists())
def test_draft__not_task_assignee(self): """Edit Subtitles active for members when no workflows. """ member2 = TeamContributorMemberFactory(team=self.team).user video, tv = self._add_team_video() subs = os.path.join(self.subs_dir, 'Timed_text.en.srt') self._upload_en_draft(video, subs, user=self.contributor) self.video_lang_pg.open_video_lang_page(video.video_id, 'en') self.video_lang_pg.log_in(member2.username, 'password') self.video_lang_pg.page_refresh() self.assertEqual('active', self.video_lang_pg.edit_subtitles_active())
def test_public__member_with_create_tasks(self): """Member can rollback to draft when create tasks is any team member. """ video, tv = self._add_team_video() v1, _ = self._create_complete_rev(video, self.contributor) self._review_and_approve(tv) member2 = TeamContributorMemberFactory(team=self.team).user self.video_lang_pg.open_video_lang_page(video.video_id, 'en') self.video_lang_pg.log_in(member2.username, 'password') self.video_lang_pg.open_page(v1.get_absolute_url()) self.assertTrue(self.video_lang_pg.rollback_exists())
def test_contributor__no_edit(self): """Video policy: manager and admin; contributor sees no edit link. """ vids = self.add_some_team_videos() self.logger.info('Adding user contributor to the team and logging in') #Create a user who is a contributor to the team. contributor = TeamContributorMemberFactory( team=self.limited_access_team, user=UserFactory(username='******')).user self.videos_tab.log_in(contributor.username, 'password') self.videos_tab.open_videos_tab(self.limited_access_team.slug) self.assertFalse(self.videos_tab.video_has_link(vids[0].title, 'Edit'))
def setUpClass(cls): super(TestCaseMessages, cls).setUpClass() cls.data_utils = data_helpers.DataHelpers() cls.user = UserFactory.create() cls.data_utils.create_user_api_key(cls.user) cls.open_team = TeamMemberFactory.create( team__name="A1 Waay Cool team", team__slug='a1-waay-cool-team', team__description='this is the coolest, most creative team ever', user=cls.user, ).team cls.team_member = UserFactory.create(username='******') TeamContributorMemberFactory.create(team=cls.open_team, user=cls.team_member) for x in range(3): TeamContributorMemberFactory.create(team=cls.open_team, user=UserFactory.create()) cls.second_user = UserFactory.create(username='******') cls.messages_pg = user_messages_page.UserMessagesPage(cls) cls.messages_pg.open_messages()
def test_public__member_with_create_tasks(self): """Member can edit public version when create tasks is any team member. """ member2 = TeamContributorMemberFactory(team=self.team).user video, tv = self._add_team_video() subs = os.path.join(self.subs_dir, 'Timed_text.en.srt') self._upload_en_draft(video, subs, user=self.contributor, complete=True) self.video_lang_pg.open_video_lang_page(video.video_id, 'en') self.video_lang_pg.log_in(member2.username, 'password') self.video_lang_pg.page_refresh() self.assertEqual('active', self.video_lang_pg.edit_subtitles_active())
def test_public__member_with_no_create_tasks(self): """Member can not rollback version when create tasks is manager level. """ self.team.task_assign_policy = 30 self.team.save() self.logger.info("Task assign policy: %s" % self.team.task_assign_policy) member2 = TeamContributorMemberFactory(team=self.team).user video, tv = self._add_team_video() v1, _ = self._create_complete_rev(video, self.contributor) self._review_and_approve(tv) self.video_pg.open_video_page(video.video_id) self.video_lang_pg.log_in(member2.username, 'password') self.video_lang_pg.open_page(v1.get_absolute_url()) self.assertFalse(self.video_lang_pg.rollback_exists())
def test_draft__task_unassigned(self): """Edit Subtitles inactive for unassigned task, edit via tasks panel. """ member2 = TeamContributorMemberFactory(team=self.team).user video, tv = self._add_team_video() subs = os.path.join(self.subs_dir, 'Timed_text.en.srt') self._upload_en_draft(video, subs, user=self.contributor) task = list(tv.task_set.incomplete_subtitle().filter(language='en'))[0] task.assignee = None task.save() self.video_lang_pg.open_video_lang_page(video.video_id, 'en') self.video_lang_pg.log_in(member2.username, 'password') self.video_lang_pg.page_refresh() self.assertEqual(self.video_lang_pg.EDIT_VIA_TASK_TEXT, self.video_lang_pg.edit_subtitles_active())
def test_add_suggestion__not_displayed(self): """Add videos link not displayed for user with no permissions, when no videos found. """ test_team = TeamMemberFactory.create( team__name='Admin Manager Video Policy', team__slug='video-policy-2', team__video_policy=2, user=self.team_owner, ).team team_member = TeamContributorMemberFactory.create( team=test_team, user=UserFactory(username='******')).user self.dashboard_tab.log_in(team_member.username, 'password') self.dashboard_tab.open_team_page(test_team.slug) self.assertFalse( self.dashboard_tab.suggestion_present(suggestion_type='add'))
def test_approver_sent_back__reviewer(self): """Rollback active for reviewer after transcript fails approve. """ reviewer = TeamContributorMemberFactory(team=self.team).user video, tv = self._add_team_video() v1, _ = self._create_complete_rev(video, self.contributor) #Accept transcript in review phase self.data_utils.complete_review_task(tv, 20, reviewer) #Reject transcript in the approve phase self.data_utils.complete_approve_task(tv, 30, self.owner) self.video_lang_pg.open_video_lang_page(video.video_id, 'en') self.video_lang_pg.log_in(reviewer.username, 'password') self.video_lang_pg.open_page(v1.get_absolute_url()) self.assertTrue(self.video_lang_pg.rollback_exists())
def test_public__member_with_no_create_tasks(self): """Member can rollback to draft when create tasks is any team member. """ self.team.task_assign_policy = 30 self.team.save() self.logger.info("Task assign policy: %s" % self.team.task_assign_policy) video, tv = self._add_team_video() v1, _ = self._create_complete_rev(video, self.contributor) member2 = TeamContributorMemberFactory(team=self.team).user self.video_lang_pg.open_video_lang_page(video.video_id, 'en') self.video_lang_pg.log_in(member2.username, 'password') self.video_lang_pg.open_page(v1.get_absolute_url()) self.assertFalse(self.video_lang_pg.rollback_exists())
def test_contributor__tasks_permission(self): """Task policy: all team members; contributor sees the task link. """ self.logger.info('setup: Setting task policy to all team members') self.limited_access_team.task_assign_policy = 10 self.limited_access_team.save() vids = self.add_some_team_videos() #Create a user who is a contributor to the team. self.logger.info('Adding user contributor to the team and logging in') contributor = TeamContributorMemberFactory( team=self.limited_access_team, user=UserFactory(username='******')).user self.videos_tab.log_in(contributor.username, 'password') self.videos_tab.open_videos_tab(self.limited_access_team.slug) self.assertTrue(self.videos_tab.video_has_link(vids[0].title, 'Tasks'))
def setUpClass(cls): super(TestCaseDraftVideos, cls).setUpClass() cls.data_utils = data_helpers.DataHelpers() cls.video_pg = video_page.VideoPage(cls) cls.video_lang_pg = video_language_page.VideoLanguagePage(cls) cls.menu = unisubs_menu.UnisubsMenu(cls) cls.create_modal = dialogs.CreateLanguageSelection(cls) cls.user = UserFactory(username='******', is_partner=True) cls.data_utils.create_user_api_key(cls.user) #Add a team with workflows, tasks and preferred languages cls.logger.info('setup: Create a team with tasks enabled') cls.team = TeamMemberFactory.create( team__workflow_enabled=True, team__subtitle_policy=20, team__translate_policy=20, user=cls.user, ).team cls.team_workflow = WorkflowFactory( team=cls.team, autocreate_subtitle=True, autocreate_translate=True, approve_allowed=10, review_allowed=10, ) cls.member = TeamContributorMemberFactory.create( team=cls.team, user=UserFactory(username='******')).user cls.nonmember = UserFactory() #Add video to team with draft subtitles cls.logger.info('Setup: Add video to team with draft subs.') cls.draft = TeamVideoFactory.create( team=cls.team, video=cls.data_utils.create_video(), added_by=cls.user).video cls.data_utils.upload_subs(cls.draft, data=None, user=dict(username=cls.user.username, password='******')) cls.video_pg.open_video_page(cls.draft.video_id) cls.video_pg.set_skiphowto()
def test_no_langs__available_tasks(self): """Members with no lang prefs the list of available tasks in English. """ mono_glot = TeamContributorMemberFactory.create( team=self.team, user=UserFactory()).user video = self.data_utils.create_video() video.primary_audio_language_code = 'fr' video.save() tv = TeamVideoFactory(team=self.team, added_by=self.user, video=video) task = list(tv.task_set.incomplete_subtitle().filter(language='fr'))[0] task.assignee = mono_glot task.save() #Login user and go to team dashboard page self.dashboard_tab.log_in(mono_glot.username, 'password') self.dashboard_tab.open_team_page(self.team.slug) expected_lang_list = ['Create English subtitles'] langs = self.dashboard_tab.languages_needed('fireplace.mp4') self.assertEqual(sorted(langs), sorted(expected_lang_list))
def test_approver_sent_back__reviewer(self): """Reviewer must Edit Subtitles via task after fails approve. """ reviewer = TeamContributorMemberFactory(team=self.team).user video, tv = self._add_team_video() subs = os.path.join(self.subs_dir, 'Timed_text.en.srt') self._upload_en_draft(video, subs, user=self.contributor, complete=True) #Accept transcript in review phase self.data_utils.complete_review_task(tv, 20, reviewer) #Reject transcript in the approve phase self.data_utils.complete_approve_task(tv, 30, self.owner) self.video_lang_pg.open_video_lang_page(video.video_id, 'en') self.video_lang_pg.log_in(reviewer.username, 'password') self.video_lang_pg.page_refresh() self.assertEqual(self.video_lang_pg.EDIT_VIA_TASK_TEXT, self.video_lang_pg.edit_subtitles_active())
def test_public__member_with_no_create_tasks(self): """Member can't edit public version when create tasks is manager level. """ self.team.task_assign_policy = 30 self.team.save() self.logger.info("Task assign policy: %s" % self.team.task_assign_policy) member2 = TeamContributorMemberFactory(team=self.team).user self.logger.info('Test user: %s' % member2.username) video, tv = self._add_team_video() subs = os.path.join(self.subs_dir, 'Timed_text.en.srt') self._upload_en_draft(video, subs, user=self.contributor, complete=True) self.video_pg.open_video_page(video.video_id) self.video_lang_pg.log_in(member2.username, 'password') self.video_lang_pg.open_video_lang_page(video.video_id, 'en') self.assertEqual(self.video_lang_pg.EDIT_INACTIVE_TEXT, self.video_lang_pg.edit_subtitles_active())
def setUpClass(cls): super(TestCaseTeamMessages, cls).setUpClass() cls.a_team_pg = ATeamPage(cls) cls.members_tab = members_tab.MembersTab(cls) cls.messages_tab = messages_tab.MessagesTab(cls) cls.user_message_pg = user_messages_page.UserMessagesPage(cls) cls.non_member = UserFactory.create(username='******') cls.team_owner = UserFactory.create(is_partner=True) #CREATE AN APPLICATION-ONLY TEAM cls.team = TeamMemberFactory.create( team__membership_policy=1, user=cls.team_owner, ).team cls.team_member = TeamContributorMemberFactory.create( user=UserFactory(), team=cls.team).user #ADD THE TEST MESSAGES TO THE TEST TEAM cls.members_tab.open_members_page(cls.team.slug) cls.members_tab.log_in(cls.team_owner.username, 'password') cls.messages_tab.open_messages_tab(cls.team.slug) cls.messages_tab.edit_messages(cls._TEST_MESSAGES)
def test_member__language_suggestion(self): """Members with no lang pref see the prompt to set language preference. """ mono_glot = TeamContributorMemberFactory.create( team=self.team, user=UserFactory()).user self.dashboard_tab.open_team_page(self.team.slug) self.browser.delete_all_cookies() self.dashboard_tab.log_in(mono_glot.username, 'password') self.logger.info('Subtitle task for jaws video is assigned to Mono ' 'Glot via api.') jaws_vid = self.vid_obj_list[0] #see setUp for data details. task_resp = self.get_task(jaws_vid.video_id, self.team, 'Subtitle', 'fr') url_part = task_resp['resource_uri'] updated_info = {'assignee': mono_glot.username} status, response = self.data_utils.put_api_request( self.user, url_part, updated_info) self.dashboard_tab.open_team_page(self.team.slug) self.assertTrue( self.dashboard_tab.suggestion_present( suggestion_type='authed_language'))