test: 补充知识处理、检索与 Agent 回归用例
覆盖切块、向量检索、工具调用和历史预算;模型相关用例使用桩。
This commit is contained in:
1 parent
2dd062787d
commit
d9fe727c3f
123 files changed
+29005
No files matched your search
@@ -0,0 +1,214 @@
|
||||
"""
|
||||
Copyright 2024-2026 ReplyPier
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from app.models.agent import Agent, AgentType
|
||||
from app.repositories.agent import AgentRepository
|
||||
import json
|
||||
|
||||
@pytest.fixture
|
||||
def agent_repo(db):
|
||||
"""Create an agent repository instance"""
|
||||
return AgentRepository(db)
|
||||
|
||||
def test_create_agent(agent_repo, test_organization_id):
|
||||
"""Test creating a new agent"""
|
||||
name = "Test Agent"
|
||||
agent_type = AgentType.CUSTOMER_SUPPORT
|
||||
instructions = ["Instruction 1", "Instruction 2"]
|
||||
tools = [{"name": "tool1", "description": "Tool 1"}]
|
||||
description = "Test agent description"
|
||||
|
||||
agent = agent_repo.create_agent(
|
||||
name=name,
|
||||
agent_type=agent_type,
|
||||
instructions=instructions,
|
||||
org_id=test_organization_id,
|
||||
description=description,
|
||||
tools=tools,
|
||||
is_default=True,
|
||||
is_active=True
|
||||
)
|
||||
|
||||
assert agent.name == name
|
||||
assert agent.agent_type == agent_type
|
||||
assert agent.instructions == instructions
|
||||
assert agent.organization_id == test_organization_id
|
||||
assert agent.description == description
|
||||
assert json.loads(agent.tools) == tools
|
||||
assert agent.is_default is True
|
||||
assert agent.is_active is True
|
||||
|
||||
def test_create_agent_with_string_instructions(agent_repo, test_organization_id):
|
||||
"""Test creating an agent with string instructions"""
|
||||
instruction = "Single instruction"
|
||||
|
||||
agent = agent_repo.create_agent(
|
||||
name="Test Agent",
|
||||
agent_type=AgentType.CUSTOMER_SUPPORT,
|
||||
instructions=instruction,
|
||||
org_id=test_organization_id
|
||||
)
|
||||
|
||||
assert agent.instructions == [instruction]
|
||||
|
||||
def test_get_agent(agent_repo, test_organization_id):
|
||||
"""Test retrieving an agent by ID"""
|
||||
# Create test agent
|
||||
agent = agent_repo.create_agent(
|
||||
name="Test Agent",
|
||||
agent_type=AgentType.CUSTOMER_SUPPORT,
|
||||
instructions=["Test instruction"],
|
||||
org_id=test_organization_id
|
||||
)
|
||||
|
||||
# Retrieve agent
|
||||
retrieved_agent = agent_repo.get_agent(agent.id)
|
||||
assert retrieved_agent.id == agent.id
|
||||
assert retrieved_agent.name == agent.name
|
||||
|
||||
def test_get_org_agents(agent_repo, test_organization_id):
|
||||
"""Test retrieving all agents for an organization"""
|
||||
# Create multiple test agents
|
||||
agent1 = agent_repo.create_agent(
|
||||
name="Agent 1",
|
||||
agent_type=AgentType.CUSTOMER_SUPPORT,
|
||||
instructions=["Instruction"],
|
||||
org_id=test_organization_id,
|
||||
is_active=True
|
||||
)
|
||||
agent2 = agent_repo.create_agent(
|
||||
name="Agent 2",
|
||||
agent_type=AgentType.CUSTOMER_SUPPORT,
|
||||
instructions=["Instruction"],
|
||||
org_id=test_organization_id,
|
||||
is_active=False
|
||||
)
|
||||
|
||||
# Test getting all agents
|
||||
all_agents = agent_repo.get_org_agents(test_organization_id, active_only=False)
|
||||
assert len(all_agents) == 2
|
||||
|
||||
# Test getting only active agents
|
||||
active_agents = agent_repo.get_org_agents(test_organization_id, active_only=True)
|
||||
assert len(active_agents) == 1
|
||||
assert active_agents[0].id == agent1.id
|
||||
|
||||
def test_get_default_agent(agent_repo, test_organization_id):
|
||||
"""Test retrieving default agent for an organization"""
|
||||
# Create multiple agents, one default
|
||||
default_agent = agent_repo.create_agent(
|
||||
name="Default Agent",
|
||||
agent_type=AgentType.CUSTOMER_SUPPORT,
|
||||
instructions=["Instruction"],
|
||||
org_id=test_organization_id,
|
||||
is_default=True,
|
||||
is_active=True
|
||||
)
|
||||
agent_repo.create_agent(
|
||||
name="Non-default Agent",
|
||||
agent_type=AgentType.CUSTOMER_SUPPORT,
|
||||
instructions=["Instruction"],
|
||||
org_id=test_organization_id,
|
||||
is_default=False,
|
||||
is_active=True
|
||||
)
|
||||
|
||||
# Get default agent
|
||||
retrieved_default = agent_repo.get_default_agents(test_organization_id)
|
||||
assert retrieved_default.id == default_agent.id
|
||||
assert retrieved_default.is_default is True
|
||||
|
||||
def test_update_agent(agent_repo, test_organization_id):
|
||||
"""Test updating an agent"""
|
||||
# Create test agent
|
||||
agent = agent_repo.create_agent(
|
||||
name="Test Agent",
|
||||
agent_type=AgentType.CUSTOMER_SUPPORT,
|
||||
instructions=["Original instruction"],
|
||||
org_id=test_organization_id
|
||||
)
|
||||
|
||||
# Update agent
|
||||
new_name = "Updated Agent"
|
||||
new_instructions = ["Updated instruction"]
|
||||
updated_agent = agent_repo.update_agent(
|
||||
agent.id,
|
||||
name=new_name,
|
||||
instructions=new_instructions
|
||||
)
|
||||
|
||||
assert updated_agent.name == new_name
|
||||
assert updated_agent.instructions == new_instructions
|
||||
|
||||
def test_delete_agent(agent_repo, test_organization_id):
|
||||
"""Test soft deleting an agent"""
|
||||
# Create test agent
|
||||
agent = agent_repo.create_agent(
|
||||
name="Test Agent",
|
||||
agent_type=AgentType.CUSTOMER_SUPPORT,
|
||||
instructions=["Instruction"],
|
||||
org_id=test_organization_id,
|
||||
is_active=True
|
||||
)
|
||||
|
||||
# Delete agent
|
||||
success = agent_repo.delete_agent(agent.id)
|
||||
assert success is True
|
||||
|
||||
# Verify agent is inactive
|
||||
deleted_agent = agent_repo.get_agent(agent.id)
|
||||
assert deleted_agent.is_active is False
|
||||
|
||||
def test_get_active_agents(agent_repo, test_organization_id):
|
||||
"""Test retrieving active agents"""
|
||||
# Create agents with different active states
|
||||
active_agent = agent_repo.create_agent(
|
||||
name="Active Agent",
|
||||
agent_type=AgentType.CUSTOMER_SUPPORT,
|
||||
instructions=["Instruction"],
|
||||
org_id=test_organization_id,
|
||||
is_active=True
|
||||
)
|
||||
agent_repo.create_agent(
|
||||
name="Inactive Agent",
|
||||
agent_type=AgentType.CUSTOMER_SUPPORT,
|
||||
instructions=["Instruction"],
|
||||
org_id=test_organization_id,
|
||||
is_active=False
|
||||
)
|
||||
|
||||
# Get active agents
|
||||
active_agents = agent_repo.get_active_agents(test_organization_id)
|
||||
assert len(active_agents) == 1
|
||||
assert active_agents[0].id == active_agent.id
|
||||
|
||||
def test_get_by_agent_id(agent_repo, test_organization_id):
|
||||
"""Test retrieving agent by ID with relationships"""
|
||||
# Create test agent
|
||||
agent = agent_repo.create_agent(
|
||||
name="Test Agent",
|
||||
agent_type=AgentType.CUSTOMER_SUPPORT,
|
||||
instructions=["Instruction"],
|
||||
org_id=test_organization_id
|
||||
)
|
||||
|
||||
# Retrieve agent with relationships
|
||||
retrieved_agent = agent_repo.get_by_agent_id(str(agent.id))
|
||||
assert retrieved_agent.id == agent.id
|
||||
assert retrieved_agent.name == agent.name
|
||||
# Note: Additional relationship assertions would go here if the test database
|
||||
# included related organization and group records
|
||||
Reference in new issue
Block a user