"""
多维表格数据表测试
测试数据表的创建功能
"""
import pytest
import json
import time
from yuppie_mcp_feishu.tools.bitable_app import create_bitable_table
class TestBitableTable:
"""多维表格数据表测试类"""
@pytest.mark.integration
def test_create_bitable_table(self, default_app_token):
"""
BIT-003-1: 创建空字段表
测试创建不带字段定义的数据表
依赖: default_app_token fixture
"""
timestamp = int(time.time())
table_name = f"测试数据表_{timestamp}"
result = create_bitable_table(
app_token=default_app_token,
table_name=table_name,
fields=None, # 不指定字段,使用默认
)
data = json.loads(result)
# 验证返回数据
assert "table_id" in data, "响应中应包含 table_id"
table_id = data["table_id"]
assert table_id, "table_id 不应为空"
print(f"✅ 创建成功(空字段): {table_name} ({table_id})")
@pytest.mark.integration
def test_create_table_with_fields(self, default_app_token):
"""
BIT-003-2: 创建带字段定义的表
测试创建带自定义字段定义的数据表
注意: 字段类型请参考飞书官方文档
"""
timestamp = int(time.time())
table_name = f"测试数据表_带字段_{timestamp}"
# 定义字段(示例:文本字段)
# 实际使用时需要根据飞书 API 文档定义字段
fields = [
{
"field_name": "姓名",
"type": 1, # 文本类型
"is_primary": True,
},
{
"field_name": "年龄",
"type": 2, # 数字类型
},
]
result = create_bitable_table(
app_token=default_app_token,
table_name=table_name,
fields=fields,
)
data = json.loads(result)
# 验证返回数据(注意:可能返回错误,因为字段定义可能不准确)
if "table_id" in data:
table_id = data["table_id"]
assert table_id, "table_id 不应为空"
print(f"✅ 创建成功(带字段): {table_name} ({table_id})")
else:
# 如果失败,跳过测试(可能是因为字段定义不正确)
pytest.skip(f"创建带字段的表失败: {data.get('msg')}")
@pytest.mark.integration
def test_create_table_invalid_token(self):
"""
BIT-003-3: 创建失败场景(无效app_token)
测试使用无效 app_token 创建表的错误处理
"""
timestamp = int(time.time())
table_name = f"测试数据表_错误测试_{timestamp}"
result = create_bitable_table(
app_token="invalid_app_token_xyz",
table_name=table_name,
fields=None,
)
data = json.loads(result)
# 验证错误响应
# 成功的响应包含 success: true,失败时不包含
# 所以我们检查是否包含 table_id
if "table_id" not in data:
# 预期的失败情况
print(f"✅ 正确处理了无效token: {data.get('msg', 'No error msg')}")
else:
# 如果成功创建了表(不应该发生),测试失败
pytest.fail("不应能使用无效token创建表")