import ibm_db import pytest from CommonServerPython import * from DB2 import Client, query_command from ibm_db_dbi import Connection ARGS1 = { "query": ( "CREATE TABLE publishers( " "publisher_id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, " "name VARCHAR(255) NOT NULL, " "PRIMARY KEY(pubisher_id))" ) } ARGS2 = { "query": "SELECT * FROM publishers", "limit": 1, "skip": 0, } ARGS3 = { "query": "INSERT INTO publishers VALUES(:id, :name)", "bind_variables_name": "id, name", "bind_variables_values": "2, larry", } ARGS4 = {"query": "SELECT * FROM publishers", "limit": 1, "skip": 0} ARGS5 = {"query": "INSERT INTO publishers VALUES(?, ?)", "bind_variables_values": "1, john smith"} ARGS6 = {"query": "SELECT * FROM publishers", "limit": 2, "skip": 0} EMPTY_HEADERS = [] PUBLISHER_HEADERS = ["id", "name"] RES1235 = [] RES4 = [{"id": 2, "name": "larry"}] RES6 = [{"id": 2, "name": "larry"}, {"id": 1, "name": "john smith"}] EXPECTED_OUTPUT1 = { "DB2(val.Query && val.Query === obj.Query": { "DB2": { "Result": [], "Query": ( "CREATE TABLE publishers( " "publisher_id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, " "name VARCHAR(255) NOT NULL, " "PRIMARY KEY(pubisher_id))" ), "DbName": "sample", } } } EXPECTED_OUTPUT2 = {"Result": [], "Query": "SELECT * FROM publishers", "DbName": "sample"} EXPECTED_OUTPUT3 = {"Result": [], "Query": "INSERT INTO publishers VALUES(:id, :name)", "DbName": "sample"} EXPECTED_OUTPUT4 = {"Result": [{"id": "2", "name": "larry"}], "Query": "SELECT * FROM publishers", "DbName": "sample"} EXPECTED_OUTPUT5 = {"Result": [], "Query": "INSERT INTO publishers VALUES(?, ?)", "DbName": "sample"} EXPECTED_OUTPUT6 = { "Result": [{"id": "2", "name": "larry"}, {"id": "1", "name": "john smith"}], "Query": "SELECT * FROM publishers", "DbName": "sample", } # ====== Connection Fixture ========= @pytest.fixture def client(mocker): """ generate client object """ mocker.patch.object(ibm_db, "get_db_info", return_value="test") mocker.patch.object(ibm_db, "connect", return_value=Connection) mocker.patch.object(ibm_db, "close", return_value=True) client = Client("localhost", "username", "password", "8080", "sample", False) return client @pytest.mark.parametrize( "command, args, response, headers, expected_result", [ (query_command, ARGS1, None, EMPTY_HEADERS, None), (query_command, ARGS2, None, EMPTY_HEADERS, None), (query_command, ARGS3, None, EMPTY_HEADERS, None), (query_command, ARGS5, None, EMPTY_HEADERS, None), ], ) def test_create_insert_empty_table_query_commands(command, args, response, headers, expected_result, mocker, client): """ Test create table command into empty table. """ mocker.patch.object(client, "execute_query", side_effect=Exception("No results found")) mocker.patch.object(demisto, "error") mocker.patch.object(demisto, "info") with pytest.raises(DemistoException): command(client, args) @pytest.mark.parametrize( "command, args, response, headers, expected_result", [ (query_command, ARGS4, RES4, PUBLISHER_HEADERS, EXPECTED_OUTPUT4), (query_command, ARGS6, RES6, PUBLISHER_HEADERS, EXPECTED_OUTPUT6), ], ) def test_fetch_query_commands(command, args, response, headers, expected_result, mocker, client): """ Test create table command """ mocker.patch.object(client, "execute_query", return_value=(response, headers)) mocker.patch.object(demisto, "error") mocker.patch.object(demisto, "info") result = command(client, args) assert result.raw_response == response assert result.outputs == expected_result