|
13 | 13 | get_component_definition, |
14 | 14 | get_custom_components, |
15 | 15 | list_component_families, |
| 16 | + run_component, |
16 | 17 | search_component_definition, |
17 | 18 | ) |
18 | 19 | from deepset_mcp.tools.haystack_service_models import ( |
@@ -546,3 +547,74 @@ async def test_get_custom_components_api_error() -> None: |
546 | 547 | assert isinstance(result, str) |
547 | 548 | assert "Error retrieving component schemas" in result |
548 | 549 | assert "API Error" in result |
| 550 | + |
| 551 | + |
| 552 | +@pytest.mark.asyncio |
| 553 | +async def test_run_component_success() -> None: |
| 554 | + run_response = { |
| 555 | + "output": { |
| 556 | + "prompt": "Hello, world! This is a test prompt.", |
| 557 | + } |
| 558 | + } |
| 559 | + resource = FakeHaystackServiceResource(run_component_response=run_response) |
| 560 | + client = FakeClient(resource=resource) |
| 561 | + |
| 562 | + result = await run_component( |
| 563 | + client=client, |
| 564 | + component_type="haystack.components.builders.PromptBuilder", |
| 565 | + init_params={"template": "Hello, {{name}}! This is a {{type}} prompt."}, |
| 566 | + input_data={"name": "world", "type": "test"}, |
| 567 | + ) |
| 568 | + |
| 569 | + assert isinstance(result, dict) |
| 570 | + assert "output" in result |
| 571 | + assert result["output"]["prompt"] == "Hello, world! This is a test prompt." |
| 572 | + |
| 573 | + |
| 574 | +@pytest.mark.asyncio |
| 575 | +async def test_run_component_with_input_types() -> None: |
| 576 | + run_response = {"output": {"documents": [{"content": "Test document", "meta": {}}]}} |
| 577 | + resource = FakeHaystackServiceResource(run_component_response=run_response) |
| 578 | + client = FakeClient(resource=resource) |
| 579 | + |
| 580 | + result = await run_component( |
| 581 | + client=client, |
| 582 | + component_type="haystack.components.readers.TextFileReader", |
| 583 | + init_params={}, |
| 584 | + input_data={"sources": ["/path/to/file.txt"]}, |
| 585 | + input_types={"sources": "List[str]"}, |
| 586 | + ) |
| 587 | + |
| 588 | + assert isinstance(result, dict) |
| 589 | + assert "output" in result |
| 590 | + assert "documents" in result["output"] |
| 591 | + assert len(result["output"]["documents"]) == 1 |
| 592 | + assert result["output"]["documents"][0]["content"] == "Test document" |
| 593 | + |
| 594 | + |
| 595 | +@pytest.mark.asyncio |
| 596 | +async def test_run_component_minimal_params() -> None: |
| 597 | + run_response = {"output": {"result": "success"}} |
| 598 | + resource = FakeHaystackServiceResource(run_component_response=run_response) |
| 599 | + client = FakeClient(resource=resource) |
| 600 | + |
| 601 | + result = await run_component(client=client, component_type="haystack.components.readers.HTMLReader") |
| 602 | + |
| 603 | + assert isinstance(result, dict) |
| 604 | + assert result["output"]["result"] == "success" |
| 605 | + |
| 606 | + |
| 607 | +@pytest.mark.asyncio |
| 608 | +async def test_run_component_api_error() -> None: |
| 609 | + resource = FakeHaystackServiceResource(exception=UnexpectedAPIError(status_code=500, message="API Error")) |
| 610 | + client = FakeClient(resource=resource) |
| 611 | + |
| 612 | + result = await run_component( |
| 613 | + client=client, |
| 614 | + component_type="haystack.components.builders.PromptBuilder", |
| 615 | + init_params={"template": "Hello, {{name}}!"}, |
| 616 | + ) |
| 617 | + |
| 618 | + assert isinstance(result, str) |
| 619 | + assert "Failed to run component" in result |
| 620 | + assert "API Error" in result |
0 commit comments