def test_api_get_file(self, mock_url, mock_creds, mock_config, mock_download):
        """Test get_file"""

        _callback = mock.Mock()
        _api = BatchAppsApi(mock_creds, mock_config)

        val = _api.get_file("a", "b", "c")
        self.assertFalse(val.success)
        self.assertFalse(mock_download.called)

        test_file = mock.create_autospec(UserFile)
        test_file.url = "http://test"

        val = _api.get_file(test_file, 500, "c:\\dir", True)
        self.assertTrue(val.success)
        mock_download.assert_called_with(
            mock_creds, "http://test", self.headers, "c:\\dir", 500, overwrite=True, block_size=4096, callback=None
        )

        mock_download.side_effect = RestCallException(None, "test", None)
        val = _api.get_file(test_file, 500, "c:\\dir", True, callback=_callback, block=1)
        self.assertFalse(val.success)
        mock_download.assert_called_with(
            mock_creds, "http://test", self.headers, "c:\\dir", 500, overwrite=True, block_size=1, callback=_callback
        )
    def test_api_list_jobs(self, mock_url, mock_creds, mock_config, mock_get):
        """Test list_jobs"""

        _api = BatchAppsApi(mock_creds, mock_config)

        mock_url.return_value = "https://test_endpoint.com/api/jobs"
        mock_get.return_value = {}
        val = _api.list_jobs()
        self.assertIsInstance(val, Response)
        self.assertFalse(val.success)

        mock_get.return_value = {"totalCount": 1, "jobs": 2}
        val = _api.list_jobs()
        self.assertIsInstance(val, Response)
        self.assertTrue(val.success)
        mock_get.assert_called_with(
            mock_creds, "https://test_endpoint.com/api/jobs", self.headers, params={"maxResults": 10, "startIndex": 0}
        )

        val = _api.list_jobs(index=8, per_call=15, name=20)
        self.assertIsInstance(val, Response)
        self.assertTrue(val.success)
        mock_get.assert_called_with(
            mock_creds,
            "https://test_endpoint.com/api/jobs",
            self.headers,
            params={"maxResults": 15, "startIndex": 8, "nameContains": "20"},
        )
        mock_get.side_effect = RestCallException(None, "Boom!", None)
        val = _api.list_jobs()
        self.assertIsInstance(val, Response)
        self.assertFalse(val.success)
    def test_api_send_file(self, mock_url, mock_creds, mock_config, mock_put):
        """Test send_file"""

        _callback = mock.Mock()
        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test.com"

        val = _api.send_file("file")
        self.assertFalse(mock_url.called)
        self.assertFalse(val.success)

        test_file = mock.create_autospec(UserFile)
        test_file.path = "c:\\file.txt"
        val = _api.send_file(test_file)
        self.assertTrue(test_file.create_query_specifier.called)
        spec = {"timestamp": mock.ANY, "originalFilePath": mock.ANY}
        mock_put.assert_called_with(
            mock_creds, "https://test.com", self.headers, test_file, spec, block_size=4096, callback=None
        )
        self.assertTrue(val.success)
        test_file.create_query_specifier.side_effect = FileMissingException("no file")
        val = _api.send_file(test_file)
        self.assertFalse(val.success)
        self.assertEqual(val.result, test_file.create_query_specifier.side_effect)

        test_file.create_query_specifier.side_effect = None
        mock_put.side_effect = RestCallException(None, "test", None)
        val = _api.send_file(test_file, callback=_callback, block=1)
        self.assertFalse(val.success)
        mock_put.assert_called_with(
            mock_creds, "https://test.com", self.headers, test_file, spec, block_size=1, callback=_callback
        )
    def test_api_url(self, mock_creds, mock_config):
        """Test url"""

        mock_config.endpoint.return_value = "test_endpoint.com"
        _api = BatchAppsApi(mock_creds, mock_config)
        val = _api.url("jobs")
        self.assertTrue(mock_config.endpoint.called)
        self.assertEqual(val, "https://test_endpoint.com/api/jobs")
    def test_api_url(self, mock_creds, mock_config):
        """Test url"""

        mock_config.endpoint.return_value = "test_endpoint.com"
        _api = BatchAppsApi(mock_creds, mock_config)
        val = _api.url("jobs")
        self.assertTrue(mock_config.endpoint.called)
        self.assertEqual(val, "https://test_endpoint.com/api/jobs")
    def test_api_reprocess(self, mock_url, mock_creds, mock_config, mock_post):
        """Test reprocess"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/{jobid}"
        mock_post.return_value = {}

        val = _api.reprocess("test_id")
        mock_post.assert_called_with(mock_creds, "https://test_endpoint.com/api/test_id", self.headers)
        self.assertTrue(val.success)

        mock_post.side_effect = RestCallException(None, "Boom~", None)
        val = _api.reprocess("test_id")
        self.assertFalse(val.success)
    def test_api_cancel_task(self, mock_url, mock_creds, mock_config, mock_post):
        """Test cancel_task"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test.com/{jobid}/{taskid}"
        mock_post.return_value = {}

        val = _api.cancel_task("test_id", None)
        mock_post.assert_called_with(mock_creds, "https://test.com/test_id/None", self.headers)
        self.assertTrue(val.success)

        mock_post.side_effect = RestCallException(None, "Boom~", None)
        val = _api.cancel_task("test_id", 1)
        self.assertFalse(val.success)
    def test_api_delete_pool(self, mock_url, mock_creds, mock_config, mock_delete):
        """Test delete_pool"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/{poolid}"
        mock_delete.return_value = {}

        val = _api.delete_pool("test_id")
        mock_delete.assert_called_with(mock_creds, "https://test_endpoint.com/api/test_id", self.headers)
        self.assertTrue(val.success)

        mock_delete.side_effect = RestCallException(None, "Boom~", None)
        val = _api.delete_pool("test_id")
        self.assertFalse(val.success)
    def test_api_reprocess(self, mock_url, mock_creds, mock_config, mock_post):
        """Test reprocess"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/{jobid}"
        mock_post.return_value = {}

        val = _api.reprocess("test_id")
        mock_post.assert_called_with(mock_creds,
                                     "https://test_endpoint.com/api/test_id",
                                     self.headers)
        self.assertTrue(val.success)

        mock_post.side_effect = RestCallException(None, "Boom~", None)
        val = _api.reprocess("test_id")
        self.assertFalse(val.success)
    def test_api_resize_pool(self, mock_url, mock_creds, mock_config, mock_post):
        """Test resize_pool"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/{poolid}/actions/resize"
        mock_post.return_value = {}

        val = _api.resize_pool("test_id", 5)
        mock_post.assert_called_with(
            mock_creds, "https://test_endpoint.com/api/test_id/actions/resize", self.headers, {"targetDedicated": "5"}
        )
        self.assertTrue(val.success)

        mock_post.side_effect = RestCallException(None, "Boom~", None)
        val = _api.resize_pool("test_id", None)
        self.assertFalse(val.success)
    def test_api_list_pools(self, mock_url, mock_creds, mock_config, mock_get):
        """Test list_pools"""

        _api = BatchAppsApi(mock_creds, mock_config)

        mock_url.return_value = "https://test_endpoint.com/api/pools"

        val = _api.list_pools()
        self.assertIsInstance(val, Response)
        self.assertTrue(val.success)
        mock_get.assert_called_with(mock_creds, "https://test_endpoint.com/api/pools", self.headers)

        mock_get.side_effect = RestCallException(None, "Boom!", None)
        val = _api.list_pools()
        self.assertIsInstance(val, Response)
        self.assertFalse(val.success)
    def test_api_delete_pool(self, mock_url, mock_creds, mock_config,
                             mock_delete):
        """Test delete_pool"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/{poolid}"
        mock_delete.return_value = {}

        val = _api.delete_pool("test_id")
        mock_delete.assert_called_with(
            mock_creds, "https://test_endpoint.com/api/test_id", self.headers)
        self.assertTrue(val.success)

        mock_delete.side_effect = RestCallException(None, "Boom~", None)
        val = _api.delete_pool("test_id")
        self.assertFalse(val.success)
    def test_api_resize_pool(self, mock_url, mock_creds, mock_config,
                             mock_post):
        """Test resize_pool"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/{poolid}/actions/resize"
        mock_post.return_value = {}

        val = _api.resize_pool("test_id", 5)
        mock_post.assert_called_with(
            mock_creds, "https://test_endpoint.com/api/test_id/actions/resize",
            self.headers, {'targetDedicated': '5'})
        self.assertTrue(val.success)

        mock_post.side_effect = RestCallException(None, "Boom~", None)
        val = _api.resize_pool("test_id", None)
        self.assertFalse(val.success)
    def test_api_cancel_task(self, mock_url, mock_creds, mock_config,
                             mock_post):
        """Test cancel_task"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test.com/{jobid}/{taskid}"
        mock_post.return_value = {}

        val = _api.cancel_task("test_id", None)
        mock_post.assert_called_with(mock_creds,
                                     "https://test.com/test_id/None",
                                     self.headers)
        self.assertTrue(val.success)

        mock_post.side_effect = RestCallException(None, "Boom~", None)
        val = _api.cancel_task("test_id", 1)
        self.assertFalse(val.success)
    def test_api_send_job(self, mock_url, mock_creds, mock_config, mock_post):
        """Test send_job"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/jobs"
        mock_post.return_value = {}

        val = _api.send_job({})
        mock_post.assert_called_with(mock_creds, "https://test_endpoint.com/api/jobs", self.headers, message={})
        self.assertFalse(val.success)
        mock_post.return_value = {"jobId": "1", "link": "2"}
        val = _api.send_job({})
        mock_post.assert_called_with(mock_creds, "https://test_endpoint.com/api/jobs", self.headers, message={})
        self.assertTrue(val.success)
        mock_post.side_effect = RestCallException(None, "Boom~", None)
        val = _api.send_job({})
        self.assertFalse(val.success)
    def test_api_add_pool(self, mock_url, mock_creds, mock_config, mock_post):
        """Test add_pool"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/pools"
        mock_post.return_value = {}
        message = {"targetDedicated": "0", "maxTasksPerTVM": "1", "communication": False, "certificateReferences": []}

        val = _api.add_pool()
        mock_post.assert_called_with(mock_creds, "https://test_endpoint.com/api/pools", self.headers, message)
        self.assertFalse(val.success)

        mock_post.return_value = {"poolId": "1", "link": "2"}
        val = _api.add_pool()
        mock_post.assert_called_with(mock_creds, "https://test_endpoint.com/api/pools", self.headers, message)
        self.assertTrue(val.success)

        val = _api.add_pool(target_size="test")
        self.assertFalse(val.success)

        message["targetDedicated"] = "6"
        val = _api.add_pool(target_size=6)
        mock_post.assert_called_with(mock_creds, "https://test_endpoint.com/api/pools", self.headers, message)
        self.assertTrue(val.success)

        val = _api.add_pool(certs=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
        message["certificateReferences"] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        message["targetDedicated"] = "0"
        mock_post.assert_called_with(mock_creds, "https://test_endpoint.com/api/pools", self.headers, message)
        self.assertTrue(val.success)

        mock_post.side_effect = RestCallException(None, "Boom~", None)
        val = _api.add_pool()
        self.assertFalse(val.success)
    def test_api_get_job(self, mock_url, mock_creds, mock_config, mock_get):
        """Test get_job"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/jobs"
        mock_get.return_value = None
        val = _api.get_job()
        self.assertIsInstance(val, Response)
        self.assertFalse(val.success)

        val = _api.get_job(url="https://job_url")
        mock_get.assert_called_with(mock_creds, "https://job_url",
                                    self.headers)
        self.assertFalse(val.success)

        mock_get.return_value = {'id': '1', 'name': '2', 'type': '3'}
        val = _api.get_job(url="https://job_url")
        mock_get.assert_called_with(mock_creds, "https://job_url",
                                    self.headers)
        self.assertTrue(val.success)

        mock_url.return_value = "https://test_endpoint.com/api/{jobid}"
        val = _api.get_job(job_id="abcdef")
        mock_get.assert_called_with(mock_creds,
                                    "https://test_endpoint.com/api/abcdef",
                                    self.headers)
        self.assertTrue(val.success)
        self.assertTrue(mock_url.called)

        mock_get.side_effect = RestCallException(None, "Boom~", None)
        val = _api.get_job(job_id="abcdef")
        self.assertFalse(val.success)
    def test_api_list_tasks(self, mock_url, mock_creds, mock_config, mock_get):
        """Test list_tasks"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test.com/{jobid}"
        mock_get.return_value = {}

        val = _api.list_tasks()
        self.assertFalse(val.success)
        self.assertFalse(mock_get.called)

        val = _api.list_tasks(url="http://test")
        self.assertFalse(mock_url.called)
        self.assertFalse(val.success)
        mock_get.assert_called_with(mock_creds, "http://test", self.headers)

        mock_get.return_value = {'tasks': None}
        val = _api.list_tasks(job_id="test")
        mock_get.assert_called_with(mock_creds, "https://test.com/test",
                                    self.headers)
        self.assertFalse(val.success)

        mock_get.return_value = {'tasks': []}
        val = _api.list_tasks(job_id="test")
        self.assertTrue(val.success)
        self.assertEqual(val.result, [])

        mock_get.side_effect = RestCallException(None, "Boom!", None)
        val = _api.list_tasks(job_id="test")
        self.assertFalse(val.success)
    def test_api_list_task_outputs(self, mock_url, mock_creds, mock_config, mock_get):
        """Test list_task_outputs"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test.com/{jobid}/{taskid}"
        mock_get.return_value = {}

        val = _api.list_task_outputs("test_id", None)
        mock_get.assert_called_with(mock_creds, "https://test.com/test_id/None", self.headers)
        self.assertFalse(val.success)

        mock_get.return_value = {"outputs": None}
        val = _api.list_task_outputs(None, 3)
        mock_get.assert_called_with(mock_creds, "https://test.com/None/3", self.headers)
        self.assertFalse(val.success)

        mock_get.return_value = {"outputs": []}
        val = _api.list_task_outputs("test_id", "0")
        self.assertTrue(val.success)
        self.assertEqual(val.result, [])

        mock_get.return_value = {"outputs": [{"name": "output.zip", "link": {"href": "http://url"}, "kind": "output"}]}
        val = _api.list_task_outputs("test_id", 1)
        self.assertTrue(val.success)
        self.assertEqual(val.result, [{"name": "output.zip", "link": "http://url", "type": "output"}])
        mock_get.return_value = {"outputs": [{"name": "output.zip"}]}
        val = _api.list_task_outputs("test_id", 5)
        self.assertTrue(val.success)
        self.assertEqual(val.result, [{"name": "output.zip", "link": None, "type": None}])

        mock_get.side_effect = RestCallException(None, "Boom~", None)
        val = _api.list_task_outputs("test_id", -1)
        self.assertFalse(val.success)
    def test_api_props_output_file(self, mock_url, mock_creds, mock_config, mock_head):
        """Test props_output_file"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test.com/{jobid}/{name}"
        mock_head.return_value = 0

        val = _api.props_output_file()
        self.assertFalse(val.success)
        self.assertFalse(mock_head.called)

        val = _api.props_output_file(job_id="test_abc")
        self.assertFalse(val.success)
        self.assertFalse(mock_head.called)

        val = _api.props_output_file(job_id="test_abc", fname="file.zip")
        mock_head.assert_called_with(mock_creds, "https://test.com/test_abc/file.zip", self.headers)
        self.assertTrue(mock_url.called)

        val = _api.props_output_file(job_id="test_abc", fname="file.zip", url="http://test")
        mock_head.assert_called_with(mock_creds, "https://test.com/test_abc/file.zip", self.headers)
        self.assertTrue(val.success)

        val = _api.props_output_file(url="http://test")
        mock_head.assert_called_with(mock_creds, "http://test", self.headers)
        self.assertTrue(val.success)

        mock_head.side_effect = RestCallException(None, "Boom!", None)
        val = _api.props_output_file(url="http://test")
        self.assertFalse(val.success)
    def test_api_props_output(self, mock_url, mock_creds, mock_config, mock_head):
        """Test props_output"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test.com/{jobid}/{type}"
        mock_head.return_value = {}

        val = _api.props_output()
        self.assertFalse(mock_head.called)
        self.assertFalse(val.success)

        val = _api.props_output(job_id="test")
        mock_head.assert_called_with(mock_creds, "https://test.com/test/output", self.headers)
        self.assertTrue(val.success)

        mock_head.side_effect = RestCallException(None, "Boom~", None)
        val = _api.props_output(job_id="test")
        self.assertFalse(val.success)
    def test_api_props_file(self, mock_url, mock_creds, mock_config, mock_head):
        """Test props_file"""

        _api = BatchAppsApi(mock_creds, mock_config)

        val = _api.props_file("file")
        self.assertFalse(mock_head.called)
        self.assertFalse(val.success)

        test_file = mock.create_autospec(UserFile)
        test_file.url = "http://test"
        val = _api.props_file(test_file)
        mock_head.assert_called_with(mock_creds, "http://test", self.headers)
        self.assertTrue(val.success)

        mock_head.side_effect = RestCallException(None, "test", None)
        val = _api.props_file(test_file)
        self.assertFalse(val.success)
    def test_api_list_pools(self, mock_url, mock_creds, mock_config, mock_get):
        """Test list_pools"""

        _api = BatchAppsApi(mock_creds, mock_config)

        mock_url.return_value = "https://test_endpoint.com/api/pools"

        val = _api.list_pools()
        self.assertIsInstance(val, Response)
        self.assertTrue(val.success)
        mock_get.assert_called_with(mock_creds,
                                    "https://test_endpoint.com/api/pools",
                                    self.headers)

        mock_get.side_effect = RestCallException(None, "Boom!", None)
        val = _api.list_pools()
        self.assertIsInstance(val, Response)
        self.assertFalse(val.success)
    def test_api_get_output_file(self, mock_url, mock_creds, mock_config,
                                 mock_download):
        """Test get_output_file"""

        _callback = mock.Mock()
        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test.com/{jobid}/{name}"
        mock_download.return_value = {}

        val = _api.get_output_file("c:\\dir", 500, False)
        self.assertFalse(mock_download.called)
        self.assertFalse(val.success)

        val = _api.get_output_file("c:\\dir", 500, False, url="http://url")

        mock_download.assert_called_with(mock_creds,
                                         "http://url",
                                         self.headers,
                                         "c:\\dir",
                                         500,
                                         False,
                                         f_name=None,
                                         block_size=4096,
                                         callback=None)
        self.assertTrue(val.success)

        val = _api.get_output_file("c:\\dir",
                                   500,
                                   False,
                                   url="http://url",
                                   job_id="test_id",
                                   callback=_callback,
                                   block=1)

        mock_download.assert_called_with(mock_creds,
                                         "http://url",
                                         self.headers,
                                         "c:\\dir",
                                         500,
                                         False,
                                         f_name=None,
                                         block_size=1,
                                         callback=_callback)
        self.assertTrue(val.success)

        mock_url.reset()
        mock_download.called = False
        val = _api.get_output_file("c:\\dir", 500, False, job_id="test_id")
        self.assertFalse(mock_url.called)
        self.assertFalse(mock_download.called)
        self.assertFalse(val.success)

        val = _api.get_output_file("c:\\dir",
                                   500,
                                   False,
                                   job_id="test_id",
                                   fname="test.zip")

        self.assertTrue(val.success)
    def test_api_list_outputs(self, mock_url, mock_creds, mock_config,
                              mock_get):
        """Test list_outputs"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/{jobid}"
        mock_get.return_value = {}

        val = _api.list_outputs("test_id")
        mock_get.assert_called_with(mock_creds,
                                    "https://test_endpoint.com/test_id",
                                    self.headers)
        self.assertFalse(val.success)

        mock_get.return_value = {'jobOutputs': None}
        val = _api.list_outputs("test_id")
        mock_get.assert_called_with(mock_creds,
                                    "https://test_endpoint.com/test_id",
                                    self.headers)
        self.assertFalse(val.success)

        mock_get.return_value = {'jobOutputs': []}
        val = _api.list_outputs("test_id")
        self.assertTrue(val.success)
        self.assertEqual(val.result, [])

        mock_get.return_value = {
            'jobOutputs': [{
                'name': 'output.zip',
                'link': {
                    'href': 'http://url'
                },
                'kind': 'output'
            }]
        }
        val = _api.list_outputs("test_id")
        self.assertTrue(val.success)
        self.assertEqual(val.result, [{
            'name': 'output.zip',
            'link': 'http://url',
            'type': 'output'
        }])
        mock_get.return_value = {'jobOutputs': [{'name': 'output.zip'}]}
        val = _api.list_outputs("test_id")
        self.assertTrue(val.success)
        self.assertEqual(val.result, [{
            'name': 'output.zip',
            'link': None,
            'type': None
        }])

        mock_get.side_effect = RestCallException(None, "Boom~", None)
        val = _api.list_outputs("test_id")
        self.assertFalse(val.success)
    def test_api_props_file(self, mock_url, mock_creds, mock_config,
                            mock_head):
        """Test props_file"""

        _api = BatchAppsApi(mock_creds, mock_config)

        val = _api.props_file("file")
        self.assertFalse(mock_head.called)
        self.assertFalse(val.success)

        test_file = mock.create_autospec(UserFile)
        test_file.url = "http://test"
        val = _api.props_file(test_file)
        mock_head.assert_called_with(mock_creds, "http://test", self.headers)
        self.assertTrue(val.success)

        mock_head.side_effect = RestCallException(None, "test", None)
        val = _api.props_file(test_file)
        self.assertFalse(val.success)
    def test_api_query_missing_files(self, mock_url, mock_creds, mock_config,
                                     mock_post):
        """Test query_missing_files"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "http://test.com"
        mock_post.return_value = {}

        val = _api.query_missing_files("files")
        self.assertFalse(val.success)
        self.assertFalse(mock_post.called)

        val = _api.query_missing_files({})
        self.assertFalse(val.success)
        mock_post.assert_called_with(mock_creds, "http://test.com",
                                     self.headers, {"Specifications": [{}]})
        mock_post.reset()
        val = _api.query_missing_files([{}])
        self.assertFalse(val.success)
        mock_post.assert_once_called_with(mock_creds, "http://test.com",
                                          self.headers,
                                          {"Specifications": [{}]})
        mock_post.called = False
        val = _api.query_missing_files([])
        self.assertFalse(val.success)
        self.assertFalse(mock_post.called)

        val = _api.query_missing_files([0])
        self.assertFalse(val.success)
        self.assertFalse(mock_post.called)

        mock_post.return_value = {'files': None}
        val = _api.query_missing_files({})
        self.assertFalse(val.success)

        mock_post.return_value = {'files': []}
        val = _api.query_missing_files({})
        self.assertTrue(val.success)
        self.assertEqual(val.result, [])

        mock_post.side_effect = RestCallException(None, "test", None)
        val = _api.query_missing_files({})
        self.assertFalse(val.success)
    def test_api_get_log(self, mock_url, mock_creds, mock_config, mock_get):
        """Test get_log"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/{jobid}/log"
        mock_get.return_value = {}

        val = _api.get_log("abcdef")
        self.assertTrue(val.success)
        mock_get.assert_called_with(
            mock_creds, "https://test_endpoint.com/api/abcdef/log", self.headers, params={"maxResults": 100}
        )
        val = _api.get_log("abcdef", start=1, max_lines=None)
        mock_get.assert_called_with(
            mock_creds, "https://test_endpoint.com/api/abcdef/log", self.headers, params={"since": "1"}
        )
        mock_get.side_effect = RestCallException(None, "Boom~", None)
        val = _api.get_log("test")
        self.assertFalse(val.success)
    def test_api_get_file(self, mock_url, mock_creds, mock_config,
                          mock_download):
        """Test get_file"""

        _callback = mock.Mock()
        _api = BatchAppsApi(mock_creds, mock_config)

        val = _api.get_file("a", "b", "c")
        self.assertFalse(val.success)
        self.assertFalse(mock_download.called)

        test_file = mock.create_autospec(UserFile)
        test_file.url = "http://test"

        val = _api.get_file(test_file, 500, "c:\\dir", True)
        self.assertTrue(val.success)
        mock_download.assert_called_with(mock_creds,
                                         "http://test",
                                         self.headers,
                                         "c:\\dir",
                                         500,
                                         overwrite=True,
                                         block_size=4096,
                                         callback=None)

        mock_download.side_effect = RestCallException(None, "test", None)
        val = _api.get_file(test_file,
                            500,
                            "c:\\dir",
                            True,
                            callback=_callback,
                            block=1)
        self.assertFalse(val.success)
        mock_download.assert_called_with(mock_creds,
                                         "http://test",
                                         self.headers,
                                         "c:\\dir",
                                         500,
                                         overwrite=True,
                                         block_size=1,
                                         callback=_callback)
    def test_api_get_log(self, mock_url, mock_creds, mock_config, mock_get):
        """Test get_log"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/{jobid}/log"
        mock_get.return_value = {}

        val = _api.get_log("abcdef")
        self.assertTrue(val.success)
        mock_get.assert_called_with(mock_creds,
                                    "https://test_endpoint.com/api/abcdef/log",
                                    self.headers,
                                    params={'maxResults': 100})
        val = _api.get_log("abcdef", start=1, max_lines=None)
        mock_get.assert_called_with(mock_creds,
                                    "https://test_endpoint.com/api/abcdef/log",
                                    self.headers,
                                    params={'since': '1'})
        mock_get.side_effect = RestCallException(None, "Boom~", None)
        val = _api.get_log("test")
        self.assertFalse(val.success)
    def test_api_props_output(self, mock_url, mock_creds, mock_config,
                              mock_head):
        """Test props_output"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test.com/{jobid}/{type}"
        mock_head.return_value = {}

        val = _api.props_output()
        self.assertFalse(mock_head.called)
        self.assertFalse(val.success)

        val = _api.props_output(job_id="test")
        mock_head.assert_called_with(mock_creds,
                                     "https://test.com/test/output",
                                     self.headers)
        self.assertTrue(val.success)

        mock_head.side_effect = RestCallException(None, "Boom~", None)
        val = _api.props_output(job_id="test")
        self.assertFalse(val.success)
    def test_api_get_pool(self, mock_url, mock_creds, mock_config, mock_get):
        """Test get_pool"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/pools"
        mock_get.return_value = None
        val = _api.get_pool()
        self.assertIsInstance(val, Response)
        self.assertFalse(val.success)

        val = _api.get_pool(url="https://pool_url")
        mock_get.assert_called_with(mock_creds, "https://pool_url",
                                    self.headers)
        self.assertTrue(val.success)

        mock_url.return_value = "https://test_endpoint.com/api/{poolid}"
        val = _api.get_pool(pool_id="abcdef")
        mock_get.assert_called_with(mock_creds,
                                    "https://test_endpoint.com/api/abcdef",
                                    self.headers)
        self.assertTrue(val.success)
        self.assertTrue(mock_url.called)

        mock_get.side_effect = RestCallException(None, "Boom~", None)
        val = _api.get_pool(pool_id="abcdef")
        self.assertFalse(val.success)
    def test_api_list_tasks(self, mock_url, mock_creds, mock_config, mock_get):
        """Test list_tasks"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test.com/{jobid}"
        mock_get.return_value = {}

        val = _api.list_tasks()
        self.assertFalse(val.success)
        self.assertFalse(mock_get.called)

        val = _api.list_tasks(url="http://test")
        self.assertFalse(mock_url.called)
        self.assertFalse(val.success)
        mock_get.assert_called_with(mock_creds, "http://test", self.headers)

        mock_get.return_value = {"tasks": None}
        val = _api.list_tasks(job_id="test")
        mock_get.assert_called_with(mock_creds, "https://test.com/test", self.headers)
        self.assertFalse(val.success)

        mock_get.return_value = {"tasks": []}
        val = _api.list_tasks(job_id="test")
        self.assertTrue(val.success)
        self.assertEqual(val.result, [])

        mock_get.side_effect = RestCallException(None, "Boom!", None)
        val = _api.list_tasks(job_id="test")
        self.assertFalse(val.success)
    def test_api_get_job(self, mock_url, mock_creds, mock_config, mock_get):
        """Test get_job"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/jobs"
        mock_get.return_value = None
        val = _api.get_job()
        self.assertIsInstance(val, Response)
        self.assertFalse(val.success)

        val = _api.get_job(url="https://job_url")
        mock_get.assert_called_with(mock_creds, "https://job_url", self.headers)
        self.assertFalse(val.success)

        mock_get.return_value = {"id": "1", "name": "2", "type": "3"}
        val = _api.get_job(url="https://job_url")
        mock_get.assert_called_with(mock_creds, "https://job_url", self.headers)
        self.assertTrue(val.success)

        mock_url.return_value = "https://test_endpoint.com/api/{jobid}"
        val = _api.get_job(job_id="abcdef")
        mock_get.assert_called_with(mock_creds, "https://test_endpoint.com/api/abcdef", self.headers)
        self.assertTrue(val.success)
        self.assertTrue(mock_url.called)

        mock_get.side_effect = RestCallException(None, "Boom~", None)
        val = _api.get_job(job_id="abcdef")
        self.assertFalse(val.success)
    def test_api_send_job(self, mock_url, mock_creds, mock_config, mock_post):
        """Test send_job"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/jobs"
        mock_post.return_value = {}

        val = _api.send_job({})
        mock_post.assert_called_with(mock_creds,
                                     "https://test_endpoint.com/api/jobs",
                                     self.headers,
                                     message={})
        self.assertFalse(val.success)
        mock_post.return_value = {'jobId': '1', 'link': '2'}
        val = _api.send_job({})
        mock_post.assert_called_with(mock_creds,
                                     "https://test_endpoint.com/api/jobs",
                                     self.headers,
                                     message={})
        self.assertTrue(val.success)
        mock_post.side_effect = RestCallException(None, "Boom~", None)
        val = _api.send_job({})
        self.assertFalse(val.success)
    def test_api_get_pool(self, mock_url, mock_creds, mock_config, mock_get):
        """Test get_pool"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/pools"
        mock_get.return_value = None
        val = _api.get_pool()
        self.assertIsInstance(val, Response)
        self.assertFalse(val.success)

        val = _api.get_pool(url="https://pool_url")
        mock_get.assert_called_with(mock_creds, "https://pool_url", self.headers)
        self.assertTrue(val.success)

        mock_url.return_value = "https://test_endpoint.com/api/{poolid}"
        val = _api.get_pool(pool_id="abcdef")
        mock_get.assert_called_with(mock_creds, "https://test_endpoint.com/api/abcdef", self.headers)
        self.assertTrue(val.success)
        self.assertTrue(mock_url.called)

        mock_get.side_effect = RestCallException(None, "Boom~", None)
        val = _api.get_pool(pool_id="abcdef")
        self.assertFalse(val.success)
    def test_api_add_pool(self, mock_url, mock_creds, mock_config, mock_post):
        """Test add_pool"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test_endpoint.com/api/pools"
        mock_post.return_value = {}
        message = {
            'targetDedicated': '0',
            'maxTasksPerTVM': '1',
            'communication': False,
            'certificateReferences': []
        }

        val = _api.add_pool()
        mock_post.assert_called_with(mock_creds,
                                     "https://test_endpoint.com/api/pools",
                                     self.headers, message)
        self.assertFalse(val.success)

        mock_post.return_value = {'poolId': '1', 'link': '2'}
        val = _api.add_pool()
        mock_post.assert_called_with(mock_creds,
                                     "https://test_endpoint.com/api/pools",
                                     self.headers, message)
        self.assertTrue(val.success)

        val = _api.add_pool(target_size="test")
        self.assertFalse(val.success)

        message['targetDedicated'] = '6'
        val = _api.add_pool(target_size=6)
        mock_post.assert_called_with(mock_creds,
                                     "https://test_endpoint.com/api/pools",
                                     self.headers, message)
        self.assertTrue(val.success)

        val = _api.add_pool(certs=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
        message['certificateReferences'] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        message['targetDedicated'] = '0'
        mock_post.assert_called_with(mock_creds,
                                     "https://test_endpoint.com/api/pools",
                                     self.headers, message)
        self.assertTrue(val.success)

        mock_post.side_effect = RestCallException(None, "Boom~", None)
        val = _api.add_pool()
        self.assertFalse(val.success)
    def test_api_query_missing_files(self, mock_url, mock_creds, mock_config, mock_post):
        """Test query_missing_files"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "http://test.com"
        mock_post.return_value = {}

        val = _api.query_missing_files("files")
        self.assertFalse(val.success)
        self.assertFalse(mock_post.called)

        val = _api.query_missing_files({})
        self.assertFalse(val.success)
        mock_post.assert_called_with(mock_creds, "http://test.com", self.headers, {"Specifications": [{}]})
        mock_post.reset()
        val = _api.query_missing_files([{}])
        self.assertFalse(val.success)
        mock_post.assert_once_called_with(mock_creds, "http://test.com", self.headers, {"Specifications": [{}]})
        mock_post.called = False
        val = _api.query_missing_files([])
        self.assertFalse(val.success)
        self.assertFalse(mock_post.called)

        val = _api.query_missing_files([0])
        self.assertFalse(val.success)
        self.assertFalse(mock_post.called)

        mock_post.return_value = {"files": None}
        val = _api.query_missing_files({})
        self.assertFalse(val.success)

        mock_post.return_value = {"files": []}
        val = _api.query_missing_files({})
        self.assertTrue(val.success)
        self.assertEqual(val.result, [])

        mock_post.side_effect = RestCallException(None, "test", None)
        val = _api.query_missing_files({})
        self.assertFalse(val.success)
    def test_api_props_output_file(self, mock_url, mock_creds, mock_config,
                                   mock_head):
        """Test props_output_file"""

        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test.com/{jobid}/{name}"
        mock_head.return_value = 0

        val = _api.props_output_file()
        self.assertFalse(val.success)
        self.assertFalse(mock_head.called)

        val = _api.props_output_file(job_id="test_abc")
        self.assertFalse(val.success)
        self.assertFalse(mock_head.called)

        val = _api.props_output_file(job_id="test_abc", fname="file.zip")
        mock_head.assert_called_with(mock_creds,
                                     "https://test.com/test_abc/file.zip",
                                     self.headers)
        self.assertTrue(mock_url.called)

        val = _api.props_output_file(job_id="test_abc",
                                     fname="file.zip",
                                     url="http://test")
        mock_head.assert_called_with(mock_creds,
                                     "https://test.com/test_abc/file.zip",
                                     self.headers)
        self.assertTrue(val.success)

        val = _api.props_output_file(url="http://test")
        mock_head.assert_called_with(mock_creds, "http://test", self.headers)
        self.assertTrue(val.success)

        mock_head.side_effect = RestCallException(None, "Boom!", None)
        val = _api.props_output_file(url="http://test")
        self.assertFalse(val.success)
    def test_api_send_file(self, mock_url, mock_creds, mock_config, mock_put):
        """Test send_file"""

        _callback = mock.Mock()
        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test.com"

        val = _api.send_file("file")
        self.assertFalse(mock_url.called)
        self.assertFalse(val.success)

        test_file = mock.create_autospec(UserFile)
        test_file.path = "c:\\file.txt"
        val = _api.send_file(test_file)
        self.assertTrue(test_file.create_query_specifier.called)
        spec = {"timestamp": mock.ANY, "originalFilePath": mock.ANY}
        mock_put.assert_called_with(mock_creds,
                                    "https://test.com",
                                    self.headers,
                                    test_file,
                                    spec,
                                    block_size=4096,
                                    callback=None)
        self.assertTrue(val.success)
        test_file.create_query_specifier.side_effect = FileMissingException(
            "no file")
        val = _api.send_file(test_file)
        self.assertFalse(val.success)
        self.assertEqual(val.result,
                         test_file.create_query_specifier.side_effect)

        test_file.create_query_specifier.side_effect = None
        mock_put.side_effect = RestCallException(None, "test", None)
        val = _api.send_file(test_file, callback=_callback, block=1)
        self.assertFalse(val.success)
        mock_put.assert_called_with(mock_creds,
                                    "https://test.com",
                                    self.headers,
                                    test_file,
                                    spec,
                                    block_size=1,
                                    callback=_callback)
    def test_api_list_jobs(self, mock_url, mock_creds, mock_config, mock_get):
        """Test list_jobs"""

        _api = BatchAppsApi(mock_creds, mock_config)

        mock_url.return_value = "https://test_endpoint.com/api/jobs"
        mock_get.return_value = {}
        val = _api.list_jobs()
        self.assertIsInstance(val, Response)
        self.assertFalse(val.success)

        mock_get.return_value = {'totalCount': 1, 'jobs': 2}
        val = _api.list_jobs()
        self.assertIsInstance(val, Response)
        self.assertTrue(val.success)
        mock_get.assert_called_with(mock_creds,
                                    "https://test_endpoint.com/api/jobs",
                                    self.headers,
                                    params={
                                        "maxResults": 10,
                                        "startIndex": 0
                                    })

        val = _api.list_jobs(index=8, per_call=15, name=20)
        self.assertIsInstance(val, Response)
        self.assertTrue(val.success)
        mock_get.assert_called_with(mock_creds,
                                    "https://test_endpoint.com/api/jobs",
                                    self.headers,
                                    params={
                                        "maxResults": 15,
                                        "startIndex": 8,
                                        "nameContains": "20"
                                    })
        mock_get.side_effect = RestCallException(None, "Boom!", None)
        val = _api.list_jobs()
        self.assertIsInstance(val, Response)
        self.assertFalse(val.success)
    def test_api_get_output_file(self, mock_url, mock_creds, mock_config, mock_download):
        """Test get_output_file"""

        _callback = mock.Mock()
        _api = BatchAppsApi(mock_creds, mock_config)
        mock_url.return_value = "https://test.com/{jobid}/{name}"
        mock_download.return_value = {}

        val = _api.get_output_file("c:\\dir", 500, False)
        self.assertFalse(mock_download.called)
        self.assertFalse(val.success)

        val = _api.get_output_file("c:\\dir", 500, False, url="http://url")

        mock_download.assert_called_with(
            mock_creds, "http://url", self.headers, "c:\\dir", 500, False, f_name=None, block_size=4096, callback=None
        )
        self.assertTrue(val.success)

        val = _api.get_output_file(
            "c:\\dir", 500, False, url="http://url", job_id="test_id", callback=_callback, block=1
        )

        mock_download.assert_called_with(
            mock_creds, "http://url", self.headers, "c:\\dir", 500, False, f_name=None, block_size=1, callback=_callback
        )
        self.assertTrue(val.success)

        mock_url.reset()
        mock_download.called = False
        val = _api.get_output_file("c:\\dir", 500, False, job_id="test_id")
        self.assertFalse(mock_url.called)
        self.assertFalse(mock_download.called)
        self.assertFalse(val.success)

        val = _api.get_output_file("c:\\dir", 500, False, job_id="test_id", fname="test.zip")

        self.assertTrue(val.success)
    def test_api_app(self, mock_creds, mock_config):
        """Test app"""

        _api = BatchAppsApi(mock_creds, mock_config)
        _api.app()
        self.assertTrue(mock_config.current_jobtype.called)
    def test_api_default_params(self, mock_creds, mock_config):
        """Test default_params"""

        _api = BatchAppsApi(mock_creds, mock_config)
        _api.default_params()
        self.assertTrue(mock_config.default_params.called)
    def test_api_default_params(self, mock_creds, mock_config):
        """Test default_params"""

        _api = BatchAppsApi(mock_creds, mock_config)
        _api.default_params()
        self.assertTrue(mock_config.default_params.called)
    def test_api_app(self, mock_creds, mock_config):
        """Test app"""

        _api = BatchAppsApi(mock_creds, mock_config)
        _api.app()
        self.assertTrue(mock_config.current_jobtype.called)