def test_weird_chars_large_set(db_test_client, random_roles=True): from application import db username = "******" password = "******" first = "ääöäöpöpäÖPLÄPLÄ" last = "ÄÅÄÖÖÖÄÅ,.1,.,ösa" db.insert_user(username, password, first, last) a1 = db.get_user(username, password) assert a1.first_name == first assert a1.last_name == last null = db.get_user("something", "something") assert null == None usernames = [] passwords = [] firsts = [] lasts = [] roles = [] for i in range(20): username = get_random_unicode(30) password = get_random_unicode(30) first = get_random_unicode(20) last = get_random_unicode(35) usernames.append(username) passwords.append(password) firsts.append(first) lasts.append(last) if random_roles: role = choice(["USER", "TEACHER"]) else: a = ["TEACHER", "USER"] role = a[i % 2] roles.append(role) db.insert_user(username, password, first, last, role=role) ids = [] for username, password, first, last, role in zip(usernames, passwords, firsts, lasts, roles): acc = db.get_user(username, password) assert acc is not None assert acc.last_name == last assert acc.first_name == first assert acc.role == role acc2 = db.get_user_by_id(acc.id) assert acc2.id == acc.id assert acc.id not in ids assert acc.last_name == acc2.last_name assert acc.first_name == acc2.first_name assert acc.role == acc2.role assert acc.name == acc2.name ids.append(acc.id) return ids
def test_large_course_insert(db_test_client): from application import db teachers = [] for _ in range(random.randint(18,23)): username = get_random_unicode(35) password = get_random_unicode(30) first = get_random_unicode(15) last = get_random_unicode(25) db.insert_user(username, password, first, last, role="TEACHER") acc = db.get_user(username, password) assert acc.name == username assert acc.role == "TEACHER" teachers.append(acc) teach_courses = {} for t in teachers: teach_courses[t.id]=[] for _ in range(random.randint(12,20)): course = Course(get_random_unicode(20), get_random_unicode(40), random_datetime()) id, code = db.insert_course(course, t.id) course.id = id course.code = code teach_courses[t.id].append(course) random.shuffle(teachers) for t in teachers: db_courses = db.select_courses_teacher(t.id) assert len(db_courses)>=12 case = unittest.TestCase() case.assertCountEqual(db_courses, teach_courses[t.id]) return teachers
def test_select_file_details_multiple(db_test_client): from application import db db.insert_user("turha", "turha", "turha", "turha", role="TEACHER") user_id = db.get_user("turha","turha").id case = unittest.TestCase() case.maxDiff = None c_id, _ =db.insert_course(Course("something","somthing", datetime.datetime.now()),user_id) for _ in range(20): id_dic = create_dummy(db, user_id=user_id, course=c_id) correct_files= [] for i in range(20): rand_bytes= os.urandom(20) name = "task"+str(id_dic["task_id"])+str(i) id = file_insert_helper(db,binary_file=rand_bytes, task_id=id_dic["task_id"], name=name, user_id=user_id) correct_files.append(File(id, name, datetime.datetime.now())) files = db.select_file_details(task_id=id_dic["task_id"]) assert len(files) == 20 case.assertCountEqual(files, correct_files) correct_bytes, _ = db.get_file(id) assert rand_bytes == correct_bytes rand_bytes= os.urandom(20) id = file_insert_helper(db,binary_file=rand_bytes,submit_id=id_dic["submit_id"], name="submit_id"+str(id_dic["submit_id"]), user_id=user_id) sub_id = id_dic["submit_id"] files = db.select_file_details(submit_id=sub_id) assert len(files) == 1 assert files[0].name == "submit_id"+str(id_dic["submit_id"]) assert files[0].id == id correct_bytes, _ = db.get_file(id) assert rand_bytes == correct_bytes rand_bytes= os.urandom(20) id = file_insert_helper(db,binary_file=rand_bytes,assignment_id=id_dic["assignment_id"], name="assignment_id"+str(id_dic["task_id"]), user_id=user_id) files = db.select_file_details(assignment_id=id_dic["assignment_id"]) assert len(files) == 1 assert files[0].name == "assignment_id"+str(id_dic["assignment_id"]) assert files[0].id == id correct_bytes, _ = db.get_file(id) assert rand_bytes == correct_bytes rand_bytes= os.urandom(20) id = file_insert_helper(db,binary_file=rand_bytes,answer_id=id_dic["answer_id"], name="answer_id"+str(id_dic["task_id"]), user_id=user_id) files = db.select_file_details(answer_id=id_dic["answer_id"]) assert len(files) == 1 assert files[0].name == "answer_id"+str(id_dic["answer_id"]) assert files[0].id == id correct_bytes, _ = db.get_file(id) assert rand_bytes == correct_bytes
def test_db_file_insert_constraint(db_test_client): from application import db s="nothing" db.insert_user(s,s,s,s,role="TEACHER") user_id = db.get_user(s,s).get_id() with pytest.raises(IntegrityError): file_insert_helper(db, user_id=user_id, binary_file=io.BytesIO(b"helvetin turhia bitteja").read()) sql = Select([db.file]) with db.engine.connect() as conn: rs = conn.execute(sql) row = rs.first() assert row is None
def test_select_file_details_single(db_test_client): from application import db db.insert_user("turha", "turha", "turha", "turha", role="TEACHER") user_id = db.get_user("turha","turha").id c_id, _ =db.insert_course(Course("something","somthing", datetime.datetime.now()),user_id) for _ in range(20): id_dic = create_dummy(db, user_id=user_id, course=c_id) rand_bytes= os.urandom(20) id = file_insert_helper(db,binary_file=rand_bytes, task_id=id_dic["task_id"], name="task"+str(id_dic["task_id"]), user_id=user_id) files = db.select_file_details(task_id=id_dic["task_id"]) assert len(files) == 1 assert files[0].name == "task"+str(id_dic["task_id"]) assert files[0].id == id assert rand_bytes, _ == db.get_file(id) rand_bytes= os.urandom(20) id = file_insert_helper(db,binary_file=rand_bytes,submit_id=id_dic["submit_id"], name="submit_id"+str(id_dic["submit_id"]), user_id=user_id) sub_id = id_dic["submit_id"] files = db.select_file_details(submit_id=sub_id) assert len(files) == 1 assert files[0].name == "submit_id"+str(id_dic["submit_id"]) assert files[0].id == id assert rand_bytes, _ == db.get_file(id) rand_bytes= os.urandom(20) id = file_insert_helper(db,binary_file=rand_bytes,assignment_id=id_dic["assignment_id"], name="assignment_id"+str(id_dic["task_id"]), user_id=user_id) files = db.select_file_details(assignment_id=id_dic["assignment_id"]) assert len(files) == 1 assert files[0].name == "assignment_id"+str(id_dic["assignment_id"]) assert files[0].id == id db_bytes, name = db.get_file(id) assert rand_bytes == db_bytes rand_bytes= os.urandom(20) id = file_insert_helper(db,binary_file=rand_bytes,answer_id=id_dic["answer_id"], name="answer_id"+str(id_dic["task_id"]), user_id=user_id) files = db.select_file_details(answer_id=id_dic["answer_id"]) assert len(files) == 1 assert files[0].name == "answer_id"+str(id_dic["answer_id"]) assert files[0].id == id assert rand_bytes, _ == db.get_file(id)
def test_user_insert(db_test_client): from application import db db.insert_user("oppilas", "oppilas", "Tessa", "Testaaja") with pytest.raises(IntegrityError): db.insert_user("oppilas", "oppilas", "Tessa", "Testaaja") j = db.account.join(db.role) sql = Select([func.count(db.account.c.username), db.role.c.name]).select_from(j) with db.engine.connect() as conn: rs = conn.execute(sql) row = rs.first() count = row[0] role = row[1] assert 1 == count assert "USER" == role db.insert_user("opettaja", "opettaja", "Essi", "Esimerkki", role="TEACHER") sql = Select([func.count(db.account.c.username), db.role.c.name ]).select_from(j).where(db.role.c.name == "TEACHER") with db.engine.connect() as conn: rs = conn.execute(sql) row = rs.first() count = row[0] role = row[1] assert 1 == count assert "TEACHER" == role student = db.get_user_by_id(1) teacher = db.get_user_by_id(2) null = db.get_user_by_id(3) assert student.name == "oppilas" assert teacher.name == "opettaja" assert null == None
def register(): if request.method == "GET": return render_template("auth/register.html", form=RegisterForm()) form = RegisterForm(request.form) if not form.validate(): # form validation checks if username is free return render_template("auth/register.html", form=form), 409 try: if form.student.data: db.insert_user(form.username.data, form.password.data, form.first_name.data, form.last_name.data) else: db.insert_user(form.username.data, form.password.data, form.first_name.data, form.last_name.data, role="TEACHER") return redirect(url_for("index")) except ValueError: return render_template("auth/register.html", form=RegisterForm(), error="Username in use"), 422
def test_large_assignment_timezone_helsinki(db_test_client, files=[]): from application import db db.insert_user("opettaja1", "opettaja", "Who", "Cares", role="TEACHER") db.insert_user("opettaja2", "opettaja", "Who", "Cares", role="TEACHER") db.insert_user("opettaja3", "opettaja", "Who", "Cares", role="TEACHER") db.insert_user("opettaja4", "opettaja", "Who", "Cares", role="TEACHER") teacher1 = db.get_user("opettaja1", "opettaja") teacher2 = db.get_user("opettaja2", "opettaja") teacher3 = db.get_user("opettaja3", "opettaja") teacher4 = db.get_user("opettaja4", "opettaja") teachers = [teacher1, teacher2, teacher3, teacher4] assert teacher1 is not None assert teacher2 is not None assert teacher3 is not None assert teacher4 is not None teacher_assigments = [] for teacher in teachers: all_assignments = {} visible_assignments = {} course_ids = insert_random_courses(teacher.id, db) assert len(course_ids) > 0 for _ in range(random.randint(12, 21)): #insert assignments name = get_random_unicode(15) course_id = random.choice(course_ids) if random.randint(0, 1) or not visible_assignments.get(course_id): visible = True reveal = pytz.timezone("Europe/Helsinki").localize( datetime.datetime.now()) - datetime.timedelta(minutes=1) else: visible = False reveal = pytz.timezone("Europe/Helsinki").localize( datetime.datetime.now()) + datetime.timedelta( hours=random.randint(3, 5), minutes=1) deadline = random_datetime(start=reveal, time_zone="Europe/Helsinki") assig_id = db.insert_assignment(teacher1.id, course_id, name, deadline, reveal, files) tasks = [] for _ in range(random.randint(2, 15)): task = random_task(assig_id, files) task_id = db.insert_task(teacher.id, assig_id, task.description, task.points, files) task.id = task_id tasks.append(task) result_dict = { "teacher_id": teacher.id, "id": assig_id, "reveal": reveal, "deadline": deadline, "course_id": course_id, "name": name, "files": files, "tasks": tasks } if not all_assignments.get(course_id): all_assignments[course_id] = [result_dict] else: all_assignments[course_id].append(result_dict) if visible: if not visible_assignments.get(course_id): visible_assignments[course_id] = [result_dict] else: visible_assignments[course_id].append(result_dict) temp = (teacher.id, all_assignments, visible_assignments) teacher_assigments.append(temp) for teacher_id, all_assignments, visible_assignments in teacher_assigments: courses = db.select_courses_teacher(teacher_id) assert len(courses) course_ids = [c.id for c in courses] for key in all_assignments.keys(): assert key in course_ids for course in courses: correct_assignments = all_assignments.get(course.id, []) correct_visible_assignments = visible_assignments.get(course.id) db.set_assignments(course, for_student=False) course.set_timezones("Europe/Helsinki") assert len(course.assignments) == len( correct_assignments), "wrong number of assignments" for a in course.assignments: assert isinstance(a, Assignment) assignment_dic = get_correct_assignment( a.id, correct_assignments) assert assignment_dic, "\n".join( format_error(a, correct_assignments)) assert assignment_dic["id"] == a.id assert assignment_dic["teacher_id"] == teacher_id assert assignment_dic["course_id"] == course.id assert a.deadline == assignment_dic["deadline"] assert a.reveal == assignment_dic["reveal"] case = unittest.TestCase() case.assertCountEqual(assignment_dic["tasks"], a.tasks) db.set_assignments(course, for_student=True) for a in course.assignments: assert isinstance(a, Assignment) assignment_dic = get_correct_assignment( a.id, correct_visible_assignments) assert assignment_dic, "\n".join( format_error(a, correct_visible_assignments)) assert assignment_dic["id"] == a.id assert assignment_dic["teacher_id"] == teacher_id assert assignment_dic["course_id"] == course.id assert a.deadline == assignment_dic["deadline"] assert a.reveal == assignment_dic["reveal"] case = unittest.TestCase() case.assertCountEqual(assignment_dic["tasks"], a.tasks) return teachers