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