ec2b666284
Continuous Integration / Pre-commit Linter (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.10) (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.11) (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.12) (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.13) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.10) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.11) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.12) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.13) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.14) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.10) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.11) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.12) (push) Has been cancelled
Copybara PR Handler / close-imported-pr (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.13) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.14) (push) Has been cancelled
134 lines
4.8 KiB
Python
134 lines
4.8 KiB
Python
# Copyright 2026 Google LLC
|
|
#
|
|
# 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.
|
|
|
|
from __future__ import annotations
|
|
|
|
from google.adk.errors.not_found_error import NotFoundError
|
|
from google.adk.evaluation.simulation.user_simulator_personas import UserBehavior
|
|
from google.adk.evaluation.simulation.user_simulator_personas import UserPersona
|
|
from google.adk.evaluation.simulation.user_simulator_personas import UserPersonaRegistry
|
|
import pytest
|
|
|
|
|
|
class TestUserBehavior:
|
|
"""Test cases for UserBehavior."""
|
|
|
|
def test_create_user_behavior(self):
|
|
"""Tests UserBehavior creation."""
|
|
behavior = UserBehavior(
|
|
name="test_behavior",
|
|
description="Test behavior description.",
|
|
behavior_instructions=["instruction1", "instruction2"],
|
|
violation_rubrics=["violation1", "violation2"],
|
|
)
|
|
assert behavior.name == "test_behavior"
|
|
assert behavior.description == "Test behavior description."
|
|
assert behavior.behavior_instructions == ["instruction1", "instruction2"]
|
|
assert behavior.violation_rubrics == ["violation1", "violation2"]
|
|
|
|
def test_get_behavior_instructions_str(self):
|
|
"""Tests get_behavior_instructions_str method."""
|
|
behavior = UserBehavior(
|
|
name="test_behavior",
|
|
description="Test behavior description.",
|
|
behavior_instructions=["instruction1", "instruction2"],
|
|
violation_rubrics=[],
|
|
)
|
|
assert (
|
|
behavior.get_behavior_instructions_str()
|
|
== " * instruction1\n * instruction2"
|
|
)
|
|
|
|
def test_get_violation_rubrics_str(self):
|
|
"""Tests get_violation_rubrics_str method."""
|
|
behavior = UserBehavior(
|
|
name="test_behavior",
|
|
description="Test behavior description.",
|
|
behavior_instructions=[],
|
|
violation_rubrics=["violation1", "violation2"],
|
|
)
|
|
assert (
|
|
behavior.get_violation_rubrics_str() == " * violation1\n * violation2"
|
|
)
|
|
|
|
|
|
class TestUserPersona:
|
|
"""Test cases for UserPersona."""
|
|
|
|
def test_create_user_persona(self):
|
|
"""Tests UserPersona creation."""
|
|
behavior = UserBehavior(
|
|
name="test_behavior",
|
|
description="Test behavior description.",
|
|
behavior_instructions=["instruction1"],
|
|
violation_rubrics=["violation1"],
|
|
)
|
|
persona = UserPersona(
|
|
id="test_persona",
|
|
description="Test persona description.",
|
|
behaviors=[behavior],
|
|
)
|
|
assert persona.id == "test_persona"
|
|
assert persona.description == "Test persona description."
|
|
assert persona.behaviors == [behavior]
|
|
|
|
|
|
class TestUserPersonaRegistry:
|
|
"""Test cases for UserPersonaRegistry."""
|
|
|
|
def test_register_and_get_persona(self):
|
|
"""Tests register_persona and get_persona methods."""
|
|
registry = UserPersonaRegistry()
|
|
persona = UserPersona(
|
|
id="test_persona", description="Test persona", behaviors=[]
|
|
)
|
|
registry.register_persona("persona1", persona)
|
|
assert registry.get_persona("persona1") == persona
|
|
|
|
def test_get_persona_not_found(self):
|
|
"""Tests get_persona for a non-existent persona."""
|
|
registry = UserPersonaRegistry()
|
|
with pytest.raises(NotFoundError, match="persona2 not found in registry."):
|
|
registry.get_persona("persona2")
|
|
|
|
def test_update_persona(self):
|
|
"""Tests updating an existing persona in the registry."""
|
|
registry = UserPersonaRegistry()
|
|
persona1 = UserPersona(
|
|
id="test_persona1", description="Test persona 1", behaviors=[]
|
|
)
|
|
persona2 = UserPersona(
|
|
id="test_persona2", description="Test persona 2", behaviors=[]
|
|
)
|
|
registry.register_persona("persona1", persona1)
|
|
assert registry.get_persona("persona1") == persona1
|
|
registry.register_persona("persona1", persona2)
|
|
assert registry.get_persona("persona1") == persona2
|
|
|
|
def test_get_registered_personas(self):
|
|
"""Tests get_registered_personas method."""
|
|
registry = UserPersonaRegistry()
|
|
persona1 = UserPersona(
|
|
id="test_persona1", description="Test persona 1", behaviors=[]
|
|
)
|
|
persona2 = UserPersona(
|
|
id="test_persona2", description="Test persona 2", behaviors=[]
|
|
)
|
|
registry.register_persona("persona1", persona1)
|
|
registry.register_persona("persona2", persona2)
|
|
registered_personas = registry.get_registered_personas()
|
|
assert len(registered_personas) == 2
|
|
assert persona1 in registered_personas
|
|
assert persona2 in registered_personas
|