Beispiel #1
0
def test_create_group_with_identities(driver):
    '''Tests creation of a group with identities.'''

    group_title = 'unittest_group_%s' % driver.generate_id()
    description = 'some text for group description'

    with driver.login_admin():
        group_alias = util.create_group(driver, group_title, description)
        util.add_identities_group(driver, group_alias)
Beispiel #2
0
def test_create_contest(driver):
    '''Tests creating a contest and retrieving it.'''

    run_id = driver.generate_id()
    contest_alias = 'ut_contest_%s' % run_id
    problem = 'sumas'
    user = '******' % run_id
    password = '******'
    group_title = 'ut_group_%s' % driver.generate_id()
    description = 'group description'

    with driver.login_admin():
        group_alias = util.create_group(driver, group_title, description)
        identity, *_ = util.add_identities_group(driver, group_alias)

    driver.register_user(user, password)
    invited_users = [user, identity.username]
    create_contest_admin(driver, contest_alias, problem, invited_users,
                         driver.user_username, access_mode='Private')

    with driver.login(identity.username, identity.password):
        create_run_user(driver, contest_alias, problem, 'Main.cpp17-gcc',
                        verdict='AC', score=1)

    with driver.login(user, password):
        create_run_user(driver, contest_alias, problem, 'Main_wrong.cpp17-gcc',
                        verdict='WA', score=0)

    update_scoreboard_for_contest(driver, contest_alias)

    with driver.login_admin():
        driver.wait.until(
            EC.element_to_be_clickable(
                (By.XPATH, '//div[@id="root"]//li[contains(concat(" ", '
                 'normalize-space(@class), " "), " nav-contests ")]'))).click()

        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.XPATH,
                     ('//div[@id="root"]//li[contains(concat(" ", '
                      'normalize-space(@class), " "), " nav-contests "'
                      ')]//a[@href = "/contest/mine/"]')))).click()

        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.XPATH,
                     ('//a[contains(@href, "/arena/%s/scoreboard/")]' %
                      contest_alias)))).click()

        assert_run_verdict(driver, identity.username, problem,
                           classname="accepted")
        assert_run_verdict(driver, user, problem, classname="wrong")
Beispiel #3
0
def test_create_identities_for_course(driver):
    '''Adding some identities into a course and associating one of them to
    specific user
    '''

    run_id = driver.generate_id()
    course_alias = 'ut_rank_course_%s' % run_id
    school_name = 'ut_rank_school_%s' % run_id
    assignment_alias = 'ut_rank_hw_%s' % run_id
    problem = 'sumas'
    username = '******' % driver.generate_id()
    password = '******'
    driver.register_user(username, password)

    # Admin creates a course with one assignment and one problem, and then
    # creates some identities associated with the course group
    with driver.login_admin():
        create_course(driver, course_alias, school_name)
        add_assignment(driver, assignment_alias)
        add_problem_to_assignment(driver, assignment_alias, problem)
        # The function require the group alias. We are assuming that it is the
        # same as the course alias, since that is the default
        unassociated, associated = util.add_identities_group(
            driver, course_alias)[:2]

    # Unassociated identity joins the course which it was created for and
    # creates a new run
    with driver.login(unassociated.username, unassociated.password):
        enter_course(driver, course_alias, assignment_alias)

        driver.wait.until(
            EC.element_to_be_clickable(
                (By.XPATH, ('//a[contains(text(), "%s")]/parent::div' %
                            problem.title())))).click()

        util.create_run(driver, problem, 'Main.cpp17-gcc')
        driver.update_score_in_course(problem, assignment_alias)

        driver.wait.until(
            EC.element_to_be_clickable(
                (By.CSS_SELECTOR, 'button[data-run-details]'))).click()

        assert (('show-run:')
                in driver.browser.current_url), driver.browser.current_url

    # Registred user associates a new identity
    with driver.login(username, password):
        driver.wait.until(
            EC.element_to_be_clickable(
                (By.CSS_SELECTOR, 'a[data-nav-user]'))).click()
        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.CSS_SELECTOR, 'a[data-nav-profile]'))).click()

        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.XPATH, ('//a[@href = "/profile/edit/"]')))).click()

        driver.wait.until(
            EC.visibility_of_element_located(
                (By.XPATH,
                 '//input[contains(concat(" ", normalize-space(@class), " "), '
                 '" username-input ")]'))).send_keys(associated.username)
        driver.wait.until(
            EC.visibility_of_element_located(
                (By.XPATH,
                 '//input[contains(concat(" ", normalize-space(@class), " "), '
                 '" password-input ")]'))).send_keys(associated.password)

        driver.wait.until(
            EC.element_to_be_clickable(
                (By.XPATH,
                 '//form[contains(concat(" ", normalize-space(@class), " "), '
                 '" add-identity-form ")]/div/button'))).click()

        associated_identities = driver.browser.find_element_by_xpath(
            '//tr/td[text() = "%s"]' % (associated.username))
        assert associated_identities is not None, 'No identity matches'

    # The new associated identity joins the course
    with driver.login(associated.username, associated.password):
        enter_course(driver, course_alias, assignment_alias)
