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)
Beispiel #8
0
    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_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)
Beispiel #22
0
    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_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)
Beispiel #28
0
    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)
Beispiel #36
0
    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)
Beispiel #45
0
    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)
Beispiel #46
0
    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)