Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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"
Пример #5
0
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)
Пример #6
0
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))
Пример #7
0
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)