def signin(browser, student, new=False): email = student.student.email browser.get("{}{}".format(browser.server_url, reverse("login"))) login_link = browser.find_element_by_link_text("LOGIN") login_link.click() input_ = browser.find_element_by_name("email") input_.clear() input_.send_keys(email) input_.send_keys(Keys.ENTER) username, _ = get_student_username_and_password(email) token = create_student_token(username, email) signin_link = "{}{}?token={}".format(browser.server_url, reverse("student-page"), token) browser.get(signin_link) if new: assert re.search( r"/(\w{2})/tos/tos/student/\?next=/\1/student/", browser.current_url, ) else: assert re.search(r"/en/student/\?token=", browser.current_url)
def test_standalone_student_exists(self): test = {"email": "test@localhost"} username, password = get_student_username_and_password(**test) Student.objects.create(student=User.objects.create_user( username=username, email=test["email"], password=password)) user, is_lti = authenticate_student(HttpRequest(), **test) self.assertIsInstance(user, User)
def test_standalone_user_exists_is_teacher(self): test = {"email": "test@localhost"} username, password = get_student_username_and_password(**test) Teacher.objects.create(user=User.objects.create_user( username=username, email=test["email"], password=password)) user, is_lti = authenticate_student(HttpRequest(), **test) self.assertIsInstance(user, User) self.assertFalse(is_lti) self.assertFalse( Student.objects.filter(student__email=test["email"]).exists())
def test_fake_link(browser): email = "*****@*****.**" username, _ = get_student_username_and_password(email) token = create_student_token(username, email) signin_link = "{}{}?token={}".format(browser.server_url, reverse("student-page"), token) browser.get(signin_link) assert re.search(r"student/", browser.current_url) err = ("There is no user corresponding to the given link. " "You may try asking for another one.") browser.find_element_by_xpath("//*[contains(text(), '{}')]".format(err))
def get_students(n_students): emails = ["test-{}@test.com".format(i + 1) for i in range(n_students)] usernames_passwords = [ get_student_username_and_password(email) for email in emails ] users = [ User.objects.get_or_create(username=username[0], email=email)[0] for username, email in zip(usernames_passwords, emails) ] for user, password in zip(users, usernames_passwords): user.set_password(password[1]) user.save() return [Student.objects.get_or_create(student=user)[0] for user in users]
def test_lti_student_exists(self): test = {"email": "test@localhost"} user_id = test["email"][:-10] username, password = get_old_lti_student_username_and_password(user_id) Student.objects.create(student=User.objects.create_user( username=username, email=test["email"], password=password)) new_username, _ = get_student_username_and_password(test["email"]) user, is_lti = authenticate_student(HttpRequest(), **test) self.assertIsInstance(user, User) self.assertTrue(is_lti) self.assertEqual(len(User.objects.filter(email=test["email"])), 1) self.assertEqual( len(Student.objects.filter(student__email=test["email"])), 1) self.assertFalse(User.objects.filter(username=new_username).exists()) self.assertFalse( Student.objects.filter(student__username=new_username).exists())
def login_student(client, student): username, password = get_student_username_and_password( student.student.email) return client.login(username=username, password=password)