Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,5 @@ before_script:
script:
- "make test"
- "python manage.py makemessages -l eo"
branches:
only:
- master
- ora-staff-grading
after_success:
coveralls
2 changes: 1 addition & 1 deletion openassessment/assessment/test/test_assessment_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ def _rubric_with_all_feedback_only_criteria(self):
return rubric_from_dict(rubric_dict)

@ddt.file_data('data/models_check_criteria_assessed.json')
def test_check_all_criteria_assessed(self, data):
def test_check_all_criteria_assessed(self, **data):
student_item = {
'student_id': u'𝖙𝖊𝖘𝖙 𝖚𝖘𝖊𝖗',
'item_id': 'test_item',
Expand Down
4 changes: 2 additions & 2 deletions openassessment/assessment/test/test_peer.py
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ def test_create_huge_per_criterion_feedback_error(self):
self.assertEqual(len(part.feedback), Assessment.MAX_FEEDBACK_SIZE)

@file_data('data/valid_assessments.json')
def test_get_assessments(self, assessment_dict):
def test_get_assessments(self, **assessment_dict):
self._create_student_and_submission("Tim", "Tim's answer")
bob_sub, bob = self._create_student_and_submission("Bob", "Bob's answer")
sub = peer_api.get_submission_to_assess(bob_sub['uuid'], 3)
Expand All @@ -326,7 +326,7 @@ def test_get_assessments(self, assessment_dict):
self.assertEqual(1, len(assessments))

@file_data('data/valid_assessments.json')
def test_get_assessments_with_date(self, assessment_dict):
def test_get_assessments_with_date(self, **assessment_dict):
self._create_student_and_submission("Tim", "Tim's answer")
bob_sub, bob = self._create_student_and_submission("Bob", "Bob's answer")
sub = peer_api.get_submission_to_assess(bob_sub['uuid'], 3)
Expand Down
5 changes: 2 additions & 3 deletions openassessment/assessment/test/test_staff.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
from django.db import DatabaseError
from django.test.utils import override_settings
from django.utils.timezone import now
from ddt import ddt, data, file_data, unpack
from nose.tools import raises
from ddt import ddt, data, unpack

from .constants import OPTIONS_SELECTED_DICT, RUBRIC, RUBRIC_OPTIONS, RUBRIC_POSSIBLE_POINTS, STUDENT_ITEM
from openassessment.assessment.test.test_ai import (
Expand All @@ -20,7 +19,7 @@
from openassessment.assessment.api import staff as staff_api, ai as ai_api, peer as peer_api
from openassessment.assessment.api.self import create_assessment as self_assess
from openassessment.assessment.api.peer import create_assessment as peer_assess
from openassessment.assessment.models import Assessment, PeerWorkflow, StaffWorkflow
from openassessment.assessment.models import Assessment, StaffWorkflow
from openassessment.assessment.errors import StaffAssessmentRequestError, StaffAssessmentInternalError
from openassessment.workflow import api as workflow_api
from submissions import api as sub_api
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ def test_assess_training_example_num_queries(self):
training_api.assess_training_example(self.submission_uuid, EXAMPLES[0]['options_selected'])

@ddt.file_data('data/validate_training_examples.json')
def test_validate_training_examples(self, data):
def test_validate_training_examples(self, **data):
errors = training_api.validate_training_examples(
data['rubric'], data['examples']
)
Expand Down
2 changes: 1 addition & 1 deletion openassessment/tests/test_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ class CsvWriterTest(TransactionCacheResetTest):
maxDiff = None

@ddt.file_data('data/write_to_csv.json')
def test_write_to_csv(self, data):
def test_write_to_csv(self, **data):
# Create in-memory buffers for the CSV file data
output_streams = self._output_streams(data['expected_csv'].keys())

Expand Down
29 changes: 14 additions & 15 deletions openassessment/workflow/test/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
class TestAssessmentWorkflowApi(CacheResetTest):

@ddt.file_data('data/assessments.json')
def test_create_workflow(self, data):
def test_create_workflow(self, **data):
first_step = data["steps"][0] if data["steps"] else "peer"
if "ai" in data["steps"]:
first_step = data["steps"][1] if len(data["steps"]) > 1 else "waiting"
Expand Down Expand Up @@ -191,7 +191,7 @@ def test_update_peer_workflow(self):
self.assertIsNotNone(peer_workflow)

@ddt.file_data('data/assessments.json')
def test_need_valid_submission_uuid(self, data):
def test_need_valid_submission_uuid(self, **data):
# submission doesn't exist
with self.assertRaises(workflow_api.AssessmentWorkflowRequestError):
workflow = workflow_api.create_workflow("xxxxxxxxxxx", data["steps"], ON_INIT_PARAMS)
Expand Down Expand Up @@ -232,17 +232,17 @@ def test_ai_on_init_failures(self, mock_on_init):
submission = sub_api.create_submission(ITEM_1, ANSWER_2)
workflow_api.create_workflow(submission["uuid"], ["ai"], ON_INIT_PARAMS)

@patch.object(Submission.objects, 'get')
@ddt.file_data('data/assessments.json')
@patch.object(Submission.objects, 'get')
@raises(workflow_api.AssessmentWorkflowInternalError)
def test_unexpected_submissions_errors_wrapped(self, data, mock_get):
def test_unexpected_submissions_errors_wrapped(self, mock_get, **data):
mock_get.side_effect = Exception("Kaboom!")
workflow_api.create_workflow("zzzzzzzzzzzzzzz", data["steps"], ON_INIT_PARAMS)

@patch.object(AssessmentWorkflow.objects, 'create')
@ddt.file_data('data/assessments.json')
@patch.object(AssessmentWorkflow.objects, 'create')
@raises(workflow_api.AssessmentWorkflowInternalError)
def test_unexpected_workflow_errors_wrapped(self, data, mock_create):
def test_unexpected_workflow_errors_wrapped(self, mock_create, **data):
mock_create.side_effect = DatabaseError("Kaboom!")
submission = sub_api.create_submission(ITEM_1, ANSWER_2)
workflow_api.create_workflow(submission["uuid"], data["steps"], ON_INIT_PARAMS)
Expand Down Expand Up @@ -287,29 +287,28 @@ def test_no_peer_assessment_error_handled(self, mock_get_workflow, mock_get_staf
override_submitter_requirements=True
)

@patch.object(AssessmentWorkflow.objects, 'get')
@ddt.file_data('data/assessments.json')
@patch.object(AssessmentWorkflow.objects, 'get')
@raises(workflow_api.AssessmentWorkflowInternalError)
def test_unexpected_exception_wrapped(self, data, mock_create):
def test_unexpected_exception_wrapped(self, mock_create, **data):
mock_create.side_effect = Exception("Kaboom!")
submission = sub_api.create_submission(ITEM_1, ANSWER_2)
workflow_api.update_from_assessments(submission["uuid"], data["steps"])

@ddt.file_data('data/assessments.json')
def test_get_assessment_workflow_expected_errors(self, data):
def test_get_assessment_workflow_expected_errors(self, **data):
with self.assertRaises(workflow_api.AssessmentWorkflowNotFoundError):
workflow_api.get_workflow_for_submission("0000000000000", data["requirements"])
with self.assertRaises(workflow_api.AssessmentWorkflowRequestError):
workflow_api.get_workflow_for_submission(123, data["requirements"])

@patch.object(Submission.objects, 'get')
@ddt.file_data('data/assessments.json')
@raises(workflow_api.AssessmentWorkflowInternalError)
def test_unexpected_workflow_get_errors_wrapped(self, data, mock_get):
mock_get.side_effect = Exception("Kaboom!")
submission = sub_api.create_submission(ITEM_1, "We talk TV!")
workflow = workflow_api.create_workflow(submission["uuid"], data["steps"], ON_INIT_PARAMS)
workflow_api.get_workflow_for_submission(workflow["uuid"], {})
def test_unexpected_workflow_get_errors_wrapped(self, **data):
with patch.object(Submission.objects, 'get', side_effect=Exception):
submission = sub_api.create_submission(ITEM_1, "We talk TV!")
workflow = workflow_api.create_workflow(submission["uuid"], data["steps"], ON_INIT_PARAMS)
workflow_api.get_workflow_for_submission(workflow["uuid"], {})

def test_preexisting_workflow(self):
"""
Expand Down
2 changes: 1 addition & 1 deletion openassessment/xblock/test/test_grade.py
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ def test_assessment_does_not_match_rubric(self, xblock):

@ddt.file_data('data/waiting_scenarios.json')
@scenario('data/grade_waiting_scenario.xml', user_id='Omar')
def test_grade_waiting(self, xblock, data):
def test_grade_waiting(self, xblock, **data):
# If AI classifiers are not trained, then we should see a "waiting for AI" display
if not data["waiting_for_ai"]:
with mock.patch.object(
Expand Down
2 changes: 1 addition & 1 deletion openassessment/xblock/test/test_resolve_dates.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def setUp(self):
self.DATE_STRINGS[None] = None

@ddt.file_data('data/resolve_dates.json')
def test_resolve_dates(self, data):
def test_resolve_dates(self, **data):

# Test data provides indices into our date dictionaries
resolved_start, resolved_end, resolved_ranges = resolve_dates(
Expand Down
12 changes: 6 additions & 6 deletions openassessment/xblock/test/test_student_training.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ class StudentTrainingAssessTest(StudentTrainingTest):

@scenario('data/student_training.xml', user_id="Plato")
@ddt.file_data('data/student_training_mixin.json')
def test_correct(self, xblock, data):
def test_correct(self, xblock, **data):
xblock.create_submission(xblock.get_student_item_dict(), self.SUBMISSION)
data["expected_context"]['time_zone'] = pytz.utc
self.assert_path_and_context(xblock, data["expected_template"], data["expected_context"])
Expand All @@ -85,7 +85,7 @@ def test_correct(self, xblock, data):

@scenario('data/student_training.xml', user_id="Plato")
@ddt.file_data('data/student_training_mixin.json')
def test_correct_with_error(self, xblock, data):
def test_correct_with_error(self, xblock, **data):
xblock.create_submission(xblock.get_student_item_dict(), self.SUBMISSION)
data["expected_context"]['time_zone'] = pytz.utc
self.assert_path_and_context(xblock, data["expected_template"], data["expected_context"])
Expand All @@ -109,7 +109,7 @@ def test_correct_with_error(self, xblock, data):

@scenario('data/student_training.xml', user_id="Plato")
@ddt.file_data('data/student_training_mixin.json')
def test_incorrect(self, xblock, data):
def test_incorrect(self, xblock, **data):
xblock.create_submission(xblock.get_student_item_dict(), self.SUBMISSION)
data["expected_context"]['time_zone'] = pytz.utc
self.assert_path_and_context(xblock, data["expected_template"], data["expected_context"])
Expand All @@ -130,7 +130,7 @@ def test_incorrect(self, xblock, data):

@scenario('data/student_training.xml', user_id="Plato")
@ddt.file_data('data/student_training_mixin.json')
def test_updates_workflow(self, xblock, data):
def test_updates_workflow(self, xblock, **data):
expected_context = data["expected_context"].copy()
expected_template = data["expected_template"]
xblock.create_submission(xblock.get_student_item_dict(), self.SUBMISSION)
Expand Down Expand Up @@ -209,7 +209,7 @@ def test_feedback_only_criterion(self, xblock):

@scenario('data/student_training.xml', user_id="Plato")
@ddt.file_data('data/student_training_mixin.json')
def test_request_error(self, xblock, data):
def test_request_error(self, xblock, **data):
xblock.create_submission(xblock.get_student_item_dict(), self.SUBMISSION)
expected_context = data["expected_context"].copy()
expected_template = data["expected_template"]
Expand All @@ -226,7 +226,7 @@ def test_request_error(self, xblock, data):

@scenario('data/student_training.xml', user_id="Plato")
@ddt.file_data('data/student_training_mixin.json')
def test_invalid_options_dict(self, xblock, data):
def test_invalid_options_dict(self, xblock, **data):
xblock.create_submission(xblock.get_student_item_dict(), self.SUBMISSION)
expected_context = data["expected_context"].copy()
expected_template = data["expected_template"]
Expand Down
6 changes: 3 additions & 3 deletions openassessment/xblock/test/test_studio.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ def test_render_studio_with_ai(self, xblock):

@file_data('data/update_xblock.json')
@scenario('data/basic_scenario.xml')
def test_update_editor_context(self, xblock, data):
def test_update_editor_context(self, xblock, **data):
xblock.runtime.modulestore = MagicMock()
xblock.runtime.modulestore.has_published_version.return_value = False
resp = self.request(xblock, 'update_editor_context', json.dumps(data), response_format='json')
Expand Down Expand Up @@ -192,7 +192,7 @@ def test_update_editor_context_saves_leaderboard(self, xblock):

@file_data('data/invalid_update_xblock.json')
@scenario('data/basic_scenario.xml')
def test_update_context_invalid_request_data(self, xblock, data):
def test_update_context_invalid_request_data(self, xblock, **data):
# All schema validation errors have the same error message, so use that as the default
# Remove the expected error from the dictionary so we don't get an unexpected key error.
if 'expected_error' in data:
Expand All @@ -208,7 +208,7 @@ def test_update_context_invalid_request_data(self, xblock, data):

@file_data('data/invalid_rubric.json')
@scenario('data/basic_scenario.xml')
def test_update_rubric_invalid(self, xblock, data):
def test_update_rubric_invalid(self, xblock, **data):
request = json.dumps(data)

# Store old XBlock fields for later verification
Expand Down
20 changes: 10 additions & 10 deletions openassessment/xblock/test/test_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@
class AssessmentValidationTest(TestCase):

@ddt.file_data('data/valid_assessments.json')
def test_valid_assessment(self, data):
def test_valid_assessment(self, **data):
success, msg = validate_assessments(
data["assessments"], data["current_assessments"], data["is_released"], STUB_I18N
)
self.assertTrue(success)
self.assertEqual(msg, u'')

@ddt.file_data('data/invalid_assessments.json')
def test_invalid_assessment(self, data):
def test_invalid_assessment(self, **data):
success, msg = validate_assessments(
data["assessments"], data["current_assessments"], data["is_released"], STUB_I18N
)
Expand All @@ -44,14 +44,14 @@ def test_no_assessments(self):

# Make sure only legal assessment combinations are allowed.
@ddt.file_data('data/assessment_combo.json')
def test_enforce_assessment_combo_restrictions(self, data):
def test_enforce_assessment_combo_restrictions(self, **data):
self._assert_validation(
data["assessments"], data["current_assessments"],
data["is_released"], data['valid']
)

@ddt.file_data('data/student_training_combo.json')
def test_student_training_combos(self, data):
def test_student_training_combos(self, **data):
self._assert_validation(
data["assessments"], data["current_assessments"],
data["is_released"], data['valid']
Expand Down Expand Up @@ -86,7 +86,7 @@ def _assert_validation(self, assessments, current_assessments, is_released, expe
class RubricValidationTest(TestCase):

@ddt.file_data('data/valid_rubrics.json')
def test_valid_rubric(self, data):
def test_valid_rubric(self, **data):
current_rubric = data.get('current_rubric')
is_released = data.get('is_released', False)
is_example_based = data.get('is_example_based', False)
Expand All @@ -101,7 +101,7 @@ def test_valid_rubric(self, data):
self.assertEqual(msg, u'')

@ddt.file_data('data/invalid_rubrics.json')
def test_invalid_rubric(self, data):
def test_invalid_rubric(self, **data):
current_rubric = data.get('current_rubric')
is_released = data.get('is_released', False)
is_example_based = data.get('is_example_based', False)
Expand All @@ -116,13 +116,13 @@ def test_invalid_rubric(self, data):
class AssessmentExamplesValidationTest(TestCase):

@ddt.file_data('data/valid_assessment_examples.json')
def test_valid_assessment_examples(self, data):
def test_valid_assessment_examples(self, **data):
success, msg = validate_assessment_examples(data['rubric'], data['assessments'], STUB_I18N)
self.assertTrue(success)
self.assertEqual(msg, u'')

@ddt.file_data('data/invalid_assessment_examples.json')
def test_invalid_assessment_examples(self, data):
def test_invalid_assessment_examples(self, **data):
success, msg = validate_assessment_examples(data['rubric'], data['assessments'], STUB_I18N)
self.assertFalse(success)
self.assertGreater(len(msg), 0)
Expand All @@ -148,7 +148,7 @@ def setUp(self):
# from the LMS, thus bypassing our validation rules.
# See the docstring for `resolve_dates` for a more detailed justification.
@ddt.file_data('data/valid_dates.json')
def test_valid_dates(self, data):
def test_valid_dates(self, **data):

# Input data dict specifies the index for each date
date = lambda key: self.DATES[data[key]]
Expand All @@ -170,7 +170,7 @@ def test_valid_dates(self, data):
self.assertEqual(msg, u'')

@ddt.file_data('data/invalid_dates.json')
def test_invalid_dates(self, data):
def test_invalid_dates(self, **data):
# Input data dict specifies the index for each date
date = lambda key: self.DATES[data[key]]

Expand Down
Loading