Beispiel #4
0
def test_create_group_with_identities_and_restrictions(driver):
    '''Tests creation of a group with identities.'''

    group_title = 'unittest_group_%s' % driver.generate_id()
    description = 'some text for group description'

    with driver.login_admin():
        navbar = driver.wait.until(
            EC.visibility_of_element_located(
                (By.CSS_SELECTOR, '.navbar-nav:first-child')))

        navbar.find_element_by_css_selector(
            'li.nav-problems a.dropdown-toggle').click()
        problems_dropdown = driver.wait.until(
            EC.visibility_of(
                navbar.find_element_by_css_selector(
                    'li.nav-problems .dropdown-menu')))
        # Problems menu
        for present_href in [
                '/problem/collection/', '/submissions/', '/problem/new/'
        ]:
            assert problems_dropdown.find_elements_by_css_selector(
                'a[href="%s"]' % present_href), ('%s item is not present!' %
                                                 present_href)

        # Contests menu
        assert navbar.find_elements_by_css_selector('li.nav-contests a')

        group_alias = util.create_group(driver, group_title, description)
        identity, *_ = util.add_identities_group(driver, group_alias)

    with driver.login(identity.username,
                      identity.password,
                      is_main_user_identity=False):
        navbar = driver.wait.until(
            EC.visibility_of_element_located(
                (By.CSS_SELECTOR, '.navbar-nav:first-child')))

        # Problems menu
        navbar.find_element_by_css_selector(
            'li.nav-problems a.dropdown-toggle').click()
        problems_dropdown = driver.wait.until(
            EC.visibility_of(
                navbar.find_element_by_css_selector(
                    'li.nav-problems .dropdown-menu')))
        for present_href in ['/problem/collection/', '/submissions/']:
            assert problems_dropdown.find_elements_by_css_selector(
                'a[href="%s"]' % present_href), ('%s item is not present!' %
                                                 present_href)
        for absent_href in ['/problem/new/']:
            assert not problems_dropdown.find_elements_by_css_selector(
                'a[href="%s"]' % absent_href), ('%s item is visible!' %
                                                absent_href)

        navbar.find_element_by_css_selector(
            'li.nav-contests a.dropdown-toggle').click()
        contests_dropdown = driver.wait.until(
            EC.visibility_of(
                navbar.find_element_by_css_selector(
                    'li.nav-contests .dropdown-menu')))
        for present_href in ['/arena/']:
            assert contests_dropdown.find_elements_by_css_selector(
                'a[href="%s"]' % present_href), ('%s item is not present!' %
                                                 present_href)
        for absent_href in ['/contest/new/', '/scoreboardmerge/']:
            assert not contests_dropdown.find_elements_by_css_selector(
                'a[href="%s"]' % absent_href), ('%s item is visible!' %
                                                absent_href)

        # Courses list
        driver.wait.until(
            EC.element_to_be_clickable(
                (By.CSS_SELECTOR, 'a[data-nav-courses]'))).click()
        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.CSS_SELECTOR, 'a[data-nav-courses-all]'))).click()
        assert not driver.browser.find_elements_by_css_selector(
            'a[href="/course/new/"]')

        inaccessible_paths = ['/problem/new/', '/contest/new/', '/course/new/']
        for inaccessible_path in inaccessible_paths:
            # Not using assert_js_errors() since this only produces JS errors
            # with chromedriver, not with saucelabs/Travis.
            with util.assert_no_js_errors(
                    driver, path_whitelist=(inaccessible_path, )):
                with driver.page_transition():
                    driver.browser.get(driver.url(inaccessible_path))
                    assert_page_not_found_is_shown(driver, inaccessible_path)
