Exemple #1
0
def add_test_submissions(app):
    student = Student(first_name='Harry', last_name='Lewis')
    student2 = Student(first_name='bob', last_name='alice')
    student3 = Student(first_name='Charlie', last_name='Bob')

    grader = Grader(id=1, name='Zesje', oauth_id='Zesje')
    grader2 = Grader(id=2, name='Alice', oauth_id='Smith')

    sub = Submission(id=25, student=student, exam_id=42)
    sub2 = Submission(id=26, student=student2, exam_id=42)
    sub3 = Submission(id=27, student=student3, exam_id=42)

    sol = Solution(problem_id=20,
                   submission=sub,
                   graded_by=grader,
                   graded_at=datetime.now())
    db.session.add(sol)
    sol2 = Solution(problem_id=20,
                    submission=sub2,
                    graded_by=grader2,
                    graded_at=datetime.now())
    db.session.add(sol2)
    sol3 = Solution(problem_id=20,
                    submission=sub3,
                    graded_by=grader2,
                    graded_at=datetime.now())
    db.session.add(sol3)
    yield app
Exemple #2
0
def test_find_length(add_test_data, get_first_feedback, get_second_feedback):
    student = Student(first_name='Harry', last_name='Lewis')
    student2 = Student(first_name='bob', last_name='alice')
    student3 = Student(first_name='Charlie', last_name='Bob')

    grader = Grader(id=1, name='Zesje', oauth_id='Zesje')
    grader2 = Grader(id=2, name='Alice', oauth_id='Smith')

    sub = Submission(id=25, student=student, exam_id=42)
    sub2 = Submission(id=26, student=student2, exam_id=42)
    sub3 = Submission(id=27, student=student3, exam_id=42)

    sol = Solution(problem_id=20,
                   submission=sub,
                   graded_by=grader,
                   graded_at=datetime.now())
    db.session.add(sol)
    sol2 = Solution(problem_id=20,
                    submission=sub2,
                    graded_by=grader2,
                    graded_at=datetime.now())
    db.session.add(sol2)
    sol3 = Solution(problem_id=20,
                    submission=sub3,
                    graded_by=grader2,
                    graded_at=datetime.now())
    db.session.add(sol3)

    sol.feedback = get_first_feedback
    sol2.feedback = get_second_feedback
    sol3.feedback = get_first_feedback

    result = find_number_of_matches(Problem.query.get(20), False, [1], [], 2)
    assert result == 1
Exemple #3
0
def test_find_next(add_test_data, get_first_feedback, get_second_feedback):
    student = Student(first_name='', last_name='')
    student2 = Student(first_name='bob', last_name='alice')

    grader = Grader(name='Zesje', oauth_id='Zesje')

    sub = Submission(id=25, student=student, exam_id=42)
    sub2 = Submission(id=26, student=student2, exam_id=42)

    sol = Solution(problem_id=20,
                   submission=sub,
                   graded_by=grader,
                   graded_at=datetime.now())
    db.session.add(sol)
    sol2 = Solution(problem_id=20,
                    submission=sub2,
                    graded_by=grader,
                    graded_at=datetime.now())
    db.session.add(sol2)

    sol.feedback = get_first_feedback
    sol2.feedback = get_second_feedback

    result = _find_submission(sub, Problem.query.get(20), 1, 'next', False,
                              set([3]), set([2]), None)
    assert result == sub2
Exemple #4
0
def add_test_data(app):
    """Adds test data to the db.

    The feedback tree for problem 1 is (+: non-exlcusive; -: exclusive):
    + root(id=0)
        + A(id=1)
            + A1(id=11)
            + A2(id=12)
        + B(id=2)
            - B1(id=21)
            - B2(id=22)
    """
    exam = Exam(id=1, name='exam', finalized=True, layout="unstructured")
    db.session.add(exam)

    problem = Problem(id=1, name='Problem', exam=exam)
    db.session.add(problem)

    student = Student(id=1, first_name='Harry', last_name='Lewis')
    db.session.add(student)

    grader = Grader(id=1, name='Zesje', oauth_id='Zesje')
    db.session.add(grader)

    sub = Submission(id=1, student=student, exam=exam)
    db.session.add(sub)

    sol = Solution(id=1, submission=sub, problem=problem)
    db.session.add(sol)
    db.session.commit()

    root = problem.root_feedback

    for i in range(2):
        fo_parent = FeedbackOption(id=i + 1,
                                   problem=problem,
                                   text=chr(i + 65),
                                   description='',
                                   score=i,
                                   parent=root,
                                   mut_excl_children=i == 1)
        db.session.add(fo_parent)
        db.session.commit()
        for j in range(1, 3):
            fo = FeedbackOption(id=(i + 1) * 10 + j,
                                problem=problem,
                                text=chr(i + 65) + chr(j + 65),
                                description='',
                                score=-1 * i * j,
                                parent_id=i + 1)
            db.session.add(fo)

    db.session.commit()

    yield app
