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
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
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)
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')
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)