|
16 | 16 |
|
17 | 17 | from enum import Enum |
18 | 18 | from functools import partial |
| 19 | +import logging |
19 | 20 | from typing import AsyncGenerator |
20 | 21 | from typing import List |
21 | 22 | from typing import Optional |
@@ -854,6 +855,112 @@ def test_set_parent_agent_for_sub_agent_twice( |
854 | 855 | ) |
855 | 856 |
|
856 | 857 |
|
| 858 | +def test_validate_sub_agents_unique_names_single_duplicate( |
| 859 | + request: pytest.FixtureRequest, |
| 860 | + caplog: pytest.LogCaptureFixture, |
| 861 | +): |
| 862 | + """Test that duplicate sub-agent names logs a warning.""" |
| 863 | + duplicate_name = f'{request.function.__name__}_duplicate_agent' |
| 864 | + sub_agent_1 = _TestingAgent(name=duplicate_name) |
| 865 | + sub_agent_2 = _TestingAgent(name=duplicate_name) |
| 866 | + |
| 867 | + with caplog.at_level(logging.WARNING): |
| 868 | + _ = _TestingAgent( |
| 869 | + name=f'{request.function.__name__}_parent', |
| 870 | + sub_agents=[sub_agent_1, sub_agent_2], |
| 871 | + ) |
| 872 | + assert f'Found duplicate sub-agent names: `{duplicate_name}`' in caplog.text |
| 873 | + |
| 874 | + |
| 875 | +def test_validate_sub_agents_unique_names_multiple_duplicates( |
| 876 | + request: pytest.FixtureRequest, |
| 877 | + caplog: pytest.LogCaptureFixture, |
| 878 | +): |
| 879 | + """Test that multiple duplicate sub-agent names are all reported.""" |
| 880 | + duplicate_name_1 = f'{request.function.__name__}_duplicate_1' |
| 881 | + duplicate_name_2 = f'{request.function.__name__}_duplicate_2' |
| 882 | + |
| 883 | + sub_agents = [ |
| 884 | + _TestingAgent(name=duplicate_name_1), |
| 885 | + _TestingAgent(name=f'{request.function.__name__}_unique'), |
| 886 | + _TestingAgent(name=duplicate_name_1), # First duplicate |
| 887 | + _TestingAgent(name=duplicate_name_2), |
| 888 | + _TestingAgent(name=duplicate_name_2), # Second duplicate |
| 889 | + ] |
| 890 | + |
| 891 | + with caplog.at_level(logging.WARNING): |
| 892 | + _ = _TestingAgent( |
| 893 | + name=f'{request.function.__name__}_parent', |
| 894 | + sub_agents=sub_agents, |
| 895 | + ) |
| 896 | + |
| 897 | + # Verify each duplicate name appears exactly once in the error message |
| 898 | + assert caplog.text.count(duplicate_name_1) == 1 |
| 899 | + assert caplog.text.count(duplicate_name_2) == 1 |
| 900 | + # Verify both duplicate names are present |
| 901 | + assert duplicate_name_1 in caplog.text |
| 902 | + assert duplicate_name_2 in caplog.text |
| 903 | + |
| 904 | + |
| 905 | +def test_validate_sub_agents_unique_names_triple_duplicate( |
| 906 | + request: pytest.FixtureRequest, |
| 907 | + caplog: pytest.LogCaptureFixture, |
| 908 | +): |
| 909 | + """Test that a name appearing three times is reported only once.""" |
| 910 | + duplicate_name = f'{request.function.__name__}_triple_duplicate' |
| 911 | + |
| 912 | + sub_agents = [ |
| 913 | + _TestingAgent(name=duplicate_name), |
| 914 | + _TestingAgent(name=f'{request.function.__name__}_unique'), |
| 915 | + _TestingAgent(name=duplicate_name), # Second occurrence |
| 916 | + _TestingAgent(name=duplicate_name), # Third occurrence |
| 917 | + ] |
| 918 | + |
| 919 | + with caplog.at_level(logging.WARNING): |
| 920 | + _ = _TestingAgent( |
| 921 | + name=f'{request.function.__name__}_parent', |
| 922 | + sub_agents=sub_agents, |
| 923 | + ) |
| 924 | + |
| 925 | + # Verify the duplicate name appears exactly once in the error message |
| 926 | + # (not three times even though it appears three times in the list) |
| 927 | + assert caplog.text.count(duplicate_name) == 1 |
| 928 | + assert duplicate_name in caplog.text |
| 929 | + |
| 930 | + |
| 931 | +def test_validate_sub_agents_unique_names_no_duplicates( |
| 932 | + request: pytest.FixtureRequest, |
| 933 | +): |
| 934 | + """Test that unique sub-agent names pass validation.""" |
| 935 | + sub_agents = [ |
| 936 | + _TestingAgent(name=f'{request.function.__name__}_sub_agent_1'), |
| 937 | + _TestingAgent(name=f'{request.function.__name__}_sub_agent_2'), |
| 938 | + _TestingAgent(name=f'{request.function.__name__}_sub_agent_3'), |
| 939 | + ] |
| 940 | + |
| 941 | + parent = _TestingAgent( |
| 942 | + name=f'{request.function.__name__}_parent', |
| 943 | + sub_agents=sub_agents, |
| 944 | + ) |
| 945 | + |
| 946 | + assert len(parent.sub_agents) == 3 |
| 947 | + assert parent.sub_agents[0].name == f'{request.function.__name__}_sub_agent_1' |
| 948 | + assert parent.sub_agents[1].name == f'{request.function.__name__}_sub_agent_2' |
| 949 | + assert parent.sub_agents[2].name == f'{request.function.__name__}_sub_agent_3' |
| 950 | + |
| 951 | + |
| 952 | +def test_validate_sub_agents_unique_names_empty_list( |
| 953 | + request: pytest.FixtureRequest, |
| 954 | +): |
| 955 | + """Test that empty sub-agents list passes validation.""" |
| 956 | + parent = _TestingAgent( |
| 957 | + name=f'{request.function.__name__}_parent', |
| 958 | + sub_agents=[], |
| 959 | + ) |
| 960 | + |
| 961 | + assert len(parent.sub_agents) == 0 |
| 962 | + |
| 963 | + |
857 | 964 | if __name__ == '__main__': |
858 | 965 | pytest.main([__file__]) |
859 | 966 |
|
|
0 commit comments