Skip to main content
Glama

Notion API MCP Server

test_responses.py9.05 kB
"""Test response models and validation.""" import pytest from datetime import datetime from pydantic import ValidationError from notion_api_mcp.models.responses import ( User, Parent, DatabaseObject, PageObject, BlockObject, PaginatedList, DatabaseList, PageList, BlockList, ErrorResponse, SearchResponse, PropertyItemResponse, PropertyItemList, TodoResponse, TodoListResponse ) from notion_api_mcp.models.properties import ( PropertySchema, PropertyValue, TitleProperty, RichTextObject, RichTextContent, RichTextProperty, DateValue, DateProperty, SelectOption, SelectProperty, MultiSelectProperty ) # Test User Model def test_user_model(): """Test User model validation.""" # Valid user user = User( object="user", id="user_123", type="person", name="Test User", avatar_url="https://example.com/avatar.jpg" ) assert user.id == "user_123" assert user.name == "Test User" # Invalid object type with pytest.raises(ValidationError): User(object="invalid", id="user_123", type="person") # Test Parent Model def test_parent_model(): """Test Parent model validation.""" # Page parent parent = Parent(type="page_id", page_id="page_123") assert parent.type == "page_id" assert parent.page_id == "page_123" # Database parent parent = Parent(type="database_id", database_id="db_123") assert parent.type == "database_id" assert parent.database_id == "db_123" # Workspace parent parent = Parent(type="workspace", workspace=True) assert parent.type == "workspace" assert parent.workspace is True # Test DatabaseObject Model def test_database_object(): """Test DatabaseObject model validation.""" now = datetime.now() db = DatabaseObject( object="database", id="db_123", created_time=now, last_edited_time=now, title=[{"text": {"content": "Test DB"}}], properties={ "Name": PropertySchema( id="title", name="Name", type="title" ) }, parent=Parent(type="workspace", workspace=True), url="https://notion.so/db_123" ) assert db.id == "db_123" assert db.title[0]["text"]["content"] == "Test DB" assert isinstance(db.properties["Name"], PropertySchema) # Test PageObject Model def test_page_object(): """Test PageObject model validation.""" now = datetime.now() user = User(object="user", id="user_123", type="person") page = PageObject( object="page", id="page_123", created_time=now, last_edited_time=now, created_by=user, last_edited_by=user, parent=Parent(type="database_id", database_id="db_123"), archived=False, properties={ "Title": PropertyValue( id="title", type="title", value=TitleProperty(title=[ RichTextObject(text=RichTextContent(content="Test Page")) ]) ) }, url="https://notion.so/page_123" ) assert page.id == "page_123" assert isinstance(page.properties["Title"], PropertyValue) assert page.properties["Title"].value.title[0].text.content == "Test Page" # Test BlockObject Model def test_block_object(): """Test BlockObject model validation.""" now = datetime.now() block = BlockObject( object="block", id="block_123", type="paragraph", created_time=now, last_edited_time=now, has_children=False, archived=False, type_content={ "rich_text": [{"text": {"content": "Test content"}}] } ) assert block.id == "block_123" assert block.content_type == "paragraph" assert "rich_text" in block.content # Test PaginatedList Models def test_paginated_lists(): """Test paginated list models.""" now = datetime.now() user = User(object="user", id="user_123", type="person") # DatabaseList db_list = DatabaseList( object="list", type="database", results=[ DatabaseObject( object="database", id="db_123", created_time=now, last_edited_time=now, title=[{"text": {"content": "Test DB"}}], properties={}, parent=Parent(type="workspace", workspace=True), url="https://notion.so/db_123" ) ], next_cursor="cursor_123", has_more=True ) assert db_list.type == "database" assert len(db_list.results) == 1 assert db_list.next_cursor == "cursor_123" # PageList page_list = PageList( object="list", type="page", results=[ PageObject( object="page", id="page_123", created_time=now, last_edited_time=now, created_by=user, last_edited_by=user, parent=Parent(type="database_id", database_id="db_123"), archived=False, properties={}, url="https://notion.so/page_123" ) ], has_more=False ) assert page_list.type == "page" assert len(page_list.results) == 1 assert not page_list.has_more # Test Error Response def test_error_response(): """Test ErrorResponse model.""" error = ErrorResponse( object="error", status=400, code="validation_error", message="Invalid request" ) assert error.status == 400 assert error.code == "validation_error" assert error.message == "Invalid request" # Test TodoResponse def test_todo_response(): """Test TodoResponse model and conversion.""" now = datetime.now() user = User(object="user", id="user_123", type="person", name="Test User") # Create a page object with todo properties page = PageObject( object="page", id="page_123", created_time=now, last_edited_time=now, created_by=user, last_edited_by=user, parent=Parent(type="database_id", database_id="db_123"), archived=False, url="https://notion.so/page_123", properties={ "Task": PropertyValue( id="title", type="title", value=TitleProperty(title=[ RichTextObject(text=RichTextContent(content="Test Task")) ]) ), "Description": PropertyValue( id="rich_text", type="rich_text", value=RichTextProperty(rich_text=[ RichTextObject(text=RichTextContent(content="Test Description")) ]) ), "Due Date": PropertyValue( id="date", type="date", value=DateProperty(date=DateValue(start=now)) ), "Priority": PropertyValue( id="select", type="select", value=SelectProperty(select=SelectOption(name="high")) ), "Tags": PropertyValue( id="multi_select", type="multi_select", value=MultiSelectProperty(multi_select=[ SelectOption(name="tag1"), SelectOption(name="tag2") ]) ), "Status": PropertyValue( id="status", type="status", value=SelectProperty(select=SelectOption(name="in_progress")) ) } ) # Convert to TodoResponse todo = TodoResponse.from_page_object(page) assert todo.id == "page_123" assert todo.task == "Test Task" assert todo.description == "Test Description" assert todo.due_date == now assert todo.priority == "high" assert todo.tags == ["tag1", "tag2"] assert todo.status == "in_progress" assert todo.created_by == "Test User" # Test TodoListResponse def test_todo_list_response(): """Test TodoListResponse model.""" now = datetime.now() todo_list = TodoListResponse( todos=[ TodoResponse( id="todo_123", url="https://notion.so/todo_123", task="Test Task", description="Test Description", due_date=now, priority="high", tags=["tag1", "tag2"], status="in_progress", created_time=now, last_edited_time=now, created_by="Test User", last_edited_by="Test User" ) ], next_cursor="cursor_123", has_more=True ) assert len(todo_list.todos) == 1 assert todo_list.next_cursor == "cursor_123" assert todo_list.has_more

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pbohannon/notion-api-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server