Ejemplo n.º 1
0
def test_user_ranking_course(driver):
    '''Creates a course and students to participate make submits to problems'''

    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'

    with driver.login_admin():
        create_course(driver, course_alias, school_name)
        add_students_course(driver, [driver.user_username])
        add_assignment(driver, assignment_alias)
        add_problem_to_assignment(driver, assignment_alias, problem)

    with driver.login_user():
        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)

        # When user has tried or solved a problem, feedback popup will be shown
        with util.dismiss_status(driver):
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.CSS_SELECTOR, '.popup button.close'))).click()
            driver.wait.until(
                EC.invisibility_of_element_located(
                    (By.CSS_SELECTOR, '.popup button.close')))

        driver.wait.until(
            EC.element_to_be_clickable(
                (By.XPATH, ('//a[contains(text(), "%s")]/parent::div' %
                            problem.title())))).click()
        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

    update_scoreboard_for_assignment(driver, assignment_alias, course_alias)

    with driver.login_admin():
        enter_course_assignments_page(driver, course_alias)
        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.XPATH,
                     '//a[contains(@href, "/assignment/%s/scoreboard/")]' %
                     assignment_alias))).click()

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

        run_user = driver.browser.find_element_by_xpath(
            '//td[contains(@class, "accepted")]/preceding-sibling::td[@class='
            '"user"]')
        assert run_user.text == driver.user_username, run_user

        url = '/course/%s/assignment/%s/scoreboard' % (course_alias,
                                                       assignment_alias)

        enter_course_assignments_page(driver, course_alias)
        util.check_scoreboard_events(driver,
                                     assignment_alias,
                                     url,
                                     num_elements=1,
                                     scoreboard='Public')

        enter_course_assignments_page(driver, course_alias)
        util.check_scoreboard_events(driver,
                                     assignment_alias,
                                     url,
                                     num_elements=1,
                                     scoreboard='Admin')

        enter_course_assignments_page(driver, course_alias)
        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.XPATH, '//a[contains(@href, "/course/%s/edit/")]' %
                     course_alias))).click()

        driver.wait.until(
            EC.element_to_be_clickable((
                By.XPATH,
                '//input[@name = "show-scoreboard"][@value="true"]'))).click()

        driver.browser.find_element_by_tag_name('form').submit()
        assert (('/course/%s/edit/' % course_alias)
                in driver.browser.current_url), driver.browser.current_url

    with driver.login_user():
        enter_course(driver, course_alias, assignment_alias, first_time=False)

        driver.wait.until(
            EC.element_to_be_clickable(
                (By.XPATH, ('//a[contains(@href, "#ranking")]')))).click()
        assert (('#ranking')
                in driver.browser.current_url), driver.browser.current_url
Ejemplo n.º 2
0
def test_user_ranking_course(driver):
    '''Creates a course and students to participate make submits to problems'''

    run_id = driver.generate_id()
    course_alias = f'ut_rank_course_{run_id}'
    school_name = f'ut_rank_school_{run_id}'
    assignment_alias = f'ut_rank_hw_{run_id}'
    problem = 'ut_rc_problem_%s' % driver.generate_id()

    _setup_course(driver, course_alias, school_name, assignment_alias, problem)

    with driver.login_user():
        enter_course(driver, course_alias, assignment_alias)
        _click_on_problem(driver, problem)

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

        # Refresh the current page.
        with driver.page_transition():
            driver.browser.get(driver.browser.current_url.split('#')[0])

        _click_on_problem(driver, problem)

        # When user has tried or solved a problem, feedback popup will be shown
        with util.dismiss_status(driver):
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.CSS_SELECTOR, '.popup button.close'))).click()
            driver.wait.until(
                EC.invisibility_of_element_located(
                    (By.CSS_SELECTOR, '.popup button.close')))

        _click_on_problem(driver, problem)
        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

    update_scoreboard_for_assignment(driver, assignment_alias, course_alias)

    with driver.login_admin():
        enter_course_assignments_page(driver, course_alias)
        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.XPATH,
                     '//a[contains(@href, "/assignment/%s/scoreboard/")]' %
                     assignment_alias))).click()

        toggle_contestants_element = driver.wait.until(
            EC.element_to_be_clickable(
                (By.CSS_SELECTOR, 'input.toggle-contestants')))
        for _ in range(10):
            toggle_contestants_element.click()
            if not toggle_contestants_element.is_selected():
                break
        else:
            logging.error('Failed to toggle contestants')

        run_user = driver.browser.find_element_by_xpath(
            '//td[contains(@class, "accepted")]/preceding-sibling::td[@class='
            '"user"]')
        assert run_user.text == driver.user_username, run_user

        url = '/course/{}/assignment/{}/scoreboard'.format(
            course_alias, assignment_alias)

        enter_course_assignments_page(driver, course_alias)
        util.check_scoreboard_events(driver,
                                     assignment_alias,
                                     url,
                                     num_elements=1,
                                     scoreboard='Scoreboard')

        enter_course_assignments_page(driver, course_alias)
        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.XPATH, '//a[contains(@href, "/course/%s/edit/")]' %
                     course_alias))).click()

        driver.wait.until(
            EC.element_to_be_clickable((
                By.XPATH,
                '//input[@name = "show-scoreboard"][@value="true"]'))).click()

        driver.browser.find_element_by_css_selector(
            'form[data-course-form]').submit()
        assert (('/course/%s/edit/' % course_alias)
                in driver.browser.current_url), driver.browser.current_url

    with driver.login_user():
        enter_course(driver, course_alias, assignment_alias, first_time=False)

        for _ in range(10):
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.XPATH, ('//a[contains(@href, "#ranking")]')))).click()
            if driver.browser.current_url.endswith('#ranking'):
                break
        assert (('#ranking')
                in driver.browser.current_url), driver.browser.current_url
