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
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
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
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
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]))
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
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
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
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'
def add_test_data(app): grader1 = Grader(oauth_id='grader') db.session.add(grader1) db.session.commit()
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()