Exemple #5
0
def test_has_all_required(get_first_feedback):
    student = Student(first_name='', last_name='')
    grader = Grader(name='Zesje', oauth_id='Zesje')
    sub = Submission(student=student, exam_id=42)
    sol = Solution(problem_id=20,
                   submission=sub,
                   graded_by=grader,
                   graded_at=datetime.now())
    sol.feedback = get_first_feedback

    assert has_all_required_feedback(sol, set([1, 2]), set([3]))
Exemple #6
0
def test_find_next_graded_by(add_test_data):
    student = Student(first_name='', last_name='')
    student2 = Student(first_name='bob', last_name='alice')

    grader = Grader(id=1, name='Zesje', oauth_id='Zesje')
    grader2 = Grader(id=2, name='Alice', oauth_id='Smith')

    sub = Submission(id=25, student=student, exam_id=42)
    sub2 = Submission(id=26, student=student2, exam_id=42)

    sol = Solution(problem_id=20,
                   submission=sub,
                   graded_by=grader,
                   graded_at=datetime.now())
    db.session.add(sol)
    sol2 = Solution(problem_id=20,
                    submission=sub2,
                    graded_by=grader2,
                    graded_at=datetime.now())
    db.session.add(sol2)

    result = _find_submission(sub, Problem.query.get(20), 1, 'next', False,
                              set(), set(), 2)
    assert result == sub2
Exemple #7
0
def test_delete_problem_graded(test_client, add_test_data, exam_id,
                               problem_id):
    student = Student(first_name='', last_name='')
    db.session.add(student)
    grader = Grader(name='Zesje', oauth_id='zesje')
    db.session.add(grader)
    db.session.commit()
    sub = Submission(student=student, exam_id=exam_id)
    db.session.add(sub)
    db.session.commit()
    sol = Solution(problem_id=problem_id,
                   submission=sub,
                   graded_by=grader,
                   graded_at=datetime.now())
    db.session.add(sol)
    db.session.commit()

    result = test_client.delete(f'/api/problems/{problem_id}')

    assert result.status_code == 403
    assert Problem.query.get(problem_id) is not None
Exemple #8
0
def create_exams(app,
                 client,
                 exams,
                 layout,
                 pages,
                 students,
                 graders,
                 solve,
                 grade,
                 validate,
                 multiple_copies,
                 skip_processing=False):

    client.get('/api/oauth/start')
    # create graders
    for _ in range(max(1, graders)):
        name = names.get_full_name()
        email = '.'.join(name.split(' ')).lower() + '@fake.tudelft.nl'
        grader = Grader(name=name, oauth_id=email)
        db.session.add(grader)
    db.session.commit()

    client.get('/api/oauth/callback')

    # create students
    for student in generate_students(students):
        client.put('api/students', data=student)

    generated_exams = []
    for _ in range(exams):
        generated_exams.append(design_exam(app, client, layout, max(1, pages), students, grade,
                                           solve, validate, multiple_copies, skip_processing))

    client.get('/api/oauth/logout')

    return generated_exams
Exemple #9
0
def test_internal_grader(login_app, login_client):
    db.session.add(
        Grader(name='internal', oauth_id='grader_123456789', internal=True))
    db.session.commit()

    url = login_client.get('/api/oauth/start').location
    parsed = urlparse(url)
    query = parse_qs(parsed.query)
    with requests_mock.Mocker() as m:
        m.post(login_app.config['OAUTH_TOKEN_URL'],
               json={
                   'access_token': 'test',
                   'token_type': 'Bearer'
               })
        m.get(login_app.config['OAUTH_INFO_URL'],
              json={
                  login_app.config['OAUTH_ID_FIELD']: 'grader_123456789',
                  login_app.config['OAUTH_NAME_FIELD']: 'something else'
              })
        am_i_authorised = login_client.get(
            '/api/oauth/callback?code=test&state=' + query['state'][0])

    assert am_i_authorised.headers['Location'].rsplit('/',
                                                      1)[1] == 'unauthorized'
Exemple #10
0
def add_test_data(app):
    grader1 = Grader(oauth_id='grader')
    db.session.add(grader1)

    db.session.commit()
Exemple #11
0
def add_grader(login_app):
    db.session.add(
        Grader(name=login_app.config['OWNER_NAME'],
               oauth_id=login_app.config['OWNER_OAUTH_ID']))
    db.session.commit()