class SignUpAndSignInTest(UniqueCourseTest): """ Test studio sign-up and sign-in """ shard = 21 def setUp(self): # pylint: disable=arguments-differ super(SignUpAndSignInTest, self).setUp() self.sign_up_page = SignupPage(self.browser) self.login_page = LoginPage(self.browser) self.course_outline_page = CourseOutlinePage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) self.course_outline_sign_in_redirect_page = CourseOutlineSignInRedirectPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) self.course_fixture = CourseFixture( self.course_info['org'], self.course_info['number'], self.course_info['run'], self.course_info['display_name'], ) self.user = None def install_course_fixture(self): """ Install a course fixture """ self.course_fixture.install() self.user = self.course_fixture.user def test_sign_up_from_home(self): """ Scenario: Sign up from the homepage Given I visit the Studio homepage When I click the link with the text "Sign Up" And I fill in the registration form And I press the Create My Account button on the registration form Then I should see an email verification prompt """ index_page = IndexPage(self.browser) index_page.visit() index_page.click_sign_up() unique_number = uuid.uuid4().hex[:4] registration_dic = { '#email': '{}[email protected]'.format(unique_number), '#name': '{}-name'.format(unique_number), '#username': '******'.format(unique_number), '#password': '******'.format(unique_number), } # Register the user. self.sign_up_page.sign_up_user(registration_dic) home = HomePage(self.browser) home.wait_for_page() def test_sign_up_with_bad_password(self): """ Scenario: Sign up from the homepage Given I visit the Studio homepage When I click the link with the text "Sign Up" And I fill in the registration form When I enter an insufficient password and focus out I should see an error message """ index_page = IndexPage(self.browser) index_page.visit() index_page.click_sign_up() password_input = self.sign_up_page.input_password('a') # Arbitrary short password that will fail password_input.send_keys(Keys.TAB) # Focus out of the element index_page.wait_for_element_visibility('#password_error', 'Password Error Message') self.assertIsNotNone(index_page.q(css='#password_error').text) # Make sure there is an error message def test_login_with_valid_redirect(self): """ Scenario: Login with a valid redirect Given I have opened a new course in Studio And I am not logged in And I visit the url "/course/slashes:MITx+999+Robot_Super_Course" And I should see that the path is "/signin?next=/course/slashes%3AMITx%2B999%2BRobot_Super_Course" When I fill in and submit the signin form Then I should see that the path is "/course/slashes:MITx+999+Robot_Super_Course" """ self.install_course_fixture() # Get the url, browser should land here after sign in. course_url = self.course_outline_sign_in_redirect_page.url self.course_outline_sign_in_redirect_page.visit() # Login self.course_outline_sign_in_redirect_page.login(self.user['email'], self.user['password']) self.course_outline_page.wait_for_page() # Verify that correct course is displayed after sign in. self.assertEqual(self.browser.current_url, course_url) def test_login_with_invalid_redirect(self): """ Scenario: Login with an invalid redirect Given I have opened a new course in Studio And I am not logged in And I visit the url "/signin?next=http://www.google.com/" When I fill in and submit the signin form Then I should see that the path is "/home/" """ self.install_course_fixture() # Visit course self.course_outline_sign_in_redirect_page.visit() # Change redirect url self.browser.get(self.browser.current_url.split('=')[0] + '=http://www.google.com') # Login self.course_outline_sign_in_redirect_page.login(self.user['email'], self.user['password']) home = HomePage(self.browser) home.wait_for_page() self.assertEqual(self.browser.current_url, home.url) def test_login_with_mistyped_credentials(self): """ Given I have opened a new course in Studio And I am not logged in And I visit the Studio homepage When I click the link with the text "Sign In" Then I should see that the path is "/signin" And I should not see a login error message And I fill in and submit the signin form incorrectly Then I should see a login error message And I edit the password field Then I should not see a login error message And I submit the signin form And I wait for "2" seconds Then I should see that the path is "/course/slashes:MITx+999+Robot_Super_Course" """ self.install_course_fixture() self.course_outline_sign_in_redirect_page.visit() # Verify login_error is not present self.course_outline_sign_in_redirect_page.wait_for_element_absence( '#login_error', 'Login error not be present' ) # Login with wrong credentials self.course_outline_sign_in_redirect_page.login( self.user['email'], 'wrong_password', expect_success=False ) # Verify that login error is shown self.course_outline_sign_in_redirect_page.wait_for_element_visibility( '#login_error', 'Login error is visible' ) # Change the password self.course_outline_sign_in_redirect_page.fill_field('input#password', 'changed_password') # Login error should not be visible self.course_outline_sign_in_redirect_page.wait_for_element_invisibility( '#login_error', 'Login error is not visible' ) # Login with correct credentials self.course_outline_sign_in_redirect_page.login(self.user['email'], self.user['password']) self.course_outline_page.wait_for_page() # Verify that correct course is displayed after sign in. self.assertEqual(self.browser.current_url, self.course_outline_page.url)
class SignUpAndSignInTest(UniqueCourseTest): """ Test studio sign-up and sign-in """ shard = 21 def setUp(self): super(SignUpAndSignInTest, self).setUp() self.sign_up_page = SignupPage(self.browser) self.login_page = LoginPage(self.browser) self.course_outline_page = CourseOutlinePage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) self.course_outline_sign_in_redirect_page = CourseOutlineSignInRedirectPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) self.course_fixture = CourseFixture( self.course_info['org'], self.course_info['number'], self.course_info['run'], self.course_info['display_name'], ) self.user = None def install_course_fixture(self): """ Install a course fixture """ self.course_fixture.install() self.user = self.course_fixture.user def test_sign_up_from_home(self): """ Scenario: Sign up from the homepage Given I visit the Studio homepage When I click the link with the text "Sign Up" And I fill in the registration form And I press the Create My Account button on the registration form Then I should see an email verification prompt """ index_page = IndexPage(self.browser) index_page.visit() index_page.click_sign_up() # Register the user. unique_number = uuid.uuid4().hex[:4] self.sign_up_page.sign_up_user( '{}[email protected]'.format(unique_number), '{}-name'.format(unique_number), '{}-username'.format(unique_number), '{}-password'.format(unique_number), ) home = HomePage(self.browser) home.wait_for_page() def test_sign_up_with_bad_password(self): """ Scenario: Sign up from the homepage Given I visit the Studio homepage When I click the link with the text "Sign Up" And I fill in the registration form When I enter an insufficient password and focus out I should see an error message """ index_page = IndexPage(self.browser) index_page.visit() index_page.click_sign_up() password_input = self.sign_up_page.input_password('a') # Arbitrary short password that will fail password_input.send_keys(Keys.TAB) # Focus out of the element index_page.wait_for_element_visibility('#register-password-validation-error', 'Password Error Message') self.assertIsNotNone(index_page.q(css='#register-password-validation-error-msg')) # Error message should exist def test_login_with_valid_redirect(self): """ Scenario: Login with a valid redirect Given I have opened a new course in Studio And I am not logged in And I visit the url "/course/slashes:MITx+999+Robot_Super_Course" And I should see that the path is "/signin?next=/course/slashes%3AMITx%2B999%2BRobot_Super_Course" When I fill in and submit the signin form Then I should see that the path is "/course/slashes:MITx+999+Robot_Super_Course" """ self.install_course_fixture() # Get the url, browser should land here after sign in. course_url = self.course_outline_sign_in_redirect_page.url self.course_outline_sign_in_redirect_page.visit() # Login self.course_outline_sign_in_redirect_page.login(self.user['email'], self.user['password']) self.course_outline_page.wait_for_page() # Verify that correct course is displayed after sign in. self.assertEqual(self.browser.current_url, course_url) def test_login_with_invalid_redirect(self): """ Scenario: Login with an invalid redirect Given I have opened a new course in Studio And I am not logged in And I visit the url "/signin?next=http://www.google.com/" When I fill in and submit the signin form Then I should see that the path is "/home/" """ self.install_course_fixture() # Visit course self.course_outline_sign_in_redirect_page.visit() # Change redirect url self.browser.get(self.browser.current_url.split('=')[0] + '=http://www.google.com') # Login self.course_outline_sign_in_redirect_page.login(self.user['email'], self.user['password']) # Verify that we land in LMS instead of the invalid redirect url self.assertEqual(self.browser.current_url, LMS_URL + "/dashboard") def test_login_with_mistyped_credentials(self): """ Given I have opened a new course in Studio And I am not logged in And I visit the Studio homepage When I click the link with the text "Sign In" Then I should see that the path is "/signin" And I should not see a login error message And I fill in and submit the signin form incorrectly Then I should see a login error message And I edit the password field Then I should not see a login error message And I submit the signin form And I wait for "2" seconds Then I should see that the path is "/course/slashes:MITx+999+Robot_Super_Course" """ self.install_course_fixture() self.course_outline_sign_in_redirect_page.visit() # Verify login_error is not present self.course_outline_sign_in_redirect_page.wait_for_element_absence( '#login_error', 'Login error not be present' ) # Login with wrong credentials self.course_outline_sign_in_redirect_page.login( self.user['email'], 'wrong_password', expect_success=False ) # Verify that login error is shown self.course_outline_sign_in_redirect_page.wait_for_element_visibility( ".js-form-errors.status.submission-error", 'Login error is visible' ) # Login with correct credentials self.course_outline_sign_in_redirect_page.login(self.user['email'], self.user['password']) self.course_outline_page.wait_for_page() # Verify that correct course is displayed after sign in. self.assertEqual(self.browser.current_url, self.course_outline_page.url)
class SignUpAndSignInTest(UniqueCourseTest): """ Test studio sign-up and sign-in """ shard = 21 def setUp(self): super(SignUpAndSignInTest, self).setUp() self.sign_up_page = SignupPage(self.browser) self.login_page = LoginPage(self.browser) self.course_outline_page = CourseOutlinePage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) self.course_outline_sign_in_redirect_page = CourseOutlineSignInRedirectPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) self.course_fixture = CourseFixture( self.course_info['org'], self.course_info['number'], self.course_info['run'], self.course_info['display_name'], ) self.user = None def install_course_fixture(self): """ Install a course fixture """ self.course_fixture.install() self.user = self.course_fixture.user def test_sign_up_from_home(self): """ Scenario: Sign up from the homepage Given I visit the Studio homepage When I click the link with the text "Sign Up" And I fill in the registration form And I press the Create My Account button on the registration form Then I should see an email verification prompt """ index_page = IndexPage(self.browser) index_page.visit() index_page.click_sign_up() # Register the user. unique_number = uuid.uuid4().hex[:4] self.sign_up_page.sign_up_user( '{}[email protected]'.format(unique_number), '{}-name'.format(unique_number), '{}-username'.format(unique_number), '{}-password'.format(unique_number), ) home = HomePage(self.browser) home.wait_for_page() def test_sign_up_with_bad_password(self): """ Scenario: Sign up from the homepage Given I visit the Studio homepage When I click the link with the text "Sign Up" And I fill in the registration form When I enter an insufficient password and focus out I should see an error message """ index_page = IndexPage(self.browser) index_page.visit() index_page.click_sign_up() password_input = self.sign_up_page.input_password( 'a') # Arbitrary short password that will fail password_input.send_keys(Keys.TAB) # Focus out of the element index_page.wait_for_element_visibility( '#register-password-validation-error', 'Password Error Message') self.assertIsNotNone( index_page.q(css='#register-password-validation-error-msg') ) # Error message should exist def test_login_with_valid_redirect(self): """ Scenario: Login with a valid redirect Given I have opened a new course in Studio And I am not logged in And I visit the url "/course/slashes:MITx+999+Robot_Super_Course" And I should see the path is "/signin_redirect_to_lms?next=/course/slashes%3AMITx%2B999%2BRobot_Super_Course" When I fill in and submit the LMS login form Then I should see that the path is "/course/slashes:MITx+999+Robot_Super_Course" """ self.install_course_fixture() # Get the url, browser should land here after sign in. course_url = self.course_outline_sign_in_redirect_page.url self.course_outline_sign_in_redirect_page.visit() # Login self.course_outline_sign_in_redirect_page.login( self.user['email'], self.user['password']) self.course_outline_page.wait_for_page() # Verify that correct course is displayed after sign in. self.assertEqual(self.browser.current_url, course_url)
class SignUpAndSignInTest(UniqueCourseTest): """ Test studio sign-up and sign-in """ def setUp(self): # pylint: disable=arguments-differ super(SignUpAndSignInTest, self).setUp() self.sign_up_page = SignupPage(self.browser) self.login_page = LoginPage(self.browser) self.course_outline_page = CourseOutlinePage( self.browser, self.course_info["org"], self.course_info["number"], self.course_info["run"] ) self.course_outline_sign_in_redirect_page = CourseOutlineSignInRedirectPage( self.browser, self.course_info["org"], self.course_info["number"], self.course_info["run"] ) self.course_fixture = CourseFixture( self.course_info["org"], self.course_info["number"], self.course_info["run"], self.course_info["display_name"], ) self.user = None def install_course_fixture(self): """ Install a course fixture """ self.course_fixture.install() self.user = self.course_fixture.user def test_sign_up_from_home(self): """ Scenario: Sign up from the homepage Given I visit the Studio homepage When I click the link with the text "Sign Up" And I fill in the registration form And I press the Create My Account button on the registration form Then I should see an email verification prompt """ index_page = IndexPage(self.browser) index_page.visit() index_page.click_sign_up() unique_number = uuid.uuid4().hex[:4] registration_dic = { "#email": "{}[email protected]".format(unique_number), "#name": "{}-name".format(unique_number), "#username": "******".format(unique_number), "#password": "******".format(unique_number), } # Register the user. self.sign_up_page.sign_up_user(registration_dic) home = HomePage(self.browser) home.wait_for_page() def test_login_with_valid_redirect(self): """ Scenario: Login with a valid redirect Given I have opened a new course in Studio And I am not logged in And I visit the url "/course/slashes:MITx+999+Robot_Super_Course" And I should see that the path is "/signin?next=/course/slashes%3AMITx%2B999%2BRobot_Super_Course" When I fill in and submit the signin form Then I should see that the path is "/course/slashes:MITx+999+Robot_Super_Course" """ self.install_course_fixture() # Get the url, browser should land here after sign in. course_url = self.course_outline_sign_in_redirect_page.url self.course_outline_sign_in_redirect_page.visit() # Login self.course_outline_sign_in_redirect_page.login(self.user["email"], self.user["password"]) self.course_outline_page.wait_for_page() # Verify that correct course is displayed after sign in. self.assertEqual(self.browser.current_url, course_url) def test_login_with_invalid_redirect(self): """ Scenario: Login with an invalid redirect Given I have opened a new course in Studio And I am not logged in And I visit the url "/signin?next=http://www.google.com/" When I fill in and submit the signin form Then I should see that the path is "/home/" """ self.install_course_fixture() # Visit course self.course_outline_sign_in_redirect_page.visit() # Change redirect url self.browser.get(self.browser.current_url.split("=")[0] + "=http://www.google.com") # Login self.course_outline_sign_in_redirect_page.login(self.user["email"], self.user["password"]) home = HomePage(self.browser) home.wait_for_page() self.assertEqual(self.browser.current_url, home.url) def test_login_with_mistyped_credentials(self): """ Given I have opened a new course in Studio And I am not logged in And I visit the Studio homepage When I click the link with the text "Sign In" Then I should see that the path is "/signin" And I should not see a login error message And I fill in and submit the signin form incorrectly Then I should see a login error message And I edit the password field Then I should not see a login error message And I submit the signin form And I wait for "2" seconds Then I should see that the path is "/course/slashes:MITx+999+Robot_Super_Course" """ self.install_course_fixture() self.course_outline_sign_in_redirect_page.visit() # Verify login_error is not present self.course_outline_sign_in_redirect_page.wait_for_element_absence("#login_error", "Login error not be present") # Login with wrong credentials self.course_outline_sign_in_redirect_page.login(self.user["email"], "wrong_password", expect_success=False) # Verify that login error is shown self.course_outline_sign_in_redirect_page.wait_for_element_visibility("#login_error", "Login error is visible") # Change the password self.course_outline_sign_in_redirect_page.fill_field("input#password", "changed_password") # Login error should not be visible self.course_outline_sign_in_redirect_page.wait_for_element_invisibility( "#login_error", "Login error is not visible" ) # Login with correct credentials self.course_outline_sign_in_redirect_page.login(self.user["email"], self.user["password"]) self.course_outline_page.wait_for_page() # Verify that correct course is displayed after sign in. self.assertEqual(self.browser.current_url, self.course_outline_page.url)
class SignUpAndSignInTest(UniqueCourseTest): """ Test studio sign-up and sign-in """ def setUp(self): # pylint: disable=arguments-differ super(SignUpAndSignInTest, self).setUp() self.sign_up_page = SignupPage(self.browser) self.login_page = LoginPage(self.browser) self.course_outline_page = CourseOutlinePage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) self.course_outline_sign_in_redirect_page = CourseOutlineSignInRedirectPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) self.course_fixture = CourseFixture( self.course_info['org'], self.course_info['number'], self.course_info['run'], self.course_info['display_name'], ) self.user = None def install_course_fixture(self): """ Install a course fixture """ self.course_fixture.install() self.user = self.course_fixture.user def test_sign_up_from_home(self): """ Scenario: Sign up from the homepage Given I visit the Studio homepage When I click the link with the text "Sign Up" And I fill in the registration form And I press the Create My Account button on the registration form Then I should see an email verification prompt """ index_page = IndexPage(self.browser) index_page.visit() index_page.click_sign_up() unique_number = uuid.uuid4().hex[:4] registration_dic = { '#email': '{}[email protected]'.format(unique_number), '#name': '{}-name'.format(unique_number), '#username': '******'.format(unique_number), '#password': '******'.format(unique_number), } # Register the user. self.sign_up_page.sign_up_user(registration_dic) home = HomePage(self.browser) home.wait_for_page() def test_login_with_valid_redirect(self): """ Scenario: Login with a valid redirect Given I have opened a new course in Studio And I am not logged in And I visit the url "/course/slashes:MITx+999+Robot_Super_Course" And I should see that the path is "/signin?next=/course/slashes%3AMITx%2B999%2BRobot_Super_Course" When I fill in and submit the signin form Then I should see that the path is "/course/slashes:MITx+999+Robot_Super_Course" """ self.install_course_fixture() # Get the url, browser should land here after sign in. course_url = self.course_outline_sign_in_redirect_page.url self.course_outline_sign_in_redirect_page.visit() # Login self.course_outline_sign_in_redirect_page.login( self.user['email'], self.user['password']) self.course_outline_page.wait_for_page() # Verify that correct course is displayed after sign in. self.assertEqual(self.browser.current_url, course_url) def test_login_with_invalid_redirect(self): """ Scenario: Login with an invalid redirect Given I have opened a new course in Studio And I am not logged in And I visit the url "/signin?next=http://www.google.com/" When I fill in and submit the signin form Then I should see that the path is "/home/" """ self.install_course_fixture() # Visit course self.course_outline_sign_in_redirect_page.visit() # Change redirect url self.browser.get( self.browser.current_url.split('=')[0] + '=http://www.google.com') # Login self.course_outline_sign_in_redirect_page.login( self.user['email'], self.user['password']) home = HomePage(self.browser) home.wait_for_page() self.assertEqual(self.browser.current_url, home.url) def test_login_with_mistyped_credentials(self): """ Given I have opened a new course in Studio And I am not logged in And I visit the Studio homepage When I click the link with the text "Sign In" Then I should see that the path is "/signin" And I should not see a login error message And I fill in and submit the signin form incorrectly Then I should see a login error message And I edit the password field Then I should not see a login error message And I submit the signin form And I wait for "2" seconds Then I should see that the path is "/course/slashes:MITx+999+Robot_Super_Course" """ self.install_course_fixture() self.course_outline_sign_in_redirect_page.visit() # Verify login_error is not present self.course_outline_sign_in_redirect_page.wait_for_element_absence( '#login_error', 'Login error not be present') # Login with wrong credentials self.course_outline_sign_in_redirect_page.login(self.user['email'], 'wrong_password', expect_success=False) # Verify that login error is shown self.course_outline_sign_in_redirect_page.wait_for_element_visibility( '#login_error', 'Login error is visible') # Change the password self.course_outline_sign_in_redirect_page.fill_field( 'input#password', 'changed_password') # Login error should not be visible self.course_outline_sign_in_redirect_page.wait_for_element_invisibility( '#login_error', 'Login error is not visible') # Login with correct credentials self.course_outline_sign_in_redirect_page.login( self.user['email'], self.user['password']) self.course_outline_page.wait_for_page() # Verify that correct course is displayed after sign in. self.assertEqual(self.browser.current_url, self.course_outline_page.url)