Esempio n. 1
0
def test_comment_uncertified(driver, django_db_blocker):
    # creating a user and leaving a comment, checking that it is not shown
    username = str(uuid1())
    domain = f"@{uuid1()}.com"

    with django_db_blocker.unblock():
        u = DjangoUser.objects.create_user(username=username, is_active=True)
        EmailDomain.objects.create(domain=domain,
                                   status=EmailDomain.STATUS_ACCEPTED)
        ui = UserInformation.objects.create(user=u)
        up = UserPreferences.objects.create(user=u)
        v = Video.objects.create(video_id=random_alphanumeric())
        VerifiableEmail.objects.create(user=ui, email=f"test{domain}")
        VideoComment.objects.create(user=up, video=v, comment="test")

    login(driver)

    res = do_api_call_v2(driver,
                         '/video_comments/?video__video_id=' + v.video_id)
    assert res['count'] == 0

    with django_db_blocker.unblock():
        VerifiableEmail.objects.filter(
            user=ui, email=f"test{domain}").update(is_verified=True)

    res = do_api_call_v2(driver,
                         '/video_comments/?video__video_id=' + v.video_id)
    assert res['count'] == 1

    logout(driver)

    with django_db_blocker.unblock():
        u.delete()
        v.delete()
Esempio n. 2
0
def test_no_show(driver, django_db_blocker):
    login(driver)

    with django_db_blocker.unblock():
        username = "******" + str(uuid1())
        u = DjangoUser.objects.create_user(username=username)
        ui = UserInformation.objects.create(user=u, show_my_profile=False)

    r = do_api_call_v2(driver=driver,
                       url=f'/user_information/{ui.id}/',
                       expect_fail=True)
    assert not r.ok

    r = do_api_call_v2(driver=driver,
                       url=f'/user_information/?user__username={username}')
    assert r['count'] == 0

    # test that can see my own hidden profile
    with django_db_blocker.unblock():
        UserInformation.objects.filter(user__username=test_username).update(
            show_my_profile=False)

    r = do_api_call_v2(
        driver=driver,
        url=f'/user_information/?user__username={test_username}')
    assert r['count'] == 1

    with django_db_blocker.unblock():
        UserInformation.objects.filter(user__username=test_username).update(
            show_my_profile=True)

    logout(driver)
    with django_db_blocker.unblock():
        u.delete()
Esempio n. 3
0
def test_withlogin(driver, django_db_blocker):
    login(driver)

    # going to user personal profile
    driver.find_element_by_id('personal_info_menu').click()

    # editing the profile

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'edit_userprofile_button_id')))

    driver.find_element_by_id('edit_userprofile_button_id').click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located(
            (By.CLASS_NAME, 'to_verified_domains_class')))

    # going to the list of domains
    driver.find_element_by_class_name('to_verified_domains_class').click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'domains')))

    with _create_emails(django_db_blocker) as domains:
        ack_email, rej_email, pend_email = domains
        driver.refresh()

        WebDriverWait(driver, TIME_WAIT).until(
            EC.presence_of_element_located((By.ID, 'domains')))

        _test_domains(driver, ack_email, rej_email, pend_email)

    logout(driver)
Esempio n. 4
0
def test_feature_links(driver, django_db_blocker):
    login(driver)

    set_all_features_enabled(django_db_blocker)

    print("Going to the expert interface...")
    expert_interface_btn = driver.find_element_by_id('expert_interface')
    expert_interface_btn.click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_expert_rating_page')))

    for f in VIDEO_FIELDS:
        elem_id = "id_explanation_" + f

        WebDriverWait(driver, TIME_WAIT).until(
            EC.presence_of_element_located((By.ID, elem_id)))

        link = driver.find_element_by_id(elem_id).get_attribute('href')
        assert link.startswith('http'), link

        resp = get(link)
        assert resp.ok
        assert resp.status_code == 200
        assert 'MediaWiki' in resp.text

        print(f, resp.text[:500])

    logout(driver)
Esempio n. 5
0
def test_logging_user(client, session):
    helpers.register(client, "*****@*****.**", "fluttershy", "UserTLU")
    helpers.login(client, "*****@*****.**", "fluttershy")
    rv = client.get("/user", follow_redirects=True)
    assert b"*****@*****.**" in rv.data
    helpers.logout(client)
    assert b"Logged as UserTLU" in rv.data
Esempio n. 6
0
def test_profile(client, session):
    helpers.register(client, "*****@*****.**", "fluttershy", "UserTP")
    helpers.login(client, "*****@*****.**", "fluttershy")
    rv = client.get("/user", follow_redirects=True)
    assert b"Please fill me !" in rv.data
    assert b"Please fill me !" in rv.data
    helpers.logout(client)
Esempio n. 7
0
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)
Esempio n. 8
0
def test_change_password(client, session):
    init_password = "******"
    new_password = "******"

    register(client, "*****@*****.**", init_password, "UserB")

    # Can login with initial password
    rv = login(client, "*****@*****.**", init_password)
    assert b"Logged as UserB" in rv.data

    # Change password
    resp = client.post(
        "/change",
        data=dict(password=init_password,
                  new_password=new_password,
                  new_password_confirm=new_password),
        follow_redirects=True,
    )

    assert resp.status_code == 200
    assert b"You successfully changed your password." in resp.data

    # Logout
    logout(client)

    # Test login with new password
    resp = login(client, "*****@*****.**", new_password)
    print(resp.data)
    assert b"Logged as UserB" in resp.data
    logout(client)

    # Test login with old password
    resp = login(client, "*****@*****.**", init_password)
    assert b"Invalid password" in resp.data
Esempio n. 9
0
def test_password_reset(driver, django_db_blocker):
    open_tournesol(driver)

    # making my emails verified
    with django_db_blocker.unblock():
        ui = UserInformation.objects.get(user__username=test_username)
        ve = VerifiableEmail.objects.create(user=ui,
                                            email="*****@*****.**",
                                            is_verified=True)

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, "login_button")))

    driver.find_element_by_id('login_button').click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, "id_reset_password")))

    driver.find_element_by_id('id_reset_password').click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, "id_reset_submit")))

    username = driver.find_element_by_id('root_username')
    username.clear()
    username.send_keys(test_username)

    driver.find_element_by_id('id_reset_submit').click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, "id_email_instructions")))

    email_parsed = get_last_email()

    email_payload = None
    for payload in email_parsed.walk():
        email_payload = payload.get_payload()
    assert email_payload
    assert 'password reset' in email_payload
    print(email_payload)
    link = email_payload.strip().splitlines()
    link = [x for x in link
            if x.startswith(settings.EMAIL_PAGE_DOMAIN)][0].strip()
    print(link)
    link_no_domain = link[len(settings.EMAIL_PAGE_DOMAIN):]
    link_local_domain = web_url + '/' + link_no_domain
    driver.get(link_local_domain)

    print(link, link_no_domain, link_local_domain)

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, "root_password")))

    assert driver.find_element_by_id('root_password')

    logout(driver)

    with django_db_blocker.unblock():
        ve.delete()
Esempio n. 10
0
def test_user_ui_pref_videos(driver, django_db_blocker):
    """Test that user preferences are saved and videos are shown."""
    login(driver)

    with django_db_blocker.unblock():
        create_test_video(name="test")

    print("Going to user interface")
    ui_button = driver.find_element_by_id('user_interface')
    ui_button.click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'search_phrase')))

    print("Typing search phrase")
    search_phrase_field = driver.find_element_by_id('search_phrase')
    search_phrase_field.clear()
    search_phrase_field.send_keys('test')

    # random preferences
    np.random.seed(42)
    values = np.random.rand(len(VIDEO_FIELDS)) * 100

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_search_not_loading')))

    for f, v in zip(VIDEO_FIELDS, values):
        set_slider_value(driver, s_id='preference_slider_' + f, value=v)

        WebDriverWait(driver, TIME_WAIT).until(
            EC.presence_of_element_located((By.ID, 'id_search_not_loading')))

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_search_not_loading')))

    print("Loading recommendations")
    load_rec_btn = driver.find_element_by_id("load_recommendations")
    load_rec_btn.click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_search_not_loading')))

    entry = do_api_call_v2(driver, url='/user_preferences/my/')
    values_got = [entry[x] for x in VIDEO_FIELDS]
    values_transformed = values / 2 + 50
    diff = np.max(np.abs(values_transformed - values_got))
    assert diff < 5, (values_transformed, values_got)
    print("Preferences normal", diff)

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'video_search_result')))

    videos = driver.find_elements_by_class_name('video_search_result')
    assert videos, "No videos returned in search, or it took too long."
    print("Got", len(videos), "videos")
    logout(driver)
Esempio n. 11
0
def test_submit_video(driver):
    login(driver)

    print("Going to the expert interface...")
    expert_interface_btn = driver.find_element_by_id('expert_interface')
    expert_interface_btn.click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'video-left')))
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'video-right')))

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_no_pending_expert')))

    # print("Skipping tutorial")
    # skip_tutorial_btn = driver.find_element_by_id('start_comparing_button')
    # skip_tutorial_btn.click()

    vid1 = shortuuid.ShortUUID().random(length=10)
    vid2 = shortuuid.ShortUUID().random(length=10)

    def set_video(which, vid_id):
        selector = driver.find_element_by_id(which)
        c = selector.find_element_by_class_name('video_id_text_field')
        c = c.find_elements_by_tag_name('input')[0]
        c.clear()
        c.send_keys(vid_id)

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_no_pending_expert')))
    set_video('video-left', vid1)
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_no_pending_expert')))
    set_video('video-right', vid2)
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_no_pending_expert')))

    expert_submit_btn = driver.find_element_by_id('expert_submit_btn')
    expert_submit_btn.click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_no_pending_expert')))

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_submitted_text_info')))

    assert do_api_call_v2(driver,
                          url=f"/videos/?video_id={vid1}")['count'] >= 1
    assert do_api_call_v2(driver,
                          url=f"/videos/?video_id={vid2}")['count'] >= 1

    logout(driver)
Esempio n. 12
0
def test_premissions(driver):
    login(driver)

    driver.get(web_url + '/admin/')
    assert 'login' in driver.current_url

    driver.get(web_url + '/files/')
    assert '403 Forbidden' in driver.page_source

    driver.get(web_url)

    logout(driver)
Esempio n. 13
0
 def wrapper(*args, **kwargs):
     if current_app.config["INVITE_MODE"]:
         g.recommender = None
         logout()
         rid = session.get("rid", None)
         if rid:
             g.recommender = current_app.redis.hgetall("user:%s" % rid)
         if g.recommender:
             return method(*args, **kwargs)
         return redirect(url_for("account.confirm_invitation", next=request.url))
     else:
         return method(*args, **kwargs)
Esempio n. 14
0
def signup(driver, django_db_blocker, username, password, email):
    open_tournesol(driver)

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, "signup_button")))

    # sign up
    driver.find_element_by_id('signup_button').click()

    user_data = {
        'root_username': username,
        'root_email': email,
        'root_password': password,
        'root_password2': password
    }

    for key, val in user_data.items():
        elem = driver.find_element_by_id(key)
        elem.clear()
        elem.send_keys(val)

    # accepting the privacy policy
    pp_ckbox = driver.find_element_by_id('root_shrivacy_policy')
    if not pp_ckbox.get_property('checked'):
        pp_ckbox.click()

    buttons = driver.find_elements_by_tag_name('button')
    buttons = [x for x in buttons if x.get_attribute('type') == 'submit']
    assert len(buttons) == 1
    buttons[0].click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_email_instructions')))

    driver.delete_all_cookies()
    driver.get(web_url)

    with django_db_blocker.unblock():
        # manually activating the user
        user = DjangoUser.objects.get(username=user_data['root_username'])
        user.is_active = True
        user.save()

    login(driver,
          test_username=user_data['root_username'],
          test_password=user_data['root_password'])

    logout(driver)

    return user_data
Esempio n. 15
0
def test_home_page_link_smaller(driver, django_db_blocker):
    login(driver)
    with django_db_blocker.unblock():
        VideoRateLater.objects.filter(user__user__username=test_username).delete()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_home_toratelater')))

    driver.find_element_by_id('id_home_toratelater').click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_ratelater_page_all')))

    logout(driver)
Esempio n. 16
0
def test_privacy(driver, django_db_blocker):
    login(driver)

    # privacy test
    # creating a temp user
    with django_db_blocker.unblock():
        u = DjangoUser.objects.create_user(username="******" + str(uuid1()))
        ui = UserInformation.objects.create(user=u)

    def check_sensitive(res):
        assert 'gender' not in res
        assert 'race' not in res
        assert 'emails' not in res
        assert 'nationality' not in res
        assert 'residence' not in res
        assert 'moral_philosophy' not in res
        assert 'political_affiliation' not in res
        assert 'degree_of_political_engagement' not in res
        assert 'religion' not in res

    with django_db_blocker.unblock():
        ui.show_online_presence = True
        ui.save()

    res = do_api_call_v2(driver=driver, url=f'/user_information/{ui.id}/')
    check_sensitive(res)

    for x in [
            'google_scholar', 'website', 'linkedin', 'orcid', 'twitter',
            'youtube', 'researchgate'
    ]:
        assert x in res

    with django_db_blocker.unblock():
        ui.show_online_presence = False
        ui.save()
    res = do_api_call_v2(driver=driver, url=f'/user_information/{ui.id}/')
    check_sensitive(res)

    for x in [
            'google_scholar', 'website', 'linkedin', 'orcid', 'twitter',
            'youtube', 'researchgate'
    ]:
        assert x not in res

    with django_db_blocker.unblock():
        u.delete()

    logout(driver)
Esempio n. 17
0
def test_representative_search(driver, django_db_blocker):
    with django_db_blocker.unblock():
        u = DjangoUser.objects.create(username=random_alphanumeric(),
                                      is_active=True)
        up = UserPreferences.objects.create(user=u)
        UserInformation.objects.create(user=u, show_my_profile=True)
        video_id = create_test_video()
        video = Video.objects.get(video_id=video_id)
        ratings = {f: np.random.randn() for f in VIDEO_FIELDS}
        VideoRating.objects.create(user=up, video=video, **ratings)
        VideoRatingPrivacy.objects.create(user=up, video=video, is_public=True)

    login(driver)

    ui_button = driver.find_element_by_id('user_interface')
    ui_button.click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'search_options')))

    driver.find_element_by_class_name('search_options').click()
    inp_model = driver.find_element_by_id('autocomplete_search_model')
    inp_model.send_keys(len('Aggregated') * [Keys.BACK_SPACE])
    inp_model.send_keys(f"{u.username}'s representative")
    driver.find_element_by_class_name('MuiAutocomplete-popper').click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_search_not_loading')))

    print("Loading recommendations")
    load_rec_btn = driver.find_element_by_id("load_recommendations")
    load_rec_btn.click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_search_not_loading')))

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located(
            (By.CLASS_NAME, f'video_card_id_{video_id}')))

    # now will only see 1 video
    assert driver.find_elements_by_class_name(f'video_card_id_{video_id}')

    logout(driver)

    with django_db_blocker.unblock():
        u.delete()
        Video.objects.filter(video_id=video_id).delete()
Esempio n. 18
0
def test_login_logout(client, session):
    """Make sure login and logout works."""

    resp = register(client, "*****@*****.**", "fluttershy", "UserA",
                    "User A")
    assert resp.status_code == 200

    resp = json.loads(resp.data)
    assert "created_at" in resp
    assert "access_token" in resp

    rv = login(client, "*****@*****.**", "fluttershy")
    rv = client.get("/home")
    assert rv.status_code == 200
    assert b"Logged as UserA" in rv.data

    rv = logout(client)
    rv = client.get("/home")
    assert rv.status_code == 200
    assert b"UserA" not in rv.data

    rv = login(client, "*****@*****.**" + "x", "fluttershy")
    assert rv.status_code == 200
    assert b"Specified user does not exist" in rv.data

    rv = login(client, "*****@*****.**", "fluttershy" + "x")
    assert rv.status_code == 200
    assert b"Invalid password" in rv.data
Esempio n. 19
0
def test_register_two_identical_users(client, session):
    # Will register
    register(client, "*****@*****.**", "fluttershy", "ImUnique")
    logout(client)
    # Try to register another identical
    resp = client.post(
        "/register",
        data=dict(email="*****@*****.**",
                  password="******",
                  password_confirm="fluttershy",
                  name="ImUnique"),
        follow_redirects=True,
    )
    # should error
    assert b"Logged as" not in resp.data
    assert b"[email protected] is already associated " b"with an account." in resp.data
    assert b"Username already taken" in resp.data
    assert resp.status_code == 200
Esempio n. 20
0
def test_change_password(client, session):
    pytest.skip("outdated test :(")
    init_password = "******"
    new_password = "******"

    resp = register(client, "*****@*****.**", init_password, "UserB",
                    "User B")
    assert resp.status_code == 200

    resp = json.loads(resp.data)
    assert "created_at" in resp
    assert "access_token" in resp

    # Can login with initial password
    rv = login(client, "*****@*****.**", init_password)
    rv = client.get("/home")
    assert rv.status_code == 200
    assert b"Logged as UserB" in rv.data

    # Change password
    # no follow redirect or boom
    resp = client.post(
        "/change",
        data=dict(password=init_password,
                  new_password=new_password,
                  new_password_confirm=new_password),
        follow_redirects=False,
    )

    assert resp.status_code == 302

    # Logout
    logout(client)

    # Test login with new password
    resp = login(client, "*****@*****.**", new_password)
    rv = client.get("/home")
    print(resp.data)
    # assert b"Logged as UserB" in resp.data
    logout(client)

    # Test login with old password
    resp = login(client, "*****@*****.**", init_password)
    assert b"Invalid password" in resp.data