Beispiel #5
0
def test_user_ranking_contest(driver):
    '''Tests creating a contest and reviewing ranking.'''

    run_id = driver.generate_id()
    contest_alias = 'utrank_contest_%s' % run_id
    problem = 'sumas'
    user1 = 'ut_rank_user_1_%s' % run_id
    user2 = 'ut_rank_user_2_%s' % run_id
    user3 = 'ut_rank_user_3_%s' % run_id
    password = '******'
    group_title = 'ut_group_%s' % driver.generate_id()
    description = 'group description'

    with driver.login_admin():
        group_alias = util.create_group(driver, group_title, description)
        uninvited_identity, *_ = util.add_identities_group(driver, group_alias)

    driver.register_user(user1, password)
    driver.register_user(user2, password)
    driver.register_user(user3, password)

    create_contest_admin(driver, contest_alias, problem, [user1, user2],
                         driver.user_username)

    with driver.login(user1, password):
        create_run_user(driver,
                        contest_alias,
                        problem,
                        'Main.cpp17-gcc',
                        verdict='AC',
                        score=1)

    with driver.login(user2, password):
        create_run_user(driver,
                        contest_alias,
                        problem,
                        'Main_wrong.cpp17-gcc',
                        verdict='WA',
                        score=0)

    with driver.login(user3, password):
        create_run_user(driver,
                        contest_alias,
                        problem,
                        'Main.cpp17-gcc',
                        verdict='AC',
                        score=1)

    with driver.login(uninvited_identity.username,
                      uninvited_identity.password):
        create_run_user(driver,
                        contest_alias,
                        problem,
                        'Main.cpp17-gcc',
                        verdict='AC',
                        score=1)

    update_scoreboard_for_contest(driver, contest_alias)

    with driver.login_admin():
        driver.wait.until(
            EC.element_to_be_clickable(
                (By.CSS_SELECTOR, 'a[data-nav-user]'))).click()
        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.CSS_SELECTOR, 'a[data-nav-user-contests]'))).click()

        url = '/arena/%s/scoreboard' % (contest_alias)
        util.check_scoreboard_events(driver,
                                     contest_alias,
                                     url,
                                     num_elements=3,
                                     scoreboard='Public')

        driver.wait.until(
            EC.element_to_be_clickable(
                (By.CSS_SELECTOR, 'a[data-nav-user]'))).click()
        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.CSS_SELECTOR, 'a[data-nav-user-contests]'))).click()
        util.check_scoreboard_events(driver,
                                     contest_alias,
                                     url,
                                     num_elements=3,
                                     scoreboard='Admin')

        driver.wait.until(
            EC.element_to_be_clickable(
                (By.CSS_SELECTOR, 'a[data-nav-contests]'))).click()
        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.CSS_SELECTOR, 'a[data-nav-contests-arena]'))).click()

        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.XPATH,
                     '//div[contains(concat(" ", normalize-space(@class), " "'
                     '), " contest-list")]//a[contains(concat(" ", '
                     'normalize-space(@class), " "), " tab-current ")]'
                     ))).click()
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.CSS_SELECTOR, '.contest-list a[href="/arena/%s/"]' %
                     contest_alias))).click()

        driver.wait.until(
            EC.element_to_be_clickable(
                (By.XPATH, '//a[@href = "#ranking"]'))).click()
        driver.wait.until(
            EC.visibility_of_element_located((By.CSS_SELECTOR, '#ranking')))

        assert_run_verdict(driver, user1, problem, classname='accepted')
        assert_run_verdict(driver, user2, problem, classname='wrong')

        compare_contestants_list(driver, {user1, user2, driver.user_username})

        driver.wait.until(
            EC.element_to_be_clickable(
                (By.XPATH, '//input[@class = "toggle-contestants"]'))).click()

        users_full_set = {
            user1, user2, user3, driver.user_username,
            uninvited_identity.username
        }
        compare_contestants_list(driver, users_full_set)