def test_my_ratings(driver, django_db_blocker): # creating a video login(driver) with django_db_blocker.unblock(): me = UserPreferences.objects.get(user__username=test_username) video_id1 = create_test_video() video_id2 = create_test_video() video_1 = Video.objects.get(video_id=video_id1) video_2 = Video.objects.get(video_id=video_id2) ExpertRating.objects.create(video_1=video_1, video_2=video_2, **{k: 50 for k in VIDEO_FIELDS}, user=me) open_more_menu(driver) WebDriverWait(driver, TIME_WAIT).until( EC.visibility_of_element_located((By.ID, 'video_details_menu'))) print("Going to the details page") expert_interface_btn = driver.find_element_by_id('video_details_menu') expert_interface_btn.click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.CLASS_NAME, 'video_id_text_field'))) elem = driver.find_element_by_class_name('video_id_text_field') elem = elem.find_element_by_tag_name('input') elem.clear() elem.send_keys(video_id1, Keys.HOME) if elem.get_attribute('value') != video_id1: elem.send_keys(3 * [Keys.DELETE]) WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, 'button_video_ratings'))) # opening ratings page driver.find_element_by_class_name('button_video_ratings').click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.ID, 'id_my_ratings'))) WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.CLASS_NAME, 'video_rating_video'))) # have only 1 rating assert len(driver.find_elements_by_class_name('video_rating_video')) == 1 # rerate driver.find_elements_by_class_name('video_rating_rerate')[0].click() # on the right page assert driver.current_url.split('/')[-2:] == [video_id1, video_id2] logout(driver)
def test_thank_unthank(driver, django_db_blocker): with django_db_blocker.unblock(): video_id = create_test_video() video = Video.objects.get(video_id=video_id) video_id1 = create_test_video() video1 = Video.objects.get(video_id=video_id1) domain = EmailDomain.objects.create(status=EmailDomain.STATUS_ACCEPTED, domain="@" + random_alphanumeric() + ".com") # creating a certified user with ratings of the video other_user = DjangoUser.objects.create_user( username=random_alphanumeric(), is_active=True) oup = UserPreferences.objects.create(user=other_user) oui = UserInformation.objects.create(user=other_user) ExpertRating.objects.create(user=oup, video_1=video, video_2=video1) ve = VerifiableEmail.objects.create(user=oui, email="aba" + domain.domain, is_verified=True) login(driver) open_more_menu(driver) WebDriverWait(driver, TIME_WAIT).until( EC.visibility_of_element_located((By.ID, 'video_details_menu'))) print("Going to the details page") expert_interface_btn = driver.find_element_by_id('video_details_menu') expert_interface_btn.click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.CLASS_NAME, 'video_id_text_field'))) elem = driver.find_element_by_class_name('video_id_text_field') elem = elem.find_element_by_tag_name('input') # setting the video ID elem.clear() elem.send_keys(video_id, Keys.HOME) if elem.get_attribute('value') != video_id: elem.send_keys(3 * [Keys.DELETE]) WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.ID, f'id_{video_id}_thank'))) driver.find_element_by_id(f'id_{video_id}_thank').click() with django_db_blocker.unblock(): assert get_object_with_timeout( VideoRatingThankYou, video__video_id=video_id, thanks_from__user__username=test_username, thanks_to__user__username=other_user.username) WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.ID, f'id_{video_id}_unthank'))) driver.find_element_by_id(f'id_{video_id}_unthank').click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.ID, f'id_{video_id}_thank'))) with django_db_blocker.unblock(): assert VideoRatingThankYou.objects.filter( video__video_id=video_id, thanks_from__user__username=test_username, thanks_to__user__username=other_user.username).count() == 0 logout(driver) with django_db_blocker.unblock(): Video.objects.filter(video_id=video_id).delete() Video.objects.filter(video_id=video_id1).delete() ve.delete() other_user.delete()
def test_mention(driver, django_db_blocker): login(driver) with django_db_blocker.unblock(): video_id = create_test_video() domain = EmailDomain.objects.create(status=EmailDomain.STATUS_ACCEPTED, domain="@" + random_alphanumeric() + ".com") ve = VerifiableEmail.objects.create( user=UserInformation.objects.get(user__username=test_username), email="aba" + domain.domain, is_verified=True) open_more_menu(driver) WebDriverWait(driver, TIME_WAIT).until( EC.visibility_of_element_located((By.ID, 'video_details_menu'))) print("Going to the details page") expert_interface_btn = driver.find_element_by_id('video_details_menu') expert_interface_btn.click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.CLASS_NAME, 'video_id_text_field'))) elem = driver.find_element_by_class_name('video_id_text_field') elem = elem.find_element_by_tag_name('input') # setting the video ID elem.clear() elem.send_keys(video_id, Keys.HOME) if elem.get_attribute('value') != video_id: elem.send_keys(3 * [Keys.DELETE]) WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, f'comment_editor_{video_id}_undefined'))) # sending the comment editor = driver.find_element_by_class_name( f'comment_editor_{video_id}_undefined') editor.find_element_by_class_name('public-DraftEditor-content').send_keys( '@' + test_username) # selecting the mention suggestion WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, 'rdw-suggestion-option'))) elems = driver.find_elements_by_class_name('rdw-suggestion-option') elems = [x for x in elems if test_username in x.text] assert len(elems) == 1 WebDriverWait(driver, TIME_WAIT).until(EC.visibility_of(elems[0])) elems[0].click() action = webdriver.common.action_chains.ActionChains(driver) action.move_to_element_with_offset(elems[0], elems[0].rect['width'] / 2, elems[0].rect['height'] / 2) action.click() action.perform() WebDriverWait(driver, TIME_WAIT).until(EC.invisibility_of_element(elems[0])) driver.find_elements_by_class_name( f'comment_editor_submit_{video_id}_undefined')[0].click() with django_db_blocker.unblock(): assert get_object_with_timeout(VideoComment, video__video_id=video_id) # going to mentions... driver.find_element_by_id('personal_info_menu').click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.ID, 'id_mentions'))) driver.find_element_by_id('id_mentions').click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, 'class_li_comment_mention'))) assert len( driver.find_elements_by_class_name('class_li_comment_mention')) == 1 logout(driver) with django_db_blocker.unblock(): Video.objects.filter(video_id=video_id).delete() ve.delete()
def test_comments(driver, django_db_blocker): # creating a video with django_db_blocker.unblock(): video_id = create_test_video() login(driver) open_more_menu(driver) with django_db_blocker.unblock(): UserInformation.objects.filter(user__username=test_username).update( comment_anonymously=False) WebDriverWait(driver, TIME_WAIT).until( EC.visibility_of_element_located((By.ID, 'video_details_menu'))) print("Going to the details page") expert_interface_btn = driver.find_element_by_id('video_details_menu') expert_interface_btn.click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.CLASS_NAME, 'video_id_text_field'))) elem = driver.find_element_by_class_name('video_id_text_field') elem = elem.find_element_by_tag_name('input') # setting the video ID elem.clear() elem.send_keys(video_id, Keys.HOME) if elem.get_attribute('value') != video_id: elem.send_keys(3 * [Keys.DELETE]) WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, f'comment_editor_{video_id}_undefined'))) # sending the comment editor = driver.find_element_by_class_name( f'comment_editor_{video_id}_undefined') editor.find_element_by_class_name('public-DraftEditor-content').send_keys( 'sdf') driver.find_elements_by_class_name( f'comment_editor_submit_{video_id}_undefined')[0].click() # checking results with django_db_blocker.unblock(): comment = get_object_with_timeout(VideoComment, video__video_id=video_id, parent_comment=None) assert comment.comment == "<p>sdf</p>" assert not comment.anonymous cid = VideoComment.objects.filter(video__video_id=video_id).get().id WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, f'comment_{cid}_reply'))) # replying to a comment driver.find_element_by_class_name(f'comment_{cid}_reply').click() driver.find_element_by_class_name( f'comment_editor_{video_id}_{cid}').find_element_by_class_name( 'public-DraftEditor-content').send_keys('aba') driver.find_elements_by_class_name( f'comment_editor_submit_{video_id}_{cid}')[0].click() with django_db_blocker.unblock(): subcid = get_object_with_timeout(VideoComment, video__video_id=video_id, parent_comment__id=cid).id WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, f'comment_{subcid}_reply'))) # replying to a reply anonymously driver.find_element_by_class_name(f'comment_{subcid}_reply').click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, f'comment_editor_{video_id}_{subcid}'))) driver.find_element_by_class_name( f'comment_editor_{video_id}_{subcid}').find_element_by_class_name( 'public-DraftEditor-content').send_keys('zzzaaa') checkbox = driver.find_element_by_class_name( f'anonymous_comment_checkbox_class_{video_id}_{subcid}') if not checkbox.find_element_by_tag_name('input').get_property('checked'): checkbox.click() driver.find_elements_by_class_name( f'comment_editor_submit_{video_id}_{subcid}')[0].click() with django_db_blocker.unblock(): assert get_object_with_timeout( VideoComment, video__video_id=video_id, parent_comment__id=cid).comment == '<p>aba</p>' subsubc = get_object_with_timeout(VideoComment, video__video_id=video_id, parent_comment_id=subcid) assert subsubc.anonymous assert subsubc.comment == '<p>zzzaaa</p>' # editing the subcomment with django_db_blocker.unblock(): ecid = get_object_with_timeout(VideoComment, video__video_id=video_id, parent_comment__id=cid).id WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, f'comment_{ecid}_edit'))) driver.find_element_by_class_name(f'comment_{ecid}_edit').click() elem = driver.find_element_by_class_name( f'comment_editor_cid_{ecid}').find_element_by_class_name( 'public-DraftEditor-content') WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, f'comment_editor_cid_{ecid}_editing'))) elem.click() elem.send_keys('xyz') WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, f'comment_{ecid}_save_edits'))) driver.find_element_by_class_name(f'comment_{ecid}_save_edits').click() with django_db_blocker.unblock(): assert get_object_with_timeout( VideoComment, video__video_id=video_id, parent_comment__id=cid).comment.strip() == '<p>xyzaba</p>' # comment markers with django_db_blocker.unblock(): assert VideoComment.objects.filter( video__video_id=video_id, parent_comment__id=cid).get().votes_plus == 0 driver.find_element_by_class_name(f'vote_plus_comment_{ecid}').click() with django_db_blocker.unblock(): assert VideoComment.objects.filter( video__video_id=video_id, parent_comment__id=cid).get().votes_plus == 1 driver.find_element_by_class_name(f'vote_plus_comment_{ecid}').click() with django_db_blocker.unblock(): assert VideoComment.objects.filter( video__video_id=video_id, parent_comment__id=cid).get().votes_plus == 0 logout(driver)
def test_create_view_reports(driver, django_db_blocker): # creating a video with django_db_blocker.unblock(): video_id = create_test_video() login(driver) open_more_menu(driver) WebDriverWait(driver, TIME_WAIT).until( EC.visibility_of_element_located((By.ID, 'video_details_menu'))) print("Going to the details page") expert_interface_btn = driver.find_element_by_id('video_details_menu') expert_interface_btn.click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.CLASS_NAME, 'video_id_text_field'))) elem = driver.find_element_by_class_name('video_id_text_field') elem = elem.find_elements_by_tag_name('input')[0] elem.clear() elem.send_keys(video_id, Keys.HOME) if elem.get_attribute('value') != video_id: elem.send_keys(3 * [Keys.DELETE]) print("target id", video_id) assert elem.get_attribute('value') == video_id WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, 'button_video_reports'))) # going to reports page driver.find_element_by_class_name('button_video_reports').click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.CLASS_NAME, 'report_explanation'))) assert not driver.find_elements_by_class_name('video_report_one_item') checked = {k: np.random.choice([True, False]) for k in VIDEO_REPORT_FIELDS} for k in VIDEO_REPORT_FIELDS: checkbox = driver.find_element_by_class_name(f'report_{k}_checkbox') if checked[k]: checkbox.click() assert checkbox.find_element_by_tag_name('input').get_property( 'checked') == checked[k] driver.find_element_by_class_name( 'report_explanation').find_element_by_tag_name('textarea').send_keys( "Test explanation") driver.find_element_by_class_name('report_submit').click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.ID, 'id_report_submission_ok'))) driver.refresh() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, 'video_report_one_item'))) assert len( driver.find_elements_by_class_name('video_report_one_item')) == 1 with django_db_blocker.unblock(): report = VideoReports.objects.get(video__video_id=video_id) assert report.explanation == "Test explanation" for k in VIDEO_REPORT_FIELDS: assert checked[k] == getattr(report, k) driver.refresh() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.CLASS_NAME, 'report_explanation'))) # REPORT EDITING checked_old = checked checked = {k: np.random.choice([True, False]) for k in VIDEO_REPORT_FIELDS} for k in VIDEO_REPORT_FIELDS: checkbox = driver.find_element_by_class_name(f'report_{k}_checkbox') if checked_old[k] != checked[k]: checkbox.click() assert checkbox.find_element_by_tag_name('input').get_property( 'checked') == checked[k] elem = driver.find_element_by_class_name( 'report_explanation').find_element_by_tag_name('textarea') elem.send_keys(" II") driver.find_element_by_class_name('report_submit').click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.ID, 'id_report_submission_ok'))) driver.refresh() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.CLASS_NAME, 'report_explanation'))) assert len( driver.find_elements_by_class_name('video_report_one_item')) == 1 with django_db_blocker.unblock(): report = VideoReports.objects.get(video__video_id=video_id) assert report.explanation == "Test explanation II" for k in VIDEO_REPORT_FIELDS: assert checked[k] == getattr(report, k) logout(driver)
def test_representative(driver, django_db_blocker): # creating 2 videos video_ids = [] with django_db_blocker.unblock(): for _ in range(2): video_ids.append(create_test_video()) videos = [Video.objects.get(video_id=vid) for vid in video_ids] login(driver) with django_db_blocker.unblock(): me = UserPreferences.objects.get(user__username=test_username) # creating ratings feature = VIDEO_FIELDS[0] other_values = {k: 50 for k in VIDEO_FIELDS if k != feature} with django_db_blocker.unblock(): ExpertRating.objects.create(video_1=videos[0], video_2=videos[1], **other_values, **{feature: 0}, user=me) # left is better VideoRating.objects.create(video=videos[0], user=me, **{feature: 0}, **other_values) VideoRating.objects.create(video=videos[1], user=me, **{feature: 100}, **other_values) open_more_menu(driver) WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.ID, 'representative_menu'))) driver.find_element_by_id('representative_menu').click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.CLASS_NAME, 'representative_debug_slider'))) sliders = driver.find_elements_by_class_name('representative_debug_slider') assert len(sliders) == 1 set_slider_value(driver, slider=sliders[0], value=100) driver.find_element_by_class_name('representative_debug_submit').click() driver.refresh() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.ID, 'id_representative_interface_all'))) WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.ID, 'id_representative_not_loading'))) sliders = driver.find_elements_by_class_name('representative_debug_slider') assert len(sliders) == 0 with django_db_blocker.unblock(): assert ExpertRatingSliderChanges.objects.filter( context='DIS').count() > 0 logout(driver)
def test_cyclic_create_view_resolve(driver, django_db_blocker): # creating 3 videos video_ids = [] with django_db_blocker.unblock(): for _ in range(3): video_ids.append(create_test_video()) videos = [Video.objects.get(video_id=vid) for vid in video_ids] login(driver) with django_db_blocker.unblock(): me = UserPreferences.objects.get(user__username=test_username) # creating ratings feature = VIDEO_FIELDS[0] other_values = {k: 50 for k in VIDEO_FIELDS if k != feature} with django_db_blocker.unblock(): ExpertRating.objects.create(video_1=videos[0], video_2=videos[1], **other_values, **{feature: 0}, user=me) # left is better ExpertRating.objects.create(video_1=videos[1], video_2=videos[2], **other_values, **{feature: 0}, user=me) # left is better ExpertRating.objects.create(video_1=videos[2], video_2=videos[0], **other_values, **{feature: 0}, user=me) # left is better open_more_menu(driver) WebDriverWait(driver, TIME_WAIT).until( EC.visibility_of_element_located((By.ID, 'inconsistencies_menu'))) driver.find_element_by_id('inconsistencies_menu').click() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.CLASS_NAME, 'inconsistency'))) incons = driver.find_elements_by_class_name('inconsistency') assert len(incons) > 0 for inc in incons: vids = inc.get_attribute('id').split('_') assert len(vids) == 2 assert all([v in video_ids for v in vids]) incons[0].find_element_by_class_name('inconsistency_slider') set_slider_value( driver, slider=incons[0].find_element_by_class_name('inconsistency_slider'), value=100) WebDriverWait(driver, TIME_WAIT).until( EC.element_to_be_clickable((By.CLASS_NAME, 'inconsistency_submit'))) driver.find_element_by_class_name('inconsistency_submit').click() driver.refresh() WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located((By.ID, 'id_all_inconsistencies'))) WebDriverWait(driver, TIME_WAIT).until( EC.presence_of_element_located( (By.ID, 'id_inconsistencies_not_loading'))) incons = driver.find_elements_by_class_name('inconsistency') assert not incons with django_db_blocker.unblock(): assert ExpertRatingSliderChanges.objects.filter( context='INC').count() > 0 logout(driver)