Esempio n. 21
0
def test_user_profile_navigate(driver, django_db_blocker):
    """Test that going from another person's profile to mine works, see #309."""
    with django_db_blocker.unblock():
        other_username = random_alphanumeric()
        u = DjangoUser.objects.create_user(username=other_username)
        print(other_username)

    login(driver)

    with django_db_blocker.unblock():
        UserInformation.objects.filter(user__username=test_username)\
            .update(first_name='Selenium')
        UserInformation.objects.filter(user__username=other_username)\
            .update(first_name='Other user')

    driver.get(web_url + '/user/' + other_username)

    def current_profile_first_name():
        WebDriverWait(driver, TIME_WAIT).until(
            EC.presence_of_element_located((By.ID, "id_user_page_loaded")))

        WebDriverWait(driver, TIME_WAIT).until(
            EC.presence_of_element_located(
                (By.ID, "id_first_last_name_certified_user")))

        result = driver.find_element_by_id(
            'id_first_last_name_certified_user').text
        print('firstname', result)
        return result

    assert current_profile_first_name().startswith('Other user')

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, "personal_info_menu")))

    driver.find_element_by_id('personal_info_menu').click()

    assert current_profile_first_name().startswith('Selenium')

    with django_db_blocker.unblock():
        u.delete()

    logout(driver)
Esempio n. 22
0
def test_data_download(driver, django_db_blocker):
    login(driver)

    driver.find_element_by_id('personal_info_menu').click()
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, "id_my_data_download")))

    link = driver.find_element_by_id('id_my_data_download').get_attribute(
        'href')

    cookies_dict = get_cookies(driver)
    headers = {'X-CSRFToken': cookies_dict.get('csrftoken')}

    data = get(link, cookies=cookies_dict, headers=headers)
    assert data.ok
    assert data.content
    assert data.headers['content-type'] == 'application/zip'

    logout(driver)
Esempio n. 23
0
def test_home_page_link_enough(driver, django_db_blocker):
    with django_db_blocker.unblock():
        VideoRateLater.objects.filter(user__user__username=test_username).delete()
        video_ids = [create_test_video() for _ in range(minNumRateLater)]
        videos = [Video.objects.get(video_id=vid) for vid in video_ids]
        dj_u = DjangoUser.objects.get(username=test_username)
        up, _ = UserPreferences.objects.get_or_create(user=dj_u)
        [VideoRateLater.objects.create(video=v, user=up) for v in videos]

    login(driver)

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_home_toexpert')))

    driver.find_element_by_id('id_home_toexpert').click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_no_pending_expert')))

    logout(driver)
Esempio n. 24
0
def test_webfinger(client, session):
    register(client, "*****@*****.**", "fluttershy",
             "TestWebfinger")
    logout(client)

    rv = client.get(
        f"/.well-known/webfinger?resource=acct:TestWebfinger@{current_app.config['AP_DOMAIN']}"
    )
    assert rv.status_code == 200

    assert rv.headers["Content-Type"] == "application/jrd+json; charset=utf-8"

    datas = rv.json

    assert "aliases" in datas
    assert f"https://{current_app.config['AP_DOMAIN']}/user/TestWebfinger" in datas[
        "aliases"]
    assert "links" in datas
    assert "subject" in datas
    assert datas[
        "subject"] == f"acct:TestWebfinger@" f"{current_app.config['AP_DOMAIN']}"
Esempio n. 25
0
def test_only_default_enabled(driver, django_db_blocker):
    with django_db_blocker.unblock():
        UserPreferences.objects.filter(user__username=test_username).delete()

    login(driver)

    with django_db_blocker.unblock():
        up = UserPreferences.objects.get(user__username=test_username)

    print("Going to the expert interface...")
    expert_interface_btn = driver.find_element_by_id('expert_interface')
    expert_interface_btn.click()

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_expert_rating_page')))

    for f in VIDEO_FIELDS:
        assert featureIsEnabledByDeFault[f] == getattr(up, f + "_enabled")

    check_feature_visibility(up, driver)
    logout(driver)
Esempio n. 26
0
def test_submit_to_add_later_url(driver, django_db_blocker):
    """Add video to rate later list via a URL."""
    login(driver)

    video_id = random_alphanumeric()

    driver.get(web_url + '/rate_later_add/' + video_id)

    # checking that submission succeeded
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_rate_later_submit_ok')))

    # checking that list is present
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'class_rate_later_list')))

    # checking that the video is in the list
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, f'id_{video_id}_remove_rate_later')))

    # doing the same thing, but now will get a warning
    driver.refresh()

    # checking that submission succeeded
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_rate_later_submit_already_exists')))

    # checking that list is present
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'class_rate_later_list')))

    # checking that the video is in the list
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, f'id_{video_id}_remove_rate_later')))

    with django_db_blocker.unblock():
        Video.objects.filter(video_id=video_id).delete()

    logout(driver)
Esempio n. 27
0
def test_login_logout(client, session):
    """Make sure login and logout works."""

    register(client, "*****@*****.**", "fluttershy", "UserA")

    rv = login(client, "*****@*****.**", "fluttershy")
    assert rv.status_code == 200
    assert b"Logged as UserA" in rv.data

    rv = logout(client)
    assert rv.status_code == 200
    assert b"UserA" not in rv.data

    rv = login(client, "*****@*****.**" + "x", "fluttershy")
    assert rv.status_code == 200
    assert b"Specified user does not exist" in rv.data

    rv = login(client, "*****@*****.**", "fluttershy" + "x")
    assert rv.status_code == 200
    assert b"Invalid password" in rv.data
