mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-05 02:31:47 +00:00
fix(profiles): normalize profile IDs for Kanban assignees and lookups
- Add normalize_profile_name() for lowercase canonical IDs and Default alias - Use canonical names in create/delete/rename/export/import/set_active paths - Canonicalize Kanban assignee on create/assign, list filter, and worker spawn - Tests for mixed-case assignees and profile resolution (fixes #18498)
This commit is contained in:
parent
60c4bc96fd
commit
a31477dabb
4 changed files with 160 additions and 72 deletions
|
|
@ -15,6 +15,7 @@ from unittest.mock import patch, MagicMock
|
|||
import pytest
|
||||
|
||||
from hermes_cli.profiles import (
|
||||
normalize_profile_name,
|
||||
validate_profile_name,
|
||||
get_profile_dir,
|
||||
create_profile,
|
||||
|
|
@ -58,6 +59,24 @@ def profile_env(tmp_path, monkeypatch):
|
|||
# TestValidateProfileName
|
||||
# ===================================================================
|
||||
|
||||
class TestNormalizeProfileName:
|
||||
"""Tests for normalize_profile_name()."""
|
||||
|
||||
def test_title_case_normalized(self):
|
||||
assert normalize_profile_name("Jules") == "jules"
|
||||
assert normalize_profile_name(" Librarian ") == "librarian"
|
||||
|
||||
def test_default_case_insensitive(self):
|
||||
assert normalize_profile_name("Default") == "default"
|
||||
assert normalize_profile_name("DEFAULT") == "default"
|
||||
|
||||
def test_empty_raises(self):
|
||||
with pytest.raises(ValueError, match="cannot be empty"):
|
||||
normalize_profile_name("")
|
||||
with pytest.raises(ValueError, match="cannot be empty"):
|
||||
normalize_profile_name(" ")
|
||||
|
||||
|
||||
class TestValidateProfileName:
|
||||
"""Tests for validate_profile_name()."""
|
||||
|
||||
|
|
@ -66,7 +85,10 @@ class TestValidateProfileName:
|
|||
# Should not raise
|
||||
validate_profile_name(name)
|
||||
|
||||
@pytest.mark.parametrize("name", ["UPPER", "has space", ".hidden", "-leading"])
|
||||
def test_uppercase_accepted_via_normalization(self):
|
||||
validate_profile_name("Jules")
|
||||
|
||||
@pytest.mark.parametrize("name", ["has space", ".hidden", "-leading"])
|
||||
def test_invalid_names_rejected(self, name):
|
||||
with pytest.raises(ValueError):
|
||||
validate_profile_name(name)
|
||||
|
|
@ -107,6 +129,10 @@ class TestGetProfileDir:
|
|||
result = get_profile_dir("coder")
|
||||
assert result == tmp_path / ".hermes" / "profiles" / "coder"
|
||||
|
||||
def test_named_profile_matching_is_case_insensitive(self, profile_env):
|
||||
tmp_path = profile_env
|
||||
assert get_profile_dir("Coder") == tmp_path / ".hermes" / "profiles" / "coder"
|
||||
|
||||
|
||||
# ===================================================================
|
||||
# TestCreateProfile
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue