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 test_course_insert(db_test_client): from application import db from .user_test import test_user_insert test_user_insert(db_test_client) student = db.get_user_by_id(1) teacher = db.get_user_by_id(2) assert student is not None assert teacher is not None name = "'öäasöä1ÅÄÖÅÄÅÖÄÅÖö23å231äl23ölasäösä" desc = "äöääöäpläplpä21äl.masalöas" c = Course(name, desc, datetime.date.today()) id, code = db.insert_course(c, teacher.id) assert id > 0 assert code is not None with db.engine.connect() as conn: sql = select([db.course]).where(db.course.c.teacher_id == teacher.id) rs = conn.execute(sql) row = rs.first() assert row[db.course.c.id] == id assert row[db.course.c.description] == desc assert row[db.course.c.name] == name return id, code
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_course_signup(db_test_client): from application import db id, code = test_course_insert(db_test_client) student = db.get_user_by_id(1) teacher = db.get_user_by_id(2) assert student is not None assert teacher is not None db.enlist_student(code, student.id) with db.engine.connect() as conn: sql = select([db.course_student.c.course_id]).where(db.course_student.c.student_id == id) rs = conn.execute(sql) assert rs.first()[db.course_student.c.course_id] == id course = db.select_courses_student(student.id) assert len(course) ==1 assert course[0].name == "'öäasöä1ÅÄÖÅÄÅÖÄÅÖö23å231äl23ölasäösä" assert course[0].description == "äöääöäpläplpä21äl.masalöas"
def view_course(course_id): app.logger.info("user " + str(current_user.get_id()) + " accessing index for course " + str(course_id)) if current_user.role == "USER": course = db.select_course_details(course_id, current_user.get_id()) db.set_assignments(course) course.set_timezones("Europe/Helsinki") teacher = None if course is not None: teacher = db.get_user_by_id(course.teacher_id) return render_template("/student/course.html", course=course, teacher=teacher) elif request.args.get("s") == "1": course = db.select_course_details(course_id, current_user.get_id(), is_student=False) db.set_assignments(course) course.set_timezones("Europe/Helsinki") teacher = None if course is not None: teacher = db.get_user_by_id(course.teacher_id) return render_template("/student/course.html", course=course, teacher=teacher) else: course = db.select_course_details(course_id, current_user.get_id(), is_student=False) db.set_assignments(course) course.set_timezones("Europe/Helsinki") teacher = None if course is not None: teacher = db.get_user_by_id(course.teacher_id) return render_template("/teacher/course/course.html", id=course_id, teacher=teacher)
def grade_student(course_id, assignment_id, task_id, student_id): app.logger.info("grading student %s, task %s", student_id, task_id) assignment = db.select_assignment(assignment_id, task_id=task_id) student_list = session.get("next_list") this_student = db.get_user_by_id(student_id) student_dic = db.select_submits([student_id], [task_id], set_feedback=True).get(int(student_id)) if student_dic: submit = student_dic.get(int(task_id)) else: submit = None if not student_list: submits = db.get_all_submits(assignment_id, task_id=task_id, convert_to_timezone="Europe/Helsinki") all_students = db.select_students(course_id, current_user.get_id()) student_ids_with_submits = [ s.id for s in all_students if submits.get(s.id) ] student_ids_with_submits.append("id" + str(task_id)) session["next_list"] = student_ids_with_submits student_list = student_ids_with_submits if int(student_list[len(student_list) - 1][2:]) == int(task_id): student_id = find_next_student(student_list, student_id) if student_id is not None: next_url = url_for("grade_student", course_id=course_id, assignment_id=assignment_id, task_id=task_id, student_id=student_id) else: next_url = url_for("task_overview", course_id=course_id, assignment_id=assignment_id, task_id=task_id) task = assignment.tasks[0] feedback = db.select_feedback(current_user.get_id(), submit_id=submit.id) return render_template("/teacher/grade/task.html", feedback=feedback, assignment=assignment, task=task, next_url=next_url, submit=submit, this_student=this_student, comment_target="s:" + str(submit.id))
def test_large_course_signup(db_test_client): from application import db from .user_test import test_weird_chars_large_set ids = test_weird_chars_large_set(db_test_client, random_roles=False) now = datetime.datetime.now() courses = [] teacher_courses = {} accs = [] for id in ids: acc = db.get_user_by_id(id) assert acc.id == id assert acc.role == "TEACHER" or acc.role=="USER" accs.append(acc) if acc.role == "TEACHER": teacher_courses[id] = [] for _ in range(random.randint(14,16)): name = get_random_unicode(10) description = get_random_unicode(20) random_time = now + datetime.timedelta(days=random.randint(0, 30)) c = Course(name, description, random_time, teacher_id=id) course_id, code = db.insert_course(c, id) c.id = course_id c.code = code assert c.teacher_id is not None courses.append(c) teacher_courses[id].append(c) student_enlists = {} for acc in accs: if acc.role == "USER": student_enlists[acc.id]=[] enlists = random.sample(courses, k=random.randint( len(courses)//2, len(courses)-1 )) for c in enlists: student_enlists[acc.id].append(c) db.enlist_student(c.code, acc.id) for acc in accs: if acc.role =="TEACHER": courses = db.select_courses_teacher(acc.id) real = teacher_courses[acc.id] assert len(real) == len(courses) assert len(real) > 10 case = unittest.TestCase() case.assertCountEqual(courses, real) for c in courses: assert c.teacher_id == acc.id assert c in real, str(c)+" not found in"+", ".join(str(a) for a in real) for c in real: assert c in courses, str(c)+" not found in"+", ".join(str(c) for c in real) else: courses = db.select_courses_student(acc.id) real = student_enlists[acc.id] assert len(real) == len(courses) assert len(real) > 6 case = unittest.TestCase() case.assertCountEqual(courses, real) for c in courses: assert c.teacher_id is not None assert c in real, str(c)+"not found in"+", ".join(str(c) for c in real) for c in real: assert c in courses, str(c)+"not found in"+", ".join(str(c) for c in real)