Esempio n. 28
0
def test_signup_verify_email(driver, django_db_blocker):
    # removing old emails
    shutil.rmtree(EMAIL_FILE_PATH)
    os.makedirs(EMAIL_FILE_PATH, exist_ok=True)

    with django_db_blocker.unblock():
        pending_domain = f"@{random_alphanumeric()}.com"
        accepted_domain = f"@{random_alphanumeric()}.com"
        rejected_domain = f"@{random_alphanumeric()}.com"
        # EmailDomain.objects.create(domain=pending_domain,
        #                            status=EmailDomain.STATUS_PENDING)
        EmailDomain.objects.create(domain=accepted_domain,
                                   status=EmailDomain.STATUS_ACCEPTED)
        EmailDomain.objects.create(domain=rejected_domain,
                                   status=EmailDomain.STATUS_REJECTED)

    signup(driver,
           django_db_blocker,
           username=random_alphanumeric(),
           password=secrets.token_urlsafe(32),
           email=f"test_first{pending_domain}")

    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, "signup_button")))

    two_last = [get_last_email(offset) for offset in [-1, -2]]
    two_last_from = [x.get('From', "") for x in two_last]
    assert any([x == EMAIL_NEWDOMAIN_ADDRESS
                for x in two_last_from]), two_last_from

    domains = {
        'pending': f"{random_alphanumeric()}{pending_domain}",
        'rejected': f"{random_alphanumeric()}{rejected_domain}",
        'accepted': f"{random_alphanumeric()}{accepted_domain}",
    }

    for email_type, email_address in domains.items():
        driver.get(web_url)

        WebDriverWait(driver, TIME_WAIT).until(
            EC.presence_of_element_located((By.ID, "signup_button")))

        # sign up
        driver.find_element_by_id('signup_button').click()

        password = secrets.token_urlsafe(32)
        user_data = {
            'root_username': str(uuid1()),
            'root_email': email_address,
            'root_password': password,
            'root_password2': password
        }

        for key, val in user_data.items():
            elem = driver.find_element_by_id(key)
            elem.clear()
            elem.send_keys(val)

        # accepting the privacy policy
        pp_ckbox = driver.find_element_by_id('root_shrivacy_policy')
        if not pp_ckbox.get_property('checked'):
            pp_ckbox.click()

        buttons = driver.find_elements_by_tag_name('button')
        buttons = [x for x in buttons if x.get_attribute('type') == 'submit']
        assert len(buttons) == 1
        buttons[0].click()

        WebDriverWait(driver, TIME_WAIT).until(
            EC.presence_of_element_located(
                (By.ID, "button_home_page_to_verify_id")))

        # going to the home page
        driver.find_element_by_id('button_home_page_to_verify_id').click()

        email_parsed = get_last_email()

        email_payload = None
        for payload in email_parsed.walk():
            if payload.get_content_type() == 'text/html':
                email_payload = payload.get_payload()
        assert email_payload

        html_parsed = html.parse(StringIO(email_payload))

        assert html_parsed.xpath("//p[@id = 'confirmation_text_id']")

        for email_other_type in domains.keys():
            items = html_parsed.xpath(
                f"//*[@id = 'email_{email_other_type}_id']")
            if email_other_type == email_type:
                assert items
            else:
                assert not items, (email_type, email_other_type, email_payload,
                                   email_address)

        # confirming e-mail address
        confirm_link = html_parsed.xpath(
            "//a[@id = 'confirmation_link_id']")[0].get('href')
        confirm_link = confirm_link.replace(EMAIL_PAGE_DOMAIN,
                                            'http://127.0.0.1:8000/')
        print("Navigating to", confirm_link)
        driver.get(confirm_link)

        WebDriverWait(driver, TIME_WAIT).until(
            EC.presence_of_element_located(
                (By.ID, "button_home_page_verified_id")))

        # going to the home page
        driver.find_element_by_id('button_home_page_verified_id').click()

        open_tournesol(driver)

        WebDriverWait(driver, TIME_WAIT).until(
            EC.presence_of_element_located((By.ID, "login_button")))

        login(driver,
              test_username=user_data['root_username'],
              test_password=user_data['root_password'])

        logout(driver)

        with django_db_blocker.unblock():
            DjangoUser.objects.filter(
                username=user_data['root_username']).delete()
