def test_edit_details_non_admin(self): email_1, password_1 = signup_teacher_directly() email_2, password_2 = signup_teacher_directly() name, postcode = create_organisation_directly(email_1) klass_1, class_name_1, access_code_1 = create_class_directly(email_1) create_school_student_directly(access_code_1) join_teacher_to_organisation(email_2, name, postcode) klass_2, class_name_2, access_code_2 = create_class_directly(email_2) create_school_student_directly(access_code_2) selenium.get(self.live_server_url) page = HomePage(selenium).go_to_login_page().login(email_2, password_2) page = page.change_teacher_details({ 'title': 'Mr', 'first_name': 'Florian', 'last_name': 'Aucomte', 'current_password': '******', }) assert self.is_dashboard_page(page) assert is_teacher_details_updated_message_showing(selenium) assert page.check_account_details({ 'title': 'Mr', 'first_name': 'Florian', 'last_name': 'Aucomte', })
def test_kick(self): email_1, password_1 = signup_teacher_directly() name, _ = create_organisation_directly(email_1) _, _, access_code = create_class_directly(email_1) create_school_student_directly(access_code) title, first_name, _, email_2, password_2 = generate_details() new_last_name = "New Teacher" self.selenium.get(self.live_server_url) page = (HomePage(self.selenium).go_to_signup_page().signup( title, first_name, new_last_name, email_2, password_2, password_2)) page = email_utils.follow_verify_email_link_to_onboarding( page, mail.outbox[0]) mail.outbox = [] page = page.login_no_school(email_2, password_2).join_organisation(name) assert page.__class__.__name__ == "OnboardingRevokeRequestPage" page = page.logout().go_to_login_page().login(email_1, password_1) page = page.accept_join_request() assert page.is_teacher_in_school(new_last_name) page = page.click_kick_button() assert page.is_dialog_showing() page = page.confirm_dialog() assert page.is_not_teacher_in_school(new_last_name)
def test_edit_clash(self): email_1, _ = signup_teacher_directly() email_2, password_2 = signup_teacher_directly() school_name_1, postcode_1 = create_organisation_directly(email_1) create_organisation_directly(email_2) _, _, access_code_1 = create_class_directly(email_1) _, _, access_code_2 = create_class_directly(email_2) create_school_student_directly(access_code_1) create_school_student_directly(access_code_2) self.selenium.get(self.live_server_url) page = HomePage(self.selenium).go_to_login_page().login( email_2, password_2) assert not page.check_organisation_details({ "name": school_name_1, "postcode": postcode_1 }) page = page.change_organisation_details({ "name": school_name_1, "postcode": postcode_1 }) assert page.has_edit_failed()
def test_change_email(self): email, password = signup_teacher_directly() create_organisation_directly(email) klass, name, access_code = create_class_directly(email) create_school_student_directly(access_code) selenium.get(self.live_server_url) page = HomePage(selenium).go_to_login_page().login(email, password) new_email = '*****@*****.**' page = page.change_email('Test', 'Teacher', new_email, password) assert page.__class__.__name__ == 'EmailVerificationNeededPage' assert is_teacher_email_updated_message_showing(selenium) page = email_utils.follow_change_email_link_to_dashboard( page, mail.outbox[0]) mail.outbox = [] page = page.login(new_email, password) assert page.check_account_details({ 'title': 'Mr', 'first_name': 'Test', 'last_name': 'Teacher', })
def test_accepted_independent_student_can_play_games(self): """ Given an independent student requests access to a class, When the teacher for that class accepts the request, Then the new student should have access to the teacher's games """ email, password = signup_teacher_directly() create_organisation_directly(email) klass, _, access_code = create_class_directly(email) klass.always_accept_requests = True klass.save() create_school_student_directly(access_code) indep_username, indep_password, indep_student = ( create_independent_student_directly() ) c = Client() c.login(username=indep_username, password=indep_password) c.post( reverse("student_join_organisation"), {"access_code": access_code, "class_join_request": "Request"}, ) c.logout() c.login(username=email, password=password) c.post(reverse("kurono"), {"name": "Test Game"}) c.post( reverse("teacher_accept_student_request", kwargs={"pk": indep_student.pk}), {"name": "Florian"}, ) game = Game.objects.get(id=1) new_student = Student.objects.last() self.assertTrue(new_student.new_user in game.can_play.all())
def test_move(self): email_1, password_1 = signup_teacher_directly() email_2, password_2 = signup_teacher_directly() org_name, postcode = create_organisation_directly(email_1) join_teacher_to_organisation(email_2, org_name, postcode) _, class_name_1, access_code_1 = create_class_directly(email_1) _, class_name_2, access_code_2 = create_class_directly(email_2) student_name_1, student_password_1, _ = create_school_student_directly( access_code_1) student_name_2, student_password_2, _ = create_school_student_directly( access_code_1) selenium.get(self.live_server_url) page = HomePage(selenium).go_to_teach_page().login(email_1, password_1) page = page.go_to_classes_page().go_to_class_page(class_name_1) assert page.has_students() assert page.student_exists(student_name_1) assert page.student_exists(student_name_2) page = page.toggle_select_student(student_name_1) page = move_students(page, 0) assert page.has_students() assert page.student_does_not_exist(student_name_1) assert page.student_exists(student_name_2) page = page.logout().go_to_teach_page().login(email_2, password_2) page = page.go_to_classes_page().go_to_class_page(class_name_2) assert page.has_students() assert page.student_exists(student_name_1) assert page.student_does_not_exist(student_name_2)
def test_view_resources(self): email, password = signup_teacher_directly() create_organisation_directly(email) klass, name, access_code = create_class_directly(email) create_school_student_directly(access_code) selenium.get(self.live_server_url) page = HomePage(selenium) page = page.go_to_login_page() page = page.login(email, password) assert self.is_dashboard_page(page) page = page.go_to_resources_page().go_to_materials_page() assert self.is_materials_page(page) page = page.click_pdf_link() assert self.is_pdf_viewer_page(page) page = page.click_resources_button_link().go_to_materials_page() assert self.is_materials_page(page) keystages = ['ks1', 'lks2', 'uks2', 'ks3'] for ks in keystages: page = page.click_keystage_link(ks) assert self.is_materials_page(page)
def test_deny_join(self): email_1, password_1 = signup_teacher_directly() email_2, password_2 = signup_teacher_directly() name, postcode = create_organisation_directly(email_1) _, class_name, access_code = create_class_directly(email_1) create_school_student_directly(access_code) selenium.get(self.live_server_url) page = HomePage(selenium) \ .go_to_login_page() \ .login_no_school(email_2, password_2) \ .join_organisation(name) assert page.__class__.__name__ == 'OnboardingRevokeRequestPage' page = page \ .logout() \ .go_to_login_page() \ .login(email_1, password_1) assert page.has_join_request(email_2) page = page.deny_join_request() assert not page.has_join_request(email_2) page = page \ .logout() \ .go_to_login_page() \ .login_no_school(email_2, password_2) assert page.__class__.__name__ == 'OnboardingOrganisationPage'
def test_preview_user_cannot_create_duplicate_game(self): email, password = signup_teacher_directly_as_preview_user() create_organisation_directly(email, True) klass, name, access_code = create_class_directly(email) create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = HomePage(self.selenium).go_to_login_page().login(email, password) page = page.go_to_aimmo_home_page() page.click_create_new_game_button() page.input_new_game_name("Test Game") page.click_create_game_button() self.selenium.get(self.live_server_url) page = HomePage(self.selenium).go_to_aimmo_home_page() page.click_create_new_game_button() page.input_new_game_name("Test Game") page.click_create_game_button() self.assertEqual( page.get_input_game_name_placeholder(), "Sorry, a game with this name already exists...", )
def test_move(self): email_1, password_1 = signup_teacher_directly() email_2, password_2 = signup_teacher_directly() org_name, postcode = create_organisation_directly(email_1) join_teacher_to_organisation(email_2, org_name, postcode) _, _, access_code_1 = create_class_directly(email_1) _, _, _ = create_class_directly(email_2) student_name_1, _, _ = create_school_student_directly(access_code_1) student_name_2, _, _ = create_school_student_directly(access_code_1) self.selenium.get(self.live_server_url) page = HomePage(self.selenium).go_to_login_page().login( email_1, password_1) page = page.go_to_class_page() assert page.student_exists(student_name_1) assert page.student_exists(student_name_2) page = page.toggle_select_student() page = page.move_students().select_class_by_index(0).move().move() assert not page.student_exists(student_name_1) page = page.go_to_dashboard() page = page.go_to_top().logout().go_to_login_page().login( email_2, password_2) page = page.go_to_class_page() assert page.student_exists(student_name_1)
def test_move(self): email_1, password_1 = signup_teacher_directly() email_2, password_2 = signup_teacher_directly() org_name, postcode = create_organisation_directly(email_1) join_teacher_to_organisation(email_2, org_name, postcode) _, class_name_1, access_code_1 = create_class_directly(email_1) _, class_name_2, access_code_2 = create_class_directly(email_2) student_name_1, student_password_1, _ = create_school_student_directly( access_code_1 ) student_name_2, student_password_2, _ = create_school_student_directly( access_code_1 ) self.selenium.get(self.live_server_url) page = HomePage(self.selenium).go_to_login_page().login(email_1, password_1) page = page.go_to_class_page() assert page.student_exists(student_name_1) assert page.student_exists(student_name_2) page = page.toggle_select_student() page = page.move_students().select_class_by_index(0).move().move() assert not page.student_exists(student_name_1) page = page.go_to_dashboard() page = page.go_to_top().logout().go_to_login_page().login(email_2, password_2) page = page.go_to_class_page() assert page.student_exists(student_name_1)
def test_edit(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) create_school_student_directly(access_code) page = self.go_to_homepage().go_to_login_page().login(email, password) page = page.go_to_class_page().go_to_class_settings_page() new_class_name = "new " + class_name assert not page.check_class_details({ "name": new_class_name, "classmates_data_viewable": True }) page = page.change_class_details({ "name": new_class_name, "classmates_data_viewable": True }) page = page.go_to_class_settings_page() new_class_name = "new " + class_name assert page.check_class_details({ "name": new_class_name, "classmates_data_viewable": True })
def test_dismiss(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name_1, student_password_1, _ = create_school_student_directly( access_code ) student_name_2, student_password_2, _ = create_school_student_directly( access_code ) self.selenium.get(self.live_server_url) page = HomePage(self.selenium).go_to_login_page().login(email, password) page = page.go_to_class_page() assert page.student_exists(student_name_1) page = page.toggle_select_student().dismiss_students() assert page.__class__.__name__ == "TeachDismissStudentsPage" page = page.cancel() assert page.__class__.__name__ == "TeachClassPage" page = ( page.toggle_select_student() .dismiss_students() .enter_email("*****@*****.**") .dismiss() ) assert not page.student_exists(student_name_1)
def test_dismiss(self): email, password = signup_teacher_directly() org_name, postcode = create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name_1, student_password_1, _ = create_school_student_directly(access_code) student_name_2, student_password_2, _ = create_school_student_directly(access_code) self.browser.get(self.live_server_url) page = HomePage(self.browser).go_to_teach_page().login(email, password) page = page.go_to_classes_page().go_to_class_page(class_name) assert page.has_students() assert page.student_exists(student_name_1) assert page.student_exists(student_name_2) page = page.dismiss_students_none_selected() assert self.is_class_page(page) page = page.toggle_select_student(student_name_1).dismiss_students() assert page.__class__.__name__ == 'TeachDismissStudentsPage' page = page.cancel() assert page.has_students() assert page.student_exists(student_name_1) assert page.student_exists(student_name_2) page = page.toggle_select_student(student_name_1) page, emails = dismiss_students(page) assert page.has_students() assert page.student_does_not_exist(student_name_1) assert page.student_exists(student_name_2)
def test_move(self): email_1, password_1 = signup_teacher_directly() email_2, password_2 = signup_teacher_directly() org_name, postcode = create_organisation_directly(email_1) join_teacher_to_organisation(email_2, org_name, postcode) _, class_name_1, access_code_1 = create_class_directly(email_1) _, class_name_2, access_code_2 = create_class_directly(email_2) student_name_1, student_password_1, _ = create_school_student_directly(access_code_1) student_name_2, student_password_2, _ = create_school_student_directly(access_code_1) self.browser.get(self.live_server_url) page = HomePage(self.browser).go_to_teach_page().login(email_1, password_1) page = page.go_to_classes_page().go_to_class_page(class_name_1) assert page.has_students() assert page.student_exists(student_name_1) assert page.student_exists(student_name_2) page = page.toggle_select_student(student_name_1) page = move_students(page, 0) assert page.has_students() assert page.student_does_not_exist(student_name_1) assert page.student_exists(student_name_2) page = page.logout().go_to_teach_page().login(email_2, password_2) page = page.go_to_classes_page().go_to_class_page(class_name_2) assert page.has_students() assert page.student_exists(student_name_1) assert page.student_does_not_exist(student_name_2)
def test_dismiss(self): email, password = signup_teacher_directly() org_name, postcode = create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name_1, student_password_1, _ = create_school_student_directly( access_code) student_name_2, student_password_2, _ = create_school_student_directly( access_code) selenium.get(self.live_server_url) page = HomePage(selenium).go_to_teach_page().login(email, password) page = page.go_to_classes_page().go_to_class_page(class_name) assert page.has_students() assert page.student_exists(student_name_1) assert page.student_exists(student_name_2) page = page.dismiss_students_none_selected() assert self.is_class_page(page) page = page.toggle_select_student(student_name_1).dismiss_students() assert page.__class__.__name__ == 'TeachDismissStudentsPage' page = page.cancel() assert page.has_students() assert page.student_exists(student_name_1) assert page.student_exists(student_name_2) page = page.toggle_select_student(student_name_1) page, emails = dismiss_students(page) assert page.has_students() assert page.student_does_not_exist(student_name_1) assert page.student_exists(student_name_2)
def test_edit_details_non_admin(self): email_1, _ = signup_teacher_directly() email_2, password_2 = signup_teacher_directly() name, postcode = create_organisation_directly(email_1) _, _, access_code_1 = create_class_directly(email_1) create_school_student_directly(access_code_1) join_teacher_to_organisation(email_2, name, postcode) _, _, access_code_2 = create_class_directly(email_2) create_school_student_directly(access_code_2) self.selenium.get(self.live_server_url) page = HomePage(self.selenium).go_to_login_page().login(email_2, password_2) page = page.change_teacher_details( { "title": "Mr", "first_name": "Florian", "last_name": "Aucomte", "current_password": "******", } ) assert self.is_dashboard_page(page) assert is_teacher_details_updated_message_showing(self.selenium) assert page.check_account_details( {"title": "Mr", "first_name": "Florian", "last_name": "Aucomte"} )
def test_moved_student_has_access_to_only_new_teacher_games(self): """ Given a student in a class, When a teacher transfers them to another class with a new teacher, Then the student should only have access to the new teacher's games """ email1, password1 = signup_teacher_directly() school_name, postcode = create_organisation_directly(email1) klass1, _, access_code1 = create_class_directly(email1, True) create_school_student_directly(access_code1) email2, password2 = signup_teacher_directly() join_teacher_to_organisation(email2, school_name, postcode) klass2, _, access_code2 = create_class_directly(email2, True) create_school_student_directly(access_code2) teacher1 = Teacher.objects.get(new_user__email=email1) teacher2 = Teacher.objects.get(new_user__email=email2) c = Client() c.login(username=email2, password=password2) c.post(reverse("kurono"), {"name": "Game 2"}) c.logout() c.login(username=email1, password=password1) c.post(reverse("kurono"), {"name": "Game 1"}) game1 = Game.objects.get(owner=teacher1.new_user) game2 = Game.objects.get(owner=teacher2.new_user) student1 = Student.objects.get(class_field=klass1) student2 = Student.objects.get(class_field=klass2) self.assertTrue(student1.new_user in game1.can_play.all()) self.assertTrue(student2.new_user in game2.can_play.all()) c.post( reverse("teacher_move_students", kwargs={"access_code": access_code1}), {"transfer_students": student1.pk}, ) c.post( reverse( "teacher_move_students_to_class", kwargs={"access_code": access_code1} ), { "form-0-name": student1.user.user.first_name, "form-MAX_NUM_FORMS": 1000, "form-0-orig_name": student1.user.user.first_name, "form-TOTAL_FORMS": 1, "form-MIN_NUM_FORMS": 0, "submit_disambiguation": "", "form-INITIAL_FORMS": 1, "new_class": klass2.pk, }, ) c.logout() self.assertTrue(student1.new_user not in game1.can_play.all()) self.assertTrue(student1.new_user in game2.can_play.all())
def test_login_success(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, _, access_code = create_class_directly(email) create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = HomePage(self.selenium) page = page.go_to_login_page() page = page.login(email, password) assert self.is_dashboard_page(page)
def test_create_dashboard(self): email, password = signup_teacher_directly() create_organisation_directly(email) klass, name, access_code = create_class_directly(email) create_school_student_directly(access_code) page = self.go_to_homepage().go_to_login_page().login(email, password) page, class_name = create_class(page) assert is_class_created_message_showing(self.selenium, class_name)
def test_leave_organisation(self): email_1, password_1 = signup_teacher_directly() name, postcode = create_organisation_directly(email_1) _, class_name_1, access_code_1 = create_class_directly(email_1) create_school_student_directly(access_code_1) title, first_name, last_name, email_2, password_2 = generate_details() new_last_name = "New Teacher" selenium.get(self.live_server_url) page = HomePage(selenium) \ .go_to_signup_page() \ .signup(title, first_name, new_last_name, email_2, password_2, password_2) page = email_utils.follow_verify_email_link_to_onboarding( page, mail.outbox[0]) mail.outbox = [] page = page.login_no_school(email_2, password_2).join_organisation(name) page = page \ .logout() \ .go_to_login_page() \ .login(email_1, password_1) page = page.accept_join_request() assert page.is_teacher_in_school(new_last_name) _, class_name_2, access_code_2 = create_class_directly(email_2) create_school_student_directly(access_code_2) page = page \ .logout() \ .go_to_login_page() \ .login(email_2, password_2) page = page.leave_organisation_with_students() assert page.__class__.__name__ == 'TeachMoveClassesPage' page = page.move_and_leave() assert page.__class__.__name__ == 'OnboardingOrganisationPage' page = page \ .logout() \ .go_to_login_page() \ .login(email_1, password_1) assert page.is_not_teacher_in_school(new_last_name)
def test_transfer_cancel(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) create_school_student_directly(access_code) page = self.go_to_homepage().go_to_login_page().login(email, password) page = page.go_to_class_page().go_to_class_settings_page() page = page.transfer_class() assert page.get_list_length() == 0 page = page.cancel() assert page.__class__.__name__ == "TeachClassPage"
def test_create_dashboard_non_admin(self): email_1, password_1 = signup_teacher_directly() email_2, password_2 = signup_teacher_directly() name, postcode = create_organisation_directly(email_1) klass_1, class_name_1, access_code_1 = create_class_directly(email_1) create_school_student_directly(access_code_1) join_teacher_to_organisation(email_2, name, postcode) klass_2, class_name_2, access_code_2 = create_class_directly(email_2) create_school_student_directly(access_code_2) page = self.go_to_homepage().go_to_login_page().login(email_2, password_2) page, class_name_3 = create_class(page) assert is_class_created_message_showing(self.selenium, class_name_3)
def test_preview_user_can_create_game(self): email, password = signup_teacher_directly_as_preview_user() create_organisation_directly(email, True) klass, name, access_code = create_class_directly(email) create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = HomePage(self.selenium).go_to_login_page().login(email, password) page = page.go_to_aimmo_home_page() page.click_create_new_game_button() page.input_new_game_name("Test Game") page.click_create_game_button() self.assertIn("/aimmo/play/1/", self.selenium.driver.current_url)
def test_add_to_existing_class(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) create_school_student_directly(access_code) selenium.get(self.live_server_url) page = HomePage(selenium).go_to_login_page().login(email, password).go_to_class_page() page, new_student_name = create_school_student(page) assert page.student_exists(new_student_name) page = page.go_back_to_class() assert page.student_exists(new_student_name)
def test_change_password(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly( access_code) selenium.get(self.live_server_url) page = HomePage(selenium).go_to_play_page()\ .school_login(student_name, access_code, student_password)\ .go_to_account_page() new_password = '******' + student_password page = page.change_account_details({ 'password': new_password, 'confirm_password': new_password, 'current_password': student_password }) page = page.logout()\ .go_to_play_page()\ .school_login_incorrect(student_name, access_code, student_password) assert page.school_login_has_failed() page = page.school_login(student_name, access_code, new_password) assert self.is_dashboard(page)
def test_edit_details(self): email, password = signup_teacher_directly() school_name, postcode = create_organisation_directly(email) _, _, access_code = create_class_directly(email) _, password, _ = create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = HomePage(self.selenium).go_to_login_page().login( email, password) assert page.check_organisation_details({ "name": school_name, "postcode": postcode }) new_name = "new " + school_name new_postcode = "OX2 6LE" page.change_organisation_details({ "name": new_name, "postcode": new_postcode }) assert page.check_organisation_details({ "name": new_name, "postcode": new_postcode })
def test_delete_empty(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) create_school_student_directly(access_code) page = self.go_to_homepage().go_to_login_page().login(email, password) page = page.go_to_class_page() page = page.toggle_select_student().delete_students() page = page.confirm_delete_student_dialog() page = page.delete_class() assert page.is_dialog_showing() page = page.confirm_delete_class_dialog() assert page.__class__.__name__ == 'TeachDashboardPage' assert page.does_not_have_classes()
def test_update_student_invalid_name(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) name, password, student = create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = ( HomePage(self.selenium) .go_to_login_page() .login(email, password) .go_to_class_page() .go_to_edit_student_page() ) assert page.is_student_name(name) new_student_name = "new name!" page = page.type_student_name(new_student_name) page = page.click_update_button() assert page.is_student_name(name) assert page.was_form_invalid( "form-edit-student", "Names may only contain letters, numbers, dashes, underscores, and spaces.", )
def test_update_student_password(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) name, password, student = create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = ( HomePage(self.selenium) .go_to_login_page() .login(email, password) .go_to_class_page() .go_to_edit_student_page() ) assert page.is_student_name(name) new_student_password = "******" page = page.click_set_password_form_button().type_student_password( new_student_password ) time.sleep(1) page = page.click_set_password_button() assert page.is_student_password(new_student_password)
def test_create_dashboard_non_admin(self): email_1, password_1 = signup_teacher_directly() email_2, password_2 = signup_teacher_directly() name, postcode = create_organisation_directly(email_1) klass_1, class_name_1, access_code_1 = create_class_directly(email_1) create_school_student_directly(access_code_1) join_teacher_to_organisation(email_2, name, postcode) klass_2, class_name_2, access_code_2 = create_class_directly(email_2) create_school_student_directly(access_code_2) page = self.go_to_homepage().go_to_login_page().login( email_2, password_2) page, class_name_3 = create_class(page) assert is_class_created_message_showing(self.selenium, class_name_3)
def test_update_password_success(self): email, _ = signup_teacher_directly() create_organisation_directly(email) _, _, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = ( HomePage(self.selenium) .go_to_login_page() .student_login(student_name, access_code, student_password) ) assert self.is_dashboard(page) new_password = "******" page = page.go_to_account_page().update_password_failure( new_password, new_password, student_password ) assert is_student_details_updated_message_showing(self.selenium) page.logout() self.selenium.get(self.live_server_url) page = ( HomePage(self.selenium) .go_to_login_page() .student_login(student_name, access_code, new_password) ) assert self.is_dashboard(page)
def test_change_password(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) self.browser.get(self.live_server_url) page = ( HomePage(self.browser) .go_to_play_page() .school_login(student_name, access_code, student_password) .go_to_account_page() ) new_password = "******" + student_password page = page.change_account_details( {"password": new_password, "confirm_password": new_password, "current_password": student_password} ) page = page.logout().go_to_play_page().school_login_incorrect(student_name, access_code, student_password) assert page.school_login_has_failed() page = page.school_login(student_name, access_code, new_password) assert self.is_dashboard(page)
def test_edit_details(self): email, password = signup_teacher_directly() school_name, postcode = create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, password, student = create_school_student_directly( access_code) selenium.get(self.live_server_url) page = HomePage(selenium) \ .go_to_login_page() \ .login(email, password) assert page.check_organisation_details({ 'name': school_name, 'postcode': postcode }) new_name = 'new ' + school_name new_postcode = 'OX2 6LE' page.change_organisation_details({ 'name': new_name, 'postcode': new_postcode }) assert page.check_organisation_details({ 'name': new_name, 'postcode': new_postcode })
def test_delete_empty(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) create_school_student_directly(access_code) page = self.go_to_homepage().go_to_login_page().login(email, password) page = page.go_to_class_page() page = page.toggle_select_student().delete_students() page = page.confirm_delete_student_dialog() page = page.delete_class() assert page.is_dialog_showing() page = page.confirm_delete_class_dialog() assert page.__class__.__name__ == "TeachDashboardPage" assert page.does_not_have_classes()
def test_delete(self): email, password = signup_teacher_directly() org_name, postcode = create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly( access_code) selenium.get(self.live_server_url) page = HomePage(selenium).go_to_teach_page().login(email, password) page = page.go_to_classes_page().go_to_class_page(class_name) assert page.has_students() assert page.student_exists(student_name) page = page.toggle_select_student(student_name).delete_students() assert page.is_dialog_showing() page = page.cancel_dialog() assert not page.is_dialog_showing() assert page.has_students() assert page.student_exists(student_name) page = page.delete_students() assert page.is_dialog_showing() page = page.confirm_dialog_expect_error() assert page.does_not_have_students() assert page.student_does_not_exist(student_name)
def test_update_password_success(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = ( HomePage(self.selenium) .go_to_login_page() .student_login(student_name, access_code, student_password) ) assert self.is_dashboard(page) new_password = "******" page = page.go_to_account_page().update_password_failure( new_password, new_password, student_password ) assert is_student_details_updated_message_showing(self.selenium) page.logout() self.selenium.get(self.live_server_url) page = ( HomePage(self.selenium) .go_to_login_page() .student_login(student_name, access_code, new_password) ) assert self.is_dashboard(page)
def test_delete_nonempty(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) create_school_student_directly(access_code) page = self.go_to_homepage().go_to_login_page().login(email, password) page = page.go_to_class_page() page = page.delete_class() assert page.is_dialog_showing() page = page.cancel_dialog() page = page.delete_class() page = page.confirm_dialog_expect_error() assert page.__class__.__name__ == 'TeachClassPage' page.wait_for_messages() assert is_class_nonempty_message_showing(selenium)
def test_delete_nonempty(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) create_school_student_directly(access_code) page = self.go_to_homepage().go_to_login_page().login(email, password) page = page.go_to_class_page() page = page.delete_class() assert page.is_dialog_showing() page = page.cancel_dialog() page = page.delete_class() page = page.confirm_dialog_expect_error() assert page.__class__.__name__ == "TeachClassPage" page.wait_for_messages() assert is_class_nonempty_message_showing(self.selenium)
def test_login(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) self.browser.get(self.live_server_url) page = HomePage(self.browser).go_to_play_page().school_login(student_name, access_code, student_password) assert self.is_dashboard(page)
def test_dismiss(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name_1, student_password_1, _ = create_school_student_directly(access_code) student_name_2, student_password_2, _ = create_school_student_directly(access_code) selenium.get(self.live_server_url) page = HomePage(selenium).go_to_login_page().login(email, password) page = page.go_to_class_page() assert page.student_exists(student_name_1) page = page.toggle_select_student().dismiss_students() assert page.__class__.__name__ == 'TeachDismissStudentsPage' page = page.cancel() assert page.__class__.__name__ == 'TeachClassPage' page = page.toggle_select_student().dismiss_students().enter_email("*****@*****.**").dismiss() assert not page.student_exists(student_name_1)
def test_add_to_existing_class(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = ( HomePage(self.selenium) .go_to_login_page() .login(email, password) .go_to_class_page() ) page, new_student_name = create_school_student(page) assert page.student_exists(new_student_name) page = page.go_back_to_class() assert page.student_exists(new_student_name)
def test_login(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) selenium.get(self.live_server_url) page = HomePage(selenium)\ .go_to_login_page()\ .student_login(student_name, access_code, student_password) assert self.is_dashboard(page)
def test_login_nonexistent_class(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) selenium.get(self.live_server_url) page = HomePage(selenium) \ .go_to_login_page() \ .student_login_failure(student_name, 'WRONG', student_password) assert page.has_login_failed('form-login-school', 'Invalid name, class access code or password')
def test_login_failure(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) selenium.get(self.live_server_url) page = HomePage(selenium)\ .go_to_play_page()\ .school_login_incorrect(student_name, access_code, 'some other password') assert page.school_login_has_failed()
def test_reset_password(self): email, _ = signup_teacher_directly() create_organisation_directly(email) _, _, access_code = create_class_directly(email) create_school_student_directly(access_code) page = self.get_to_forgotten_password_page() page.reset_email_submit(email) self.wait_for_email() page = email_utils.follow_reset_email_link(self.selenium, mail.outbox[0]) new_password = "******" page.teacher_reset_password(new_password) self.selenium.get(self.live_server_url) page = HomePage(self.selenium).go_to_login_page().login(email, new_password) assert self.is_dashboard_page(page)
def test_edit(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) create_school_student_directly(access_code) page = self.go_to_homepage().go_to_login_page().login(email, password) page = page.go_to_class_page().go_to_class_settings_page() new_class_name = "new " + class_name assert not page.check_class_details( {"name": new_class_name, "classmates_data_viewable": True} ) page = page.change_class_details( {"name": new_class_name, "classmates_data_viewable": True} ) page = page.go_to_class_settings_page() new_class_name = "new " + class_name assert page.check_class_details( {"name": new_class_name, "classmates_data_viewable": True} )
def test_student_login_redirect(self): teacher_email, _ = signup_teacher_directly() _, _, class_access_code = create_class_directly(teacher_email) name, password, _ = create_school_student_directly(class_access_code) url = reverse("login_view") + "/?next=/" c = Client() response = c.post( url, { "login-name": name, "login-access_code": class_access_code, "login-password": password, "school_login": "", }, ) self.assertRedirects(response, "/")
def test_delete(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = HomePage(self.selenium).go_to_login_page().login(email, password) page = page.go_to_class_page() assert page.student_exists(student_name) page = page.toggle_select_student().delete_students() assert page.is_dialog_showing() page = page.confirm_delete_student_dialog() assert not page.student_exists(student_name)
def test_login_nonexistent_class(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = ( HomePage(self.selenium) .go_to_login_page() .student_login_failure(student_name, "WRONG", student_password) ) assert page.has_login_failed( "form-login-school", "Invalid name, class access code or password" )
def test_create_already_exists(self): email, password = signup_teacher_directly() org_name, postcode = create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) self.browser.get(self.live_server_url) page = HomePage(self.browser).go_to_teach_page().login(email, password) page = page.go_to_classes_page().go_to_class_page(class_name) assert page.has_students() assert page.student_exists(student_name) page = page.type_student_name(student_name).create_students_failure() assert self.is_class_page(page) assert page.adding_students_failed() assert page.student_already_existed(student_name) assert page.has_students() assert page.student_exists(student_name)
def test_move_cancel(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = HomePage(self.selenium).go_to_login_page().login(email, password) page = page.go_to_class_page() page = page.move_students_none_selected() assert page.__class__.__name__ == "TeachClassPage" page = page.toggle_select_student().move_students() assert page.__class__.__name__ == "TeachMoveStudentsPage" page = page.cancel() assert page.__class__.__name__ == "TeachClassPage"
def test_transfer(self): email_1, password_1 = signup_teacher_directly() email_2, password_2 = signup_teacher_directly() org_name, postcode = create_organisation_directly(email_1) join_teacher_to_organisation(email_2, org_name, postcode) _, class_name, access_code = create_class_directly(email_1) student_name, student_password, _ = create_school_student_directly(access_code) page = self.go_to_homepage().go_to_login_page().login(email_1, password_1) page = page.go_to_class_page().go_to_class_settings_page() page = transfer_class(page, 0) assert page.does_not_have_classes() page = page.logout().go_to_login_page().login(email_2, password_2) assert page.does_class_exist(class_name, access_code) page = page.go_to_class_page() assert page.has_students() assert page.student_exists(student_name)
def test_move_cancel(self): email, password = signup_teacher_directly() org_name, postcode = create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) self.browser.get(self.live_server_url) page = HomePage(self.browser).go_to_teach_page().login(email, password) page = page.go_to_classes_page().go_to_class_page(class_name) assert page.has_students() assert page.student_exists(student_name) page = page.move_students_none_selected() assert self.is_class_page(page) page = page.toggle_select_student(student_name).move_students() assert page.__class__.__name__ == 'TeachMoveStudentsPage' assert page.get_list_length() == 0 page = page.cancel()
def test_generate_random_student_password(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) name, password, student = create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = ( HomePage(self.selenium) .go_to_login_page() .login(email, password) .go_to_class_page() .go_to_edit_student_page() ) assert page.is_student_name(name) page = page.click_generate_password_button() assert page.__class__.__name__ == "EditStudentPasswordPage"
def test_update_password_passwords_not_match(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = ( HomePage(self.selenium) .go_to_login_page() .student_login(student_name, access_code, student_password) ) assert self.is_dashboard(page) page = page.go_to_account_page().update_password_failure( "NewPassword", "OtherPassword", student_password ) assert self.is_account_page(page) assert page.was_form_invalid( "student_account_form", "Your new passwords do not match" )
def test_update_password_too_weak(self): email, password = signup_teacher_directly() create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) self.selenium.get(self.live_server_url) page = ( HomePage(self.selenium) .go_to_login_page() .student_login(student_name, access_code, student_password) ) assert self.is_dashboard(page) page = page.go_to_account_page().update_password_failure( "tiny", "tiny", student_password ) assert self.is_account_page(page) assert page.was_form_invalid( "student_account_form", "Password not strong enough, consider using at least 8 characters, upper and lower case letters, and numbers", )
def test_delete(self): email, password = signup_teacher_directly() org_name, postcode = create_organisation_directly(email) _, class_name, access_code = create_class_directly(email) student_name, student_password, _ = create_school_student_directly(access_code) self.browser.get(self.live_server_url) page = HomePage(self.browser).go_to_teach_page().login(email, password) page = page.go_to_classes_page().go_to_class_page(class_name) assert page.has_students() assert page.student_exists(student_name) page = page.toggle_select_student(student_name).delete_students() assert page.is_dialog_showing() page = page.cancel_dialog() assert not page.is_dialog_showing() assert page.has_students() assert page.student_exists(student_name) page = page.delete_students() assert page.is_dialog_showing() page = page.confirm_dialog_expect_error() assert page.does_not_have_students() assert page.student_does_not_exist(student_name)