def test_check_move_status_no_id(self):
        to_test = DataMoverServices(None, None)

        out = to_test.check_move_status()
        self.assertIsNotNone(out)
        self.assertEqual(STATUS_REJECTED, out['status'])
        self.assertEqual(REASON_MISSING_PARAMS_1S.format('id'), out['reason'])
    def test_check_move_status_invalid_id(self):
        to_test = DataMoverServices(None, None)

        out = to_test.check_move_status(1234)
        self.assertIsNotNone(out)
        self.assertEqual(STATUS_REJECTED, out['status'])
        self.assertEqual(REASON_INVALID_PARAMS_1S.format('id must be a string'), out['reason'])
    def test_check_move_status(self):
        to_test = DataMoverServices(None, None)
        to_test._executor = mock.MagicMock()
        to_test._move_jobs = {}

        dest = 'scp://visualiser/some/path'
        source = 'ala://ala/?lsid=lsid'

        out = to_test.move(source, dest)

        self.assertIsNotNone(out)
        self.assertEqual(MoveJob.STATUS_PENDING, out['status'])

        id = to_test._move_jobs.keys()[0]

        out = to_test.check_move_status(id)

        self.assertIsNotNone(out)
        self.assertEqual(MoveJob.STATUS_PENDING, out['status'])
        self.assertEqual(id, out['id'])

        # job should still exists
        out = to_test.check_move_status(id)
        self.assertIsNotNone(out)
        self.assertEqual(MoveJob.STATUS_PENDING, out['status'])
        self.assertEqual(id, out['id'])

        # Now update the move job to complete.
        to_test._move_jobs[id].update(status=MoveJob.STATUS_COMPLETE)

        # Check that the status is updated to complete
        out = to_test.check_move_status(id)
        self.assertIsNotNone(out)
        self.assertEqual(MoveJob.STATUS_COMPLETE, out['status'])
        self.assertEqual(id, out['id'])

        # Do a 2nd status query, job shall not exist anymore.
        out = to_test.check_move_status(id)
        self.assertIsNotNone(out)
        self.assertEqual(STATUS_REJECTED, out['status'])
        self.assertEqual(REASON_JOB_DOES_NOT_EXIST, out['reason'])
    def test_check_move_status_unknown_job(self):
        to_test = DataMoverServices(None, None)

        dest = 'scp://visualiser/some/path'
        source = 'ala://ala/?lsid=lsid'

        out = to_test.move(source, dest)

        id = uuid.uuid4().hex
        out = to_test.check_move_status(id)

        self.assertIsNotNone(out)
        self.assertEqual(STATUS_REJECTED, out['status'])
        self.assertEqual(REASON_JOB_DOES_NOT_EXIST, out['reason'])