Esempio n. 29
0
def test_rate_confidence(driver, django_db_blocker):
    """Test skips mode."""

    login(driver)

    with django_db_blocker.unblock():
        # creating two videos
        video_1_id = create_test_video()
        video_2_id = create_test_video()

        # setting user preferences
        up = UserPreferences.objects.get(user__username=test_username)

        # enabling two features
        for f in VIDEO_FIELDS[:4]:
            setattr(up, f"{f}_enabled", True)
        for f in VIDEO_FIELDS[4:]:
            setattr(up, f"{f}_enabled", False)

        f0, f1 = VIDEO_FIELDS[:2]

        # setting mode to enable_all
        up.rating_mode = "confidence"

        up.save()

    driver.get(web_url + f'/rate/{video_1_id}/{video_2_id}')

    # waiting for the page to load
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_no_pending_expert')))

    check_feature_visibility(up, driver)

    # setting stars
    stars_set_value(driver, VIDEO_FIELDS[0] + "_confidence", 0)
    stars_set_value(driver, VIDEO_FIELDS[1] + "_confidence", 1)
    stars_set_value(driver, VIDEO_FIELDS[2] + "_confidence", 2)
    stars_set_value(driver, VIDEO_FIELDS[3] + "_confidence", 3)

    print("Submitting the rating...")
    expert_submit_btn = driver.find_element_by_id('expert_submit_btn')
    expert_submit_btn.click()

    with django_db_blocker.unblock():
        obj = get_object_with_timeout(ExpertRating,
                                      video_1__video_id=video_1_id,
                                      video_2__video_id=video_2_id,
                                      user__user__username=test_username)

        # checking weight
        assert getattr(obj, f"{VIDEO_FIELDS[0]}_weight") == 0.0
        assert getattr(obj, f"{VIDEO_FIELDS[1]}_weight") == 0.5
        assert getattr(obj, f"{VIDEO_FIELDS[2]}_weight") == 1.0
        assert getattr(obj, f"{VIDEO_FIELDS[3]}_weight") == 1.5
        for f in VIDEO_FIELDS[4:]:
            assert getattr(obj, f"{f}_weight") == 0.0

        # now, setting second value to None
        setattr(obj, VIDEO_FIELDS[1], None)
        obj.save()

    # editing the rating with default None values and wrong weights
    driver.refresh()

    # waiting for the page to load
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_no_pending_expert')))

    print("Submitting the rating...")
    expert_submit_btn = driver.find_element_by_id('expert_submit_btn')
    expert_submit_btn.click()

    with django_db_blocker.unblock():
        obj = get_object_with_timeout(
            ExpertRating,
            video_1__video_id=video_1_id,
            video_2__video_id=video_2_id,
            user__user__username=test_username,
            **{VIDEO_FIELDS[0] + "_weight__lte": 0.5})

        # checking that weights are 1 for the first feature and 0 for the rest
        assert getattr(obj, f"{VIDEO_FIELDS[0]}_weight") == 0.0
        assert getattr(obj, f"{VIDEO_FIELDS[1]}_weight") == 0.0
        assert getattr(obj, f"{VIDEO_FIELDS[2]}_weight") == 1.0
        assert getattr(obj, f"{VIDEO_FIELDS[3]}_weight") == 1.5
        for f in VIDEO_FIELDS[4:]:
            assert getattr(obj, f"{f}_weight") == 0.0

        assert getattr(obj, VIDEO_FIELDS[0]) is not None

    with django_db_blocker.unblock():
        Video.objects.filter(video_id__in=[video_1_id, video_2_id]).delete()

    logout(driver)