Ejemplo n.º 3
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)
Ejemplo n.º 4
0
def test_user_ranking_course(driver):
    '''Creates a course and students to participate make submits to problems'''

    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'

    with driver.login_admin():
        create_course(driver, course_alias, school_name)
        add_students_course(driver, [driver.user_username])
        add_assignment(driver, assignment_alias)
        add_problem_to_assignment(driver, assignment_alias, problem)

    with driver.login_user():
        enter_course(driver, course_alias, assignment_alias)

        driver.wait.until(
            EC.element_to_be_clickable(
                (By.XPATH,
                 ('//a[contains(@href, "#problems/%s")]' % problem)))).click()

        util.create_run(driver, problem, 'Main.cpp11')
        driver.update_score_in_course(problem, assignment_alias)

        driver.wait.until(
            EC.element_to_be_clickable(
                (By.CSS_SELECTOR, 'button.details'))).click()

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

    update_scoreboard_for_assignment(driver, assignment_alias, course_alias)

    with driver.login_admin():
        enter_course_assignments_page(driver, course_alias)
        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.XPATH,
                     '//a[contains(@href, "/assignment/%s/scoreboard/")]' %
                     assignment_alias))).click()

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

        run_user = driver.browser.find_element_by_xpath(
            '//td[contains(@class, "accepted")]/preceding-sibling::td[@class='
            '"user"]')
        assert run_user.text == driver.user_username, run_user

        url = '/course/%s/assignment/%s/scoreboard' % (course_alias,
                                                       assignment_alias)

        enter_course_assignments_page(driver, course_alias)
        util.check_scoreboard_events(driver,
                                     assignment_alias,
                                     url,
                                     num_elements=1,
                                     scoreboard='Public')

        enter_course_assignments_page(driver, course_alias)
        util.check_scoreboard_events(driver,
                                     assignment_alias,
                                     url,
                                     num_elements=1,
                                     scoreboard='Admin')
Ejemplo n.º 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 = '******'

    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.cpp11',
                        verdict='AC',
                        score=1)

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

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

    update_scoreboard_for_contest(driver, contest_alias)

    with driver.login_admin():
        driver.wait.until(EC.element_to_be_clickable(
            (By.ID, 'nav-contests'))).click()
        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.XPATH, ('//li[@id = "nav-contests"]'
                                '//a[@href = "/contest/mine/"]')))).click()

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

        driver.wait.until(EC.element_to_be_clickable(
            (By.ID, 'nav-contests'))).click()
        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.XPATH, ('//li[@id = "nav-contests"]'
                                '//a[@href = "/contest/mine/"]')))).click()
        util.check_scoreboard_events(driver,
                                     contest_alias,
                                     url,
                                     num_elements=2,
                                     scoreboard='Admin')

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

        with driver.page_transition():
            driver.wait.until(
                EC.element_to_be_clickable(
                    (By.CSS_SELECTOR, '#current-contests 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')))

        run_accepted_user = driver.browser.find_element_by_xpath(
            '//td[contains(@class, "accepted")]/preceding-sibling::td[@class='
            '"user"]')
        assert run_accepted_user.text == user1, run_accepted_user

        run_wrong_user = driver.browser.find_element_by_xpath(
            '//td[contains(@class, "wrong")]/preceding-sibling::td[@class='
            '"user"]')
        assert run_wrong_user.text == user2, run_wrong_user

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

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

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