def test_get_todo_list(self): user = UserNode(uid='test_get_todo_list').save() task1 = user.create_task('t1') task2 = user.create_task('t2') task3 = user.create_task('t3') self.assertEqual([], user.get_todo_list()) task1.status = STATUS.IN_PROGRESS task2.status = STATUS.IN_PROGRESS task3.status = STATUS.COMPLETED task1.save() task2.save() task3.save() step1_1 = StepInst(name='s1_1', status=STATUS.COMPLETED).save() step1_2 = StepInst(name='s1_2', status=STATUS.IN_PROGRESS).save() step2_1 = StepInst(name='s2_1', status=STATUS.READY_FOR_REVIEW).save() step2_2 = StepInst(name='s2_2', status=STATUS.SKIPPED).save() step3_1 = StepInst(name='s3_1', status=STATUS.IN_PROGRESS).save() step3_2 = StepInst(name='s3_2', status=STATUS.READY_FOR_REVIEW).save() task1.steps.connect(step1_1) task1.steps.connect(step1_2) task2.steps.connect(step2_1) task2.steps.connect(step2_2) task3.steps.connect(step3_1) task3.steps.connect(step3_2) todo_list = user.get_todo_list() todo_set = set(todo['task']['tid'] + todo['step']['sid'] for todo in todo_list) self.assertEqual(2, len(todo_set)) self.assertIn(task1.tid + step1_2.sid, todo_set) self.assertIn(task2.tid + step2_1.sid, todo_set)
def test_get_todo_list_with_role(self): user = UserNode(uid='test_get_todo_list_with_role').save() task = user.create_task('task', { 'status': STATUS.IN_PROGRESS, 'roles': ['teacher', 'student', 'parent'] }) step1 = StepInst(name='s1', status=STATUS.IN_PROGRESS, assignees=['student', 'parent'], reviewers=['student', 'teacher']).save() step2 = StepInst(name='s2', status=STATUS.READY_FOR_REVIEW, assignees=['student', 'parent'], reviewers=['student', 'teacher']).save() step3 = StepInst(name='s3', status=STATUS.IN_PROGRESS, assignees=['parent'], reviewers=['teacher']).save() step4 = StepInst(name='s4', status=STATUS.IN_PROGRESS, assignees=['parent'], reviewers=['teacher']).save() task.steps.connect(step1) task.steps.connect(step2) task.steps.connect(step3) task.steps.connect(step4) user.change_role(task, user, 'student') todo_list = user.get_todo_list() todo_set = set(todo['step']['sid'] for todo in todo_list) self.assertEqual(2, len(todo_set)) self.assertIn(step1.sid, todo_set) self.assertIn(step2.sid, todo_set)
def test_has_higher_permission(self): user1 = UserNode(uid='user1').save() user2 = UserNode(uid='user2').save() task = user1.create_task('sample task') user2.tasks.connect(task, {'acceptance': ACCEPTANCE.ACCEPT}) with self.assertRaises(BadRequest): user2.assert_has_higher_permission(task, user1)
def test_assert_no_user(self): user = UserNode(uid='abc').save() task = user.create_task(name='name') with self.assertRaises(BadRequest): task.assert_no_user() task = TaskInst(name='name').save() task.assert_no_user()
def test_change_task_owner(self): user1 = UserNode(uid='test_change_task_owner_1').save() task = user1.create_task('task') user2 = UserNode(uid='test_change_task_owner_2').save() user2.tasks.connect(task) with self.assertRaises(NotAccept): user1.change_super_role(task, user2, SUPER_ROLE.OWNER) user2.respond_invitation(task, ACCEPTANCE.ACCEPT) user1.change_super_role(task, user2, SUPER_ROLE.OWNER) user1_has_task = user1.tasks.relationship(task) user2_has_task = user2.tasks.relationship(task) self.assertEqual(SUPER_ROLE.ADMIN, user1_has_task.super_role) self.assertEqual(SUPER_ROLE.OWNER, user2_has_task.super_role)
def test_revoke_invitation(self, mock_assert_has_task, mock_assert_accept, mock_assert_has_higher_permission): user1 = UserNode(uid='user3').save() user2 = UserNode(uid='user4').save() task = user1.create_task('sample task') user2.tasks.connect(task) user1.revoke_invitation(task, user2) self.assertEqual(mock_assert_has_task.call_count, 2) mock_assert_has_task.called_with(user1, task) mock_assert_has_task.called_with(user2, task) mock_assert_accept.assert_called_once_with(task) mock_assert_has_higher_permission.assert_called_once_with(task, user2)
def test_change_role(self): user = UserNode(uid='test_change_role').save() task = user.create_task('task', {'roles': ['teacher', 'student']}) user_has_task = user.tasks.relationship(task) user_has_task.super_role = SUPER_ROLE.STANDARD user_has_task.save() with self.assertRaises(NotAdmin): user.change_role(task, user, 'teacher') user_has_task.super_role = SUPER_ROLE.ADMIN user_has_task.save() user.change_role(task, user, 'teacher') user_has_task = user.tasks.relationship(task) self.assertEqual('teacher', user_has_task.role) with self.assertRaises(NoSuchRole): user.change_role(task, user, 'parent')
def test_create_task(self): user = UserNode(uid='user node test uid').save() task = user.create_task('sample task') self.assertEqual('sample task', task.name) self.assertTrue(user.tasks.is_connected(task)) has_task = user.tasks.relationship(task) self.assertEqual(SUPER_ROLE.OWNER, has_task.super_role) self.assertEqual(None, has_task.role) self.assertEqual(ACCEPTANCE.ACCEPT, has_task.acceptance) steps = task.steps self.assertEqual(2, len(steps)) start = steps.get(name='Start') end = steps.get(name='End') self.assertEqual(NODE_TYPE.START, start.node_type) self.assertEqual(NODE_TYPE.END, end.node_type)
def test_clone(self, mock_get_user): user = UserNode(uid='sample').save() task = user.create_task('task') task.status = STATUS.IN_PROGRESS step = StepInst(name='step', status=STATUS.IN_PROGRESS).save() start = task.steps.get(node_type=NODE_TYPE.START) end = task.steps.get(node_type=NODE_TYPE.END) start.nexts.connect(step) step.nexts.connect(end) task.steps.connect(step) new_task = task.clone() self.assertEqual(new_task.name, task.name) self.assertEqual(new_task.status, STATUS.NEW) new_start = new_task.steps.get(node_type=NODE_TYPE.START) new_step = new_task.steps.get(node_type=NODE_TYPE.NORMAL) new_end = new_task.steps.get(node_type=NODE_TYPE.END) self.assertEqual(new_step.name, 'step') self.assertEqual(new_step.status, STATUS.NEW) self.assertTrue(new_start.nexts.is_connected(new_step)) self.assertTrue(new_step.nexts.is_connected(new_end))