Esempio n. 30
0
def test_rate_skips(driver, django_db_blocker):
    """Test skips mode."""

    login(driver)

    with django_db_blocker.unblock():
        # creating two videos
        video_1_id = create_test_video()
        video_2_id = create_test_video()

        # setting user preferences
        up = UserPreferences.objects.get(user__username=test_username)

        # enabling two features
        for f in VIDEO_FIELDS[:2]:
            setattr(up, f"{f}_enabled", True)
        for f in VIDEO_FIELDS[2:]:
            setattr(up, f"{f}_enabled", False)

        f0, f1 = VIDEO_FIELDS[:2]

        # setting mode to enable_all
        up.rating_mode = "skip"

        up.save()

    driver.get(web_url + f'/rate/{video_1_id}/{video_2_id}')

    # waiting for the page to load
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_no_pending_expert')))

    check_feature_visibility(up, driver)

    # checkboxes should be unchecked
    elem0 = driver.find_element_by_id("id_checkbox_skip_" + f0)
    elem1 = driver.find_element_by_id("id_checkbox_skip_" + f1)
    assert elem0.get_property('checked') is False
    assert elem1.get_property('checked') is False

    elem1.click()

    print("Submitting the rating...")
    expert_submit_btn = driver.find_element_by_id('expert_submit_btn')
    expert_submit_btn.click()

    with django_db_blocker.unblock():
        obj = get_object_with_timeout(ExpertRating,
                                      video_1__video_id=video_1_id,
                                      video_2__video_id=video_2_id,
                                      user__user__username=test_username)

        # checking that weights are 1 for the first feature and 0 for the rest
        for i, f in enumerate(VIDEO_FIELDS):
            val = 1.0 if (i == 0) else 0.0
            assert getattr(obj, f"{f}_weight") == val

        # now, setting first value to None

        setattr(obj, VIDEO_FIELDS[0], None)
        obj.save()

    # editing the rating with default None values and wrong weights
    driver.refresh()

    # waiting for the page to load
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_no_pending_expert')))

    elem0 = driver.find_element_by_id("id_checkbox_skip_" + f0)
    elem1 = driver.find_element_by_id("id_checkbox_skip_" + f1)
    assert elem0.get_property('checked') is True
    assert elem1.get_property('checked') is True

    print("Submitting the rating...")
    expert_submit_btn = driver.find_element_by_id('expert_submit_btn')
    expert_submit_btn.click()

    with django_db_blocker.unblock():
        obj = get_object_with_timeout(
            ExpertRating,
            video_1__video_id=video_1_id,
            video_2__video_id=video_2_id,
            user__user__username=test_username,
            **{VIDEO_FIELDS[0] + "_weight__lte": 0.5})

        # checking that weights are 1 for the first feature and 0 for the rest
        for i, f in enumerate(VIDEO_FIELDS):
            assert getattr(obj, f"{f}_weight") == 0.0

        assert getattr(obj, VIDEO_FIELDS[0]) is not None

    with django_db_blocker.unblock():
        Video.objects.filter(video_id__in=[video_1_id, video_2_id]).delete()

    logout(driver)
Esempio n. 31
0
def test_rate_enable_all_weight_none(driver, django_db_blocker):
    """Test all features enabled mode."""

    login(driver)

    with django_db_blocker.unblock():
        # creating two videos
        video_1_id = create_test_video()
        video_2_id = create_test_video()

        # setting user preferences
        up = UserPreferences.objects.get(user__username=test_username)

        # disabling all features, except for the first one
        setattr(up, f"{VIDEO_FIELDS[0]}_enabled", True)
        for f in VIDEO_FIELDS[1:]:
            setattr(up, f"{f}_enabled", False)

        # setting mode to enable_all
        up.rating_mode = "enable_all"

        up.save()

    driver.get(web_url + f'/rate/{video_1_id}/{video_2_id}')

    # waiting for the page to load
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_no_pending_expert')))

    check_feature_visibility(up, driver)

    print("Submitting the rating...")
    expert_submit_btn = driver.find_element_by_id('expert_submit_btn')
    expert_submit_btn.click()

    with django_db_blocker.unblock():
        obj = get_object_with_timeout(ExpertRating,
                                      video_1__video_id=video_1_id,
                                      video_2__video_id=video_2_id,
                                      user__user__username=test_username)

        # checking that weights are 1 for the first feature and 0 for the rest
        for i, f in enumerate(VIDEO_FIELDS):
            val = 1.0 if (i == 0) else 0.0
            assert getattr(obj, f"{f}_weight") == val

        # now, setting first value to None
        # and first weight to None

        setattr(obj, VIDEO_FIELDS[0], None)
        setattr(obj, VIDEO_FIELDS[0] + "_weight", 0.0)
        obj.save()

    # editing the rating with default None values and wrong weights
    driver.refresh()

    print(video_1_id, video_2_id)

    # waiting for the page to load
    WebDriverWait(driver, TIME_WAIT).until(
        EC.presence_of_element_located((By.ID, 'id_no_pending_expert')))

    print("Submitting the rating...")
    expert_submit_btn = driver.find_element_by_id('expert_submit_btn')
    expert_submit_btn.click()

    with django_db_blocker.unblock():
        obj = get_object_with_timeout(ExpertRating,
                                      video_1__video_id=video_1_id,
                                      video_2__video_id=video_2_id,
                                      user__user__username=test_username,
                                      **{VIDEO_FIELDS[0] + "_weight__gt": 0.5})

        # checking that weights are 1 for the first feature and 0 for the rest
        for i, f in enumerate(VIDEO_FIELDS):
            val = 1.0 if (i == 0) else 0.0
            assert getattr(obj, f"{f}_weight") == val

        assert getattr(obj, VIDEO_FIELDS[0]) is not None

    with django_db_blocker.unblock():
        Video.objects.filter(video_id__in=[video_1_id, video_2_id]).delete()

    logout(driver)