arcade-mcp/toolkits/notion/tests/test_tools_pages.py
Eric Gustin 7edaa0a996
Update Notion Toolkit (#309)
1. The Arcade Worker doesn't like it when the package name is different
than the directory name. This PR renames the directory from
`arcade_notion` to `arcade_notion_toolkit`
2. `Notion` is not a well-known provider name in `arcade-ai==1.0.5`,
I've updated the dep to represent this.
2025-03-17 21:15:00 -07:00

169 lines
5.5 KiB
Python

import pytest
# Simulates a single block with no children
fake_get_next_page_simple = (
{
"results": [
{
"object": "block",
"id": "block1",
"has_children": False,
"type": "paragraph",
"paragraph": {
"rich_text": [
{
"plain_text": "Hello World",
"type": "text",
"text": {"content": "Hello World", "link": None},
"annotations": {
"bold": False,
"italic": False,
"underline": False,
"strikethrough": False,
"code": False,
"color": "default",
},
"href": None,
}
]
},
}
]
},
False,
None,
)
# Simulates a parent block with a child block
fake_get_next_page_nested = (
{
"results": [
{
"object": "block",
"id": "parent_block",
"has_children": True,
"type": "paragraph",
"paragraph": {
"rich_text": [
{
"plain_text": "Parent Block",
"type": "text",
"text": {"content": "Parent Block", "link": None},
"annotations": {
"bold": False,
"italic": False,
"underline": False,
"strikethrough": False,
"code": False,
"color": "default",
},
"href": None,
}
]
},
}
]
},
False,
None,
)
fake_get_next_page_parent_block = (
{
"results": [
{
"object": "block",
"id": "child_block",
"has_children": False,
"type": "paragraph",
"paragraph": {
"rich_text": [
{
"plain_text": "Child Block",
"type": "text",
"text": {"content": "Child Block", "link": None},
"annotations": {
"bold": False,
"italic": False,
"underline": False,
"strikethrough": False,
"code": False,
"color": "default",
},
"href": None,
}
]
},
}
]
},
False,
None,
)
@pytest.fixture
def setup_notion_pages(monkeypatch):
from arcade_notion_toolkit.tools import pages
monkeypatch.setattr(pages, "get_headers", lambda ctx: {"Authorization": "Bearer test"})
monkeypatch.setattr(
pages, "get_url", lambda endpoint, block_id=None: f"https://dummy/{block_id}"
)
return pages
@pytest.mark.asyncio
async def test_get_page_content_by_id_simple(mock_context, monkeypatch, setup_notion_pages):
pages = setup_notion_pages
# Patch get_object_metadata to return a dummy page with title 'Test Page'
async def fake_get_object_metadata(context, object_id=None, **kwargs):
return {
"id": object_id,
"object": "page",
"properties": {"title": {"title": [{"plain_text": "Test Page"}]}},
}
monkeypatch.setattr(pages, "get_object_metadata", fake_get_object_metadata)
# Patch get_next_page to
async def fake_get_next_page(client, url, headers, params, cursor):
return fake_get_next_page_simple
monkeypatch.setattr(pages, "get_next_page", fake_get_next_page)
# Call the function under test
result = await pages.get_page_content_by_id(mock_context, "test_page_id")
expected = "# Test Page\nHello World \n"
assert result == expected
@pytest.mark.asyncio
async def test_get_page_content_by_id_nested(mock_context, monkeypatch, setup_notion_pages):
pages = setup_notion_pages
# Patch get_object_metadata to return a dummy page with title 'Test Nested'
async def fake_get_object_metadata(context, object_id=None, **kwargs):
return {
"id": object_id,
"object": "page",
"properties": {"title": {"title": [{"plain_text": "Test Nested"}]}},
}
monkeypatch.setattr(pages, "get_object_metadata", fake_get_object_metadata)
# Patch get_next_page
async def fake_get_next_page(client, url, headers, params, cursor):
if url == "https://dummy/test_nested":
return fake_get_next_page_nested
elif url == "https://dummy/parent_block":
return fake_get_next_page_parent_block
return ({"results": []}, False, None)
monkeypatch.setattr(pages, "get_next_page", fake_get_next_page)
# Call the function under test
result = await pages.get_page_content_by_id(mock_context, "test_nested")
expected = "# Test Nested\nParent Block \n Child Block \n"
assert result == expected