Skip to content

Commit

Permalink
Merge pull request #161 from TireSwingSoftware/issue/134
Browse files Browse the repository at this point in the history
Review changes for Issue/134
  • Loading branch information
mhrivnak committed Apr 14, 2012
2 parents 15b0eb3 + 79479e4 commit 69f72a0
Show file tree
Hide file tree
Showing 9 changed files with 920 additions and 912 deletions.
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

0 comments on commit 69f72a0

Please sign in to comment.