Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Review changes for Issue/134 #161

Merged
merged 2 commits into from
Apr 14, 2012
Merged
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
2 changes: 2 additions & 0 deletions pr_services/credential_system/task_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class TaskManager(ObjectManager):
'max': 'get_general',
'name': 'get_general',
'organization': 'get_foreign_key',
'prerequisite_achievements': 'get_many_to_many',
'prerequisite_tasks': 'get_many_to_many',
'prevent_duplicate_assignments': 'get_general',
'remaining_capacity': 'get_general',
Expand All @@ -39,6 +40,7 @@ class TaskManager(ObjectManager):
'max': 'set_general',
'name': 'set_general',
'organization': 'set_foreign_key',
'prerequisite_achievements': 'set_many',
'prerequisite_tasks': 'set_many',
'prevent_duplicate_assignments': 'set_general',
'remaining_capacity': 'set_general',
Expand Down
14 changes: 3 additions & 11 deletions pr_services/initial_setup/create_legacy_student_group_and_role.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,14 @@ def setup(machine):
]
crud_1 = {
'Sco' : {
'c' : False,
'r' : set(('course', 'description', 'name',
'prerequisite_tasks', 'type',
'version_id', 'version_label')),
'u' : set(),
'd' : False,
},
'Task' : {
'c' : False,
'r' : set(('description', 'name', 'prerequisite_tasks',
'type', 'version_id', 'version_label')),
'u' : set(),
'd' : False,
'r' : set(('description', 'name', 'prerequisite_achievements',
'prerequisite_tasks', 'type', 'version_id',
'version_label')),
},
}
machine.add_acl_to_role('Student', methods_1, crud_1)
Expand All @@ -32,10 +27,7 @@ def setup(machine):
]
crud_2 = {
'Sco' : {
'c' : False,
'r' : set(('url', )),
'u' : set(),
'd' : False,
},
}
machine.add_acl_to_role('Student', methods_2, crud_2)
3 changes: 2 additions & 1 deletion pr_services/initial_setup/create_object_owner_role.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ def setup(machine):
'r': set(('session', 'name', 'title', 'type', 'description'))
},
'Task': {
'r': set(('name', 'title', 'type', 'description', 'achievements')),
'r': set(('name', 'title', 'type', 'description',
'achievements', 'prerequisite_achievements')),
},
'User': {
# We allow users to create themselves
Expand Down
9 changes: 2 additions & 7 deletions pr_services/initial_setup/create_task_taker_role.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,10 @@ def setup(machine):
'date_completed', 'due_date', 'prerequisites_met',
'effective_date_assigned', 'status',
'assignment_attempts')),
'u' : set(),
'd' : False,
},
'Task' : {
'c' : False,
'r' : set(('create_timestamp', 'prerequisite_tasks',
'name', 'description', 'title', 'type')),
'u' : set(),
'd' : False,
'r' : set(('description', 'name', 'prerequisite_achievements',
'prerequisite_tasks', 'title', 'type')),
},
}
machine.add_acl_to_role('Task Taker', methods, crud)
13 changes: 7 additions & 6 deletions pr_services/pr_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -876,9 +876,10 @@ def prerequisites_met(self, user):
prerequisite_task = prerequisite_task.downcast_completely()
if not prerequisite_task.completed(user):
return False
# We've checked all the prerequisite Tasks, and haven't found the User to be
# ineligible, so let's return True
return True

reqs = set(self.prerequisite_achievements.values_list('id', flat=True))
achievements = set(user.achievements.values_list('id', flat=True))
return achievements >= reqs

def save(self, *args, **kwargs):
# Create a name based on the title if present, otherwise use the content
Expand Down Expand Up @@ -1128,11 +1129,11 @@ def task_content_type(self):
@property
def prerequisites_met(self):
"""Return True iff all prerequiseties have been met"""

for task in self.task.prerequisite_tasks.all():
if task.assignments.filter(status='completed', user=self.user).count() == 0:
if not task.prerequisites_met(self.user):
return False
return True

return self.task.prerequisites_met(self.user)

def mark_completed(self):
"""
Expand Down
17 changes: 17 additions & 0 deletions pr_services/pr_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,7 @@ def test_generate_name(self):
exam3 = Exam.objects.create(name='my_exam', organization=org)
self.assertEqual(exam3.name, 'my_exam')


class TestAssignment(GeneralTestCase):

@skip('broken')
Expand Down Expand Up @@ -417,6 +418,22 @@ def test_assign_sessions(self):
self.assertEquals(len(assignments), 1)
self.assertEquals(assignments[learner8.id]['status'], 'assigned')

@load_fixtures('exams_and_achievements')
def test_required_achievements(self):
achievements = Achievement.objects.all()
exam = Exam.objects.get(id=1)
for a in achievements:
exam.prerequisite_achievements.add(a)
exam.save()

assignment = self.assignment_manager.create(exam.id, self.user1.id)
with self.assertRaises(exceptions.PermissionDeniedException):
self.assignment_attempt_manager._create(self.user1_auth_token, assignment)
for a in achievements:
AchievementAward.objects.create(user=self.user1, achievement=a)
self.user1.save()
self.assignment_attempt_manager._create(self.auth_token, assignment)


class TestMessageTypeManager(BasicTestCase):
fixtures = BasicTestCase.fixtures + ['unprivileged_user']
Expand Down
Loading