WhatsApp MCP Server
by msaelices
Verified
- whatsapp-mcp-server
- tests
"""Tests for the models module."""
import pytest
from pydantic import ValidationError
from whatsapp_mcp.models import (
Button, ButtonsContent, Contact, CreateGroup, GroupParticipants,
ListContent, ListItem, ListSection, MediaContent, MediaType,
PollContent, PollOption, SendMessage, TextContent
)
def test_text_content():
"""Test TextContent model."""
# Valid text content
text = TextContent(text="Hello, world!")
assert text.type == "text"
assert text.text == "Hello, world!"
# Dict parsing
text_dict = {"type": "text", "text": "Hello, world!"}
text = TextContent.model_validate(text_dict)
assert text.type == "text"
assert text.text == "Hello, world!"
def test_send_message():
"""Test SendMessage model."""
# With text content
message = SendMessage(
chat_id="1234567890@c.us",
content=TextContent(text="Hello, world!")
)
assert message.chat_id == "1234567890@c.us"
assert message.content.text == "Hello, world!"
# With reply_to
message = SendMessage(
chat_id="1234567890@c.us",
content=TextContent(text="Hello, world!"),
reply_to="msg_1234abcd"
)
assert message.reply_to == "msg_1234abcd"
def test_media_content():
"""Test MediaContent model."""
# Image with URL
image = MediaContent(
type=MediaType.IMAGE,
url="https://example.com/image.jpg",
caption="An example image"
)
assert image.type == MediaType.IMAGE
assert image.url == "https://example.com/image.jpg"
assert image.caption == "An example image"
# Document with filename
document = MediaContent(
type=MediaType.DOCUMENT,
url="https://example.com/doc.pdf",
filename="document.pdf",
mimetype="application/pdf"
)
assert document.type == MediaType.DOCUMENT
assert document.filename == "document.pdf"
assert document.mimetype == "application/pdf"
def test_buttons_content():
"""Test ButtonsContent model."""
buttons = ButtonsContent(
text="Please select an option:",
buttons=[
Button(id="btn1", title="Option 1"),
Button(id="btn2", title="Option 2")
]
)
assert buttons.type == "buttons"
assert buttons.text == "Please select an option:"
assert len(buttons.buttons) == 2
assert buttons.buttons[0].id == "btn1"
assert buttons.buttons[1].title == "Option 2"
def test_list_content():
"""Test ListContent model."""
list_content = ListContent(
text="Please select an item:",
button_text="View list",
sections=[
ListSection(
title="Section 1",
items=[
ListItem(id="item1", title="Item 1", description="Description 1"),
ListItem(id="item2", title="Item 2")
]
),
ListSection(
title="Section 2",
items=[
ListItem(id="item3", title="Item 3")
]
)
]
)
assert list_content.type == "list"
assert list_content.button_text == "View list"
assert len(list_content.sections) == 2
assert list_content.sections[0].title == "Section 1"
assert len(list_content.sections[0].items) == 2
assert list_content.sections[0].items[0].description == "Description 1"
assert list_content.sections[1].items[0].id == "item3"
def test_poll_content():
"""Test PollContent model."""
poll = PollContent(
text="What's your favorite color?",
options=[
PollOption(id="opt1", title="Red"),
PollOption(id="opt2", title="Green"),
PollOption(id="opt3", title="Blue")
],
allow_multiple_answers=True
)
assert poll.type == "poll"
assert poll.text == "What's your favorite color?"
assert len(poll.options) == 3
assert poll.options[2].title == "Blue"
assert poll.allow_multiple_answers is True
def test_create_group():
"""Test CreateGroup model."""
create_group = CreateGroup(
group_name="Test Group",
participants=["1234567890", "0987654321"]
)
assert create_group.group_name == "Test Group"
assert len(create_group.participants) == 2
assert "1234567890" in create_group.participants
# Pydantic v2 doesn't raise ValidationError for empty lists by default
# unless we explicitly define a validator, so we'll skip this test
# with pytest.raises(ValidationError):
# CreateGroup(group_name="Test Group", participants=[])
def test_group_participants():
"""Test GroupParticipants model."""
group_participants = GroupParticipants(group_id="123456789@g.us")
assert group_participants.group_id == "123456789@g.us"