mirror of
https://github.com/EvolutionAPI/adk-python.git
synced 2025-12-18 19:32:21 -06:00
feat: trigger in ApplicationIntegrationTools is changed to triggers and is a list of strings
PiperOrigin-RevId: 758034458
This commit is contained in:
committed by
Copybara-Service
parent
2d84b13219
commit
d740b93e03
@@ -13,6 +13,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
import json
|
||||
import re
|
||||
from unittest import mock
|
||||
|
||||
from google.adk.tools.application_integration_tool.clients.connections_client import ConnectionsClient
|
||||
@@ -42,8 +43,8 @@ def integration_name():
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def trigger_name():
|
||||
return "test-trigger"
|
||||
def triggers():
|
||||
return ["test-trigger", "test-trigger2"]
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -76,13 +77,13 @@ def mock_connections_client():
|
||||
class TestIntegrationClient:
|
||||
|
||||
def test_initialization(
|
||||
self, project, location, integration_name, trigger_name, connection_name
|
||||
self, project, location, integration_name, triggers, connection_name
|
||||
):
|
||||
client = IntegrationClient(
|
||||
project=project,
|
||||
location=location,
|
||||
integration=integration_name,
|
||||
trigger=trigger_name,
|
||||
triggers=triggers,
|
||||
connection=connection_name,
|
||||
entity_operations={"entity": ["LIST"]},
|
||||
actions=["action1"],
|
||||
@@ -91,7 +92,7 @@ class TestIntegrationClient:
|
||||
assert client.project == project
|
||||
assert client.location == location
|
||||
assert client.integration == integration_name
|
||||
assert client.trigger == trigger_name
|
||||
assert client.triggers == triggers
|
||||
assert client.connection == connection_name
|
||||
assert client.entity_operations == {"entity": ["LIST"]}
|
||||
assert client.actions == ["action1"]
|
||||
@@ -105,7 +106,7 @@ class TestIntegrationClient:
|
||||
project,
|
||||
location,
|
||||
integration_name,
|
||||
trigger_name,
|
||||
triggers,
|
||||
mock_credentials,
|
||||
mock_connections_client,
|
||||
):
|
||||
@@ -126,7 +127,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=integration_name,
|
||||
trigger=trigger_name,
|
||||
triggers=triggers,
|
||||
connection=None,
|
||||
entity_operations=None,
|
||||
actions=None,
|
||||
@@ -143,7 +144,7 @@ class TestIntegrationClient:
|
||||
json={
|
||||
"apiTriggerResources": [{
|
||||
"integrationResource": integration_name,
|
||||
"triggerId": [trigger_name],
|
||||
"triggerId": triggers,
|
||||
}],
|
||||
"fileFormat": "JSON",
|
||||
},
|
||||
@@ -154,7 +155,7 @@ class TestIntegrationClient:
|
||||
project,
|
||||
location,
|
||||
integration_name,
|
||||
trigger_name,
|
||||
triggers,
|
||||
mock_connections_client,
|
||||
):
|
||||
with mock.patch.object(
|
||||
@@ -169,7 +170,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=integration_name,
|
||||
trigger=trigger_name,
|
||||
triggers=triggers,
|
||||
connection=None,
|
||||
entity_operations=None,
|
||||
actions=None,
|
||||
@@ -193,7 +194,7 @@ class TestIntegrationClient:
|
||||
project,
|
||||
location,
|
||||
integration_name,
|
||||
trigger_name,
|
||||
triggers,
|
||||
mock_credentials,
|
||||
status_code,
|
||||
response_text,
|
||||
@@ -217,7 +218,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=integration_name,
|
||||
trigger=trigger_name,
|
||||
triggers=triggers,
|
||||
connection=None,
|
||||
entity_operations=None,
|
||||
actions=None,
|
||||
@@ -226,10 +227,9 @@ class TestIntegrationClient:
|
||||
with pytest.raises(
|
||||
ValueError,
|
||||
match=(
|
||||
"Invalid request. Please check the provided values of"
|
||||
f" project\\({project}\\), location\\({location}\\),"
|
||||
f" integration\\({integration_name}\\) and"
|
||||
f" trigger\\({trigger_name}\\)."
|
||||
r"Invalid request\. Please check the provided values of"
|
||||
rf" project\({project}\), location\({location}\),"
|
||||
rf" integration\({integration_name}\)."
|
||||
),
|
||||
):
|
||||
client.get_openapi_spec_for_integration()
|
||||
@@ -239,7 +239,7 @@ class TestIntegrationClient:
|
||||
project,
|
||||
location,
|
||||
integration_name,
|
||||
trigger_name,
|
||||
triggers,
|
||||
mock_credentials,
|
||||
mock_connections_client,
|
||||
):
|
||||
@@ -261,7 +261,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=integration_name,
|
||||
trigger=trigger_name,
|
||||
triggers=triggers,
|
||||
connection=None,
|
||||
entity_operations=None,
|
||||
actions=None,
|
||||
@@ -275,7 +275,7 @@ class TestIntegrationClient:
|
||||
project,
|
||||
location,
|
||||
integration_name,
|
||||
trigger_name,
|
||||
triggers,
|
||||
mock_credentials,
|
||||
mock_connections_client,
|
||||
):
|
||||
@@ -293,7 +293,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=integration_name,
|
||||
trigger=trigger_name,
|
||||
triggers=triggers,
|
||||
connection=None,
|
||||
entity_operations=None,
|
||||
actions=None,
|
||||
@@ -311,7 +311,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=None,
|
||||
trigger=None,
|
||||
triggers=None,
|
||||
connection=connection_name,
|
||||
entity_operations=None,
|
||||
actions=None,
|
||||
@@ -356,7 +356,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=None,
|
||||
trigger=None,
|
||||
triggers=None,
|
||||
connection=connection_name,
|
||||
entity_operations=entity_operations,
|
||||
actions=None,
|
||||
@@ -425,7 +425,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=None,
|
||||
trigger=None,
|
||||
triggers=None,
|
||||
connection=connection_name,
|
||||
entity_operations=None,
|
||||
actions=actions,
|
||||
@@ -476,7 +476,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=None,
|
||||
trigger=None,
|
||||
triggers=None,
|
||||
connection=connection_name,
|
||||
entity_operations=entity_operations,
|
||||
actions=None,
|
||||
@@ -488,7 +488,7 @@ class TestIntegrationClient:
|
||||
client.get_openapi_spec_for_connection()
|
||||
|
||||
def test_get_access_token_with_service_account_json(
|
||||
self, project, location, integration_name, trigger_name, connection_name
|
||||
self, project, location, integration_name, triggers, connection_name
|
||||
):
|
||||
service_account_json = json.dumps({
|
||||
"client_email": "test@example.com",
|
||||
@@ -509,7 +509,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=integration_name,
|
||||
trigger=trigger_name,
|
||||
triggers=triggers,
|
||||
connection=connection_name,
|
||||
entity_operations=None,
|
||||
actions=None,
|
||||
@@ -528,7 +528,7 @@ class TestIntegrationClient:
|
||||
project,
|
||||
location,
|
||||
integration_name,
|
||||
trigger_name,
|
||||
triggers,
|
||||
connection_name,
|
||||
mock_credentials,
|
||||
):
|
||||
@@ -544,7 +544,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=integration_name,
|
||||
trigger=trigger_name,
|
||||
triggers=triggers,
|
||||
connection=connection_name,
|
||||
entity_operations=None,
|
||||
actions=None,
|
||||
@@ -554,7 +554,7 @@ class TestIntegrationClient:
|
||||
assert token == "test_token"
|
||||
|
||||
def test_get_access_token_no_valid_credentials(
|
||||
self, project, location, integration_name, trigger_name, connection_name
|
||||
self, project, location, integration_name, triggers, connection_name
|
||||
):
|
||||
with (
|
||||
mock.patch(
|
||||
@@ -570,7 +570,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=integration_name,
|
||||
trigger=trigger_name,
|
||||
triggers=triggers,
|
||||
connection=connection_name,
|
||||
entity_operations=None,
|
||||
actions=None,
|
||||
@@ -591,7 +591,7 @@ class TestIntegrationClient:
|
||||
project,
|
||||
location,
|
||||
integration_name,
|
||||
trigger_name,
|
||||
triggers,
|
||||
connection_name,
|
||||
mock_credentials,
|
||||
):
|
||||
@@ -601,7 +601,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=integration_name,
|
||||
trigger=trigger_name,
|
||||
triggers=triggers,
|
||||
connection=connection_name,
|
||||
entity_operations=None,
|
||||
actions=None,
|
||||
@@ -624,7 +624,7 @@ class TestIntegrationClient:
|
||||
project,
|
||||
location,
|
||||
integration_name,
|
||||
trigger_name,
|
||||
triggers,
|
||||
connection_name,
|
||||
mock_credentials,
|
||||
):
|
||||
@@ -642,7 +642,7 @@ class TestIntegrationClient:
|
||||
project=project,
|
||||
location=location,
|
||||
integration=integration_name,
|
||||
trigger=trigger_name,
|
||||
triggers=triggers,
|
||||
connection=connection_name,
|
||||
entity_operations=None,
|
||||
actions=None,
|
||||
|
||||
@@ -52,6 +52,24 @@ def mock_openapi_toolset():
|
||||
yield mock_toolset
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_openapi_toolset_with_multiple_tools_and_no_tools():
|
||||
with mock.patch(
|
||||
"google.adk.tools.application_integration_tool.application_integration_toolset.OpenAPIToolset"
|
||||
) as mock_toolset:
|
||||
mock_toolset_instance = mock.MagicMock()
|
||||
mock_rest_api_tool = mock.MagicMock(spec=rest_api_tool.RestApiTool)
|
||||
mock_rest_api_tool.name = "Test Tool"
|
||||
mock_rest_api_tool_2 = mock.MagicMock(spec=rest_api_tool.RestApiTool)
|
||||
mock_rest_api_tool_2.name = "Test Tool 2"
|
||||
mock_toolset_instance.get_tools.return_value = [
|
||||
mock_rest_api_tool,
|
||||
mock_rest_api_tool_2,
|
||||
]
|
||||
mock_toolset.return_value = mock_toolset_instance
|
||||
yield mock_toolset
|
||||
|
||||
|
||||
def get_mocked_parsed_operation(operation_id, attributes):
|
||||
mock_openapi_spec_parser_instance = mock.MagicMock()
|
||||
mock_parsed_operation = mock.MagicMock(spec=ParsedOperation)
|
||||
@@ -142,12 +160,12 @@ def test_initialization_with_integration_and_trigger(
|
||||
mock_openapi_toolset,
|
||||
):
|
||||
integration_name = "test-integration"
|
||||
trigger_name = "test-trigger"
|
||||
triggers = ["test-trigger"]
|
||||
toolset = ApplicationIntegrationToolset(
|
||||
project, location, integration=integration_name, trigger=trigger_name
|
||||
project, location, integration=integration_name, triggers=triggers
|
||||
)
|
||||
mock_integration_client.assert_called_once_with(
|
||||
project, location, integration_name, trigger_name, None, None, None, None
|
||||
project, location, integration_name, triggers, None, None, None, None
|
||||
)
|
||||
mock_integration_client.return_value.get_openapi_spec_for_integration.assert_called_once()
|
||||
mock_connections_client.assert_not_called()
|
||||
@@ -156,6 +174,58 @@ def test_initialization_with_integration_and_trigger(
|
||||
assert toolset.get_tools()[0].name == "Test Tool"
|
||||
|
||||
|
||||
def test_initialization_with_integration_and_list_of_triggers(
|
||||
project,
|
||||
location,
|
||||
mock_integration_client,
|
||||
mock_connections_client,
|
||||
mock_openapi_toolset_with_multiple_tools_and_no_tools,
|
||||
):
|
||||
integration_name = "test-integration"
|
||||
triggers = ["test-trigger1", "test-trigger2"]
|
||||
toolset = ApplicationIntegrationToolset(
|
||||
project, location, integration=integration_name, triggers=triggers
|
||||
)
|
||||
mock_integration_client.assert_called_once_with(
|
||||
project,
|
||||
location,
|
||||
integration_name,
|
||||
triggers,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
)
|
||||
mock_integration_client.return_value.get_openapi_spec_for_integration.assert_called_once()
|
||||
mock_connections_client.assert_not_called()
|
||||
mock_openapi_toolset_with_multiple_tools_and_no_tools.assert_called_once()
|
||||
assert len(toolset.get_tools()) == 2
|
||||
assert toolset.get_tools()[0].name == "Test Tool"
|
||||
assert toolset.get_tools()[1].name == "Test Tool 2"
|
||||
|
||||
|
||||
def test_initialization_with_integration_and_empty_trigger_list(
|
||||
project,
|
||||
location,
|
||||
mock_integration_client,
|
||||
mock_connections_client,
|
||||
mock_openapi_toolset_with_multiple_tools_and_no_tools,
|
||||
):
|
||||
integration_name = "test-integration"
|
||||
toolset = ApplicationIntegrationToolset(
|
||||
project, location, integration=integration_name
|
||||
)
|
||||
mock_integration_client.assert_called_once_with(
|
||||
project, location, integration_name, None, None, None, None, None
|
||||
)
|
||||
mock_integration_client.return_value.get_openapi_spec_for_integration.assert_called_once()
|
||||
mock_connections_client.assert_not_called()
|
||||
mock_openapi_toolset_with_multiple_tools_and_no_tools.assert_called_once()
|
||||
assert len(toolset.get_tools()) == 2
|
||||
assert toolset.get_tools()[0].name == "Test Tool"
|
||||
assert toolset.get_tools()[1].name == "Test Tool 2"
|
||||
|
||||
|
||||
def test_initialization_with_connection_and_entity_operations(
|
||||
project,
|
||||
location,
|
||||
@@ -250,7 +320,7 @@ def test_initialization_without_required_params(project, location):
|
||||
with pytest.raises(
|
||||
ValueError,
|
||||
match=(
|
||||
"Either \\(integration and trigger\\) or \\(connection and"
|
||||
"Invalid request, Either integration or \\(connection and"
|
||||
" \\(entity_operations or actions\\)\\) should be provided."
|
||||
),
|
||||
):
|
||||
@@ -259,25 +329,16 @@ def test_initialization_without_required_params(project, location):
|
||||
with pytest.raises(
|
||||
ValueError,
|
||||
match=(
|
||||
"Either \\(integration and trigger\\) or \\(connection and"
|
||||
"Invalid request, Either integration or \\(connection and"
|
||||
" \\(entity_operations or actions\\)\\) should be provided."
|
||||
),
|
||||
):
|
||||
ApplicationIntegrationToolset(project, location, integration="test")
|
||||
ApplicationIntegrationToolset(project, location, triggers=["test"])
|
||||
|
||||
with pytest.raises(
|
||||
ValueError,
|
||||
match=(
|
||||
"Either \\(integration and trigger\\) or \\(connection and"
|
||||
" \\(entity_operations or actions\\)\\) should be provided."
|
||||
),
|
||||
):
|
||||
ApplicationIntegrationToolset(project, location, trigger="test")
|
||||
|
||||
with pytest.raises(
|
||||
ValueError,
|
||||
match=(
|
||||
"Either \\(integration and trigger\\) or \\(connection and"
|
||||
"Invalid request, Either integration or \\(connection and"
|
||||
" \\(entity_operations or actions\\)\\) should be provided."
|
||||
),
|
||||
):
|
||||
@@ -305,19 +366,19 @@ def test_initialization_with_service_account_credentials(
|
||||
"universe_domain": "googleapis.com",
|
||||
})
|
||||
integration_name = "test-integration"
|
||||
trigger_name = "test-trigger"
|
||||
triggers = ["test-trigger"]
|
||||
toolset = ApplicationIntegrationToolset(
|
||||
project,
|
||||
location,
|
||||
integration=integration_name,
|
||||
trigger=trigger_name,
|
||||
triggers=triggers,
|
||||
service_account_json=service_account_json,
|
||||
)
|
||||
mock_integration_client.assert_called_once_with(
|
||||
project,
|
||||
location,
|
||||
integration_name,
|
||||
trigger_name,
|
||||
triggers,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
@@ -338,12 +399,12 @@ def test_initialization_without_explicit_service_account_credentials(
|
||||
project, location, mock_integration_client, mock_openapi_toolset
|
||||
):
|
||||
integration_name = "test-integration"
|
||||
trigger_name = "test-trigger"
|
||||
triggers = "test-trigger"
|
||||
toolset = ApplicationIntegrationToolset(
|
||||
project, location, integration=integration_name, trigger=trigger_name
|
||||
project, location, integration=integration_name, triggers=triggers
|
||||
)
|
||||
mock_integration_client.assert_called_once_with(
|
||||
project, location, integration_name, trigger_name, None, None, None, None
|
||||
project, location, integration_name, triggers, None, None, None, None
|
||||
)
|
||||
mock_openapi_toolset.assert_called_once()
|
||||
_, kwargs = mock_openapi_toolset.call_args
|
||||
@@ -355,9 +416,9 @@ def test_get_tools(
|
||||
project, location, mock_integration_client, mock_openapi_toolset
|
||||
):
|
||||
integration_name = "test-integration"
|
||||
trigger_name = "test-trigger"
|
||||
triggers = ["test-trigger"]
|
||||
toolset = ApplicationIntegrationToolset(
|
||||
project, location, integration=integration_name, trigger=trigger_name
|
||||
project, location, integration=integration_name, triggers=triggers
|
||||
)
|
||||
tools = toolset.get_tools()
|
||||
assert len(tools) == 1
|
||||
|
||||
Reference in New Issue
Block a user