def test_refuse_mission_because_robot_is_busy(self):
        tm = TaskManager(skills=[self.skill_generator()])

        response = tm.assign_mission_service_handler(goals=[
            self.test_goal_generator(),
            self.test_goal_generator(),
            self.test_goal_generator()
        ])
        acceptedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='True', reasonOfRefusal='None')

        self.assertEquals(response, acceptedResponse)
        self.assertEquals(len(tm.ongoingTasks), 3)

        response = tm.assign_mission_service_handler(goals=[
            self.test_goal_generator(),
            self.test_goal_generator(),
            self.test_goal_generator()
        ])
        refusedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='False',
            reasonOfRefusal=
            "Robot is currently busy with 3 tasks: ['example-skill', 'example-skill', 'example-skill']"
        )

        self.assertEquals(response, refusedResponse)
        self.assertEquals(len(tm.ongoingTasks), 3)
    def test_refused_because_empty_goals(self):
        tm = TaskManager(skills=[self.skill_generator()])

        response = tm.assign_mission_service_handler(goals=[])
        refusedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='False', reasonOfRefusal='Empty goals!')

        self.assertEquals(response, refusedResponse)
        self.assertEquals(len(tm.ongoingTasks), 0)
    def test_refused_because_different_robotId(self):
        tm = TaskManager(skills=[self.skill_generator()])

        response = tm.assign_mission_service_handler(
            robotId='differentRobotId')
        refusedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='False', reasonOfRefusal='Different robotId!')

        self.assertEquals(response, refusedResponse)
        self.assertEquals(len(tm.ongoingTasks), 0)
    def test_accepted_simple_mission(self):
        tm = TaskManager(skills=[self.skill_generator()])

        response = tm.assign_mission_service_handler(
            goals=[self.test_goal_generator()])
        acceptedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='True', reasonOfRefusal='None')

        self.assertEquals(response, acceptedResponse)
        self.assertEquals(len(tm.ongoingTasks), 1)
    def test_refused_bad_syntax_goal(self):
        tm = TaskManager(skills=[self.skill_generator()])

        response = tm.assign_mission_service_handler(
            goals=['example-skill;exampleSkillProperty0'])
        refusedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='False',
            reasonOfRefusal=
            'Badly formatted goal (example-skill;exampleSkillProperty0): need more than 1 value to unpack'
        )

        self.assertEquals(response, refusedResponse)
        self.assertEquals(len(tm.ongoingTasks), 0)
    def test_execute_mission_called_for_simple_mission(self, mock):
        tm = TaskManager(skills=[self.skill_generator()])

        response = tm.assign_mission_service_handler(goals=[
            self.test_goal_generator(),
            self.test_goal_generator(),
            self.test_goal_generator()
        ],
                                                     executeMission=True)
        self.assertTrue(mock.called)

        acceptedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='True', reasonOfRefusal='None')

        self.assertEquals(response, acceptedResponse)
        self.assertEquals(len(tm.ongoingTasks), 3)
    def test_accepted_complex_mission(self):
        tm = TaskManager(skills=[
            self.skill_generator(),
            self.skill_generator(
                skillName='drive',
                skillType='DriveSkill',
                skillClass='DriveSkill',
                skillProperties=['toObjectId', 'toObjectType'])
        ])

        response = tm.assign_mission_service_handler(goals=[
            self.test_goal_generator(),
            'drive;toObjectId=testToObjectId;toObjectType=testToObjectType'
        ])
        acceptedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='True', reasonOfRefusal='None')

        self.assertEquals(response, acceptedResponse)
        self.assertEquals(len(tm.ongoingTasks), 2)