Skip to main content
Glama
test_visibility.py11 kB
"""Unit tests for visibility handling (is_hidden, is_private, visibility_id).""" from unittest.mock import Mock, patch from mcp_kanka.service import KankaService class TestEntityVisibility: """Test visibility handling for entities.""" @patch("os.getenv") def setup_method(self, method, mock_getenv): """Set up test fixtures.""" mock_getenv.side_effect = lambda key: { "KANKA_TOKEN": "test_token", "KANKA_CAMPAIGN_ID": "123", }.get(key) with patch("mcp_kanka.service.KankaClient") as mock_client_class: self.mock_client = Mock() mock_client_class.return_value = self.mock_client self.service = KankaService() def test_create_entity_with_is_hidden_true(self): """Test creating entity with is_hidden=True sets is_private=True.""" # Mock entity creation created_entity = Mock( spec=[ "id", "entity_id", "name", "is_private", "entry", "tags", "type", "created_at", "updated_at", ] ) created_entity.id = 1 created_entity.entity_id = 101 created_entity.name = "Test Character" created_entity.is_private = True created_entity.entry = None # No entry content created_entity.tags = [] created_entity.type = None created_entity.created_at = None created_entity.updated_at = None self.mock_client.characters.create.return_value = created_entity # Mock tag cache self.service._tag_cache = {} # Create entity with is_hidden=True result = self.service.create_entity( entity_type="character", name="Test Character", is_hidden=True, ) # Verify is_private was sent to API self.mock_client.characters.create.assert_called_once() call_args = self.mock_client.characters.create.call_args[1] assert call_args["is_private"] is True assert "visibility_id" not in call_args # Verify result shows is_hidden assert result["is_hidden"] is True def test_create_entity_with_is_hidden_false(self): """Test creating entity with is_hidden=False sets is_private=False.""" # Mock entity creation created_entity = Mock( spec=[ "id", "entity_id", "name", "is_private", "entry", "tags", "type", "created_at", "updated_at", ] ) created_entity.id = 1 created_entity.entity_id = 101 created_entity.name = "Test Character" created_entity.is_private = False created_entity.entry = None # No entry content created_entity.tags = [] created_entity.type = None created_entity.created_at = None created_entity.updated_at = None self.mock_client.characters.create.return_value = created_entity # Mock tag cache self.service._tag_cache = {} # Create entity with is_hidden=False result = self.service.create_entity( entity_type="character", name="Test Character", is_hidden=False, ) # Verify is_private was sent to API self.mock_client.characters.create.assert_called_once() call_args = self.mock_client.characters.create.call_args[1] assert call_args["is_private"] is False assert "visibility_id" not in call_args # Verify result shows is_hidden assert result["is_hidden"] is False def test_update_entity_with_is_hidden(self): """Test updating entity visibility uses is_private.""" # Mock get_entity_by_id self.service.get_entity_by_id = Mock( return_value={ "id": 1, "entity_id": 101, "entity_type": "character", "name": "Test Character", } ) # Mock update self.mock_client.characters.update.return_value = True # Update entity with is_hidden=True self.service.update_entity( entity_id=101, name="Test Character", is_hidden=True, ) # Verify is_private was sent to API self.mock_client.characters.update.assert_called_once() call_args = self.mock_client.characters.update.call_args[1] assert call_args["is_private"] is True assert "visibility_id" not in call_args def test_entity_to_dict_converts_is_private_to_is_hidden(self): """Test _entity_to_dict converts is_private to is_hidden.""" # Mock entity with is_private=True mock_entity = Mock() mock_entity.id = 1 mock_entity.entity_id = 101 mock_entity.name = "Test Entity" mock_entity.type = "NPC" mock_entity.is_private = True mock_entity.tags = [] mock_entity.entry = None mock_entity.created_at = None mock_entity.updated_at = None mock_entity.posts = None # No posts self.service._tag_cache = {} # Convert to dict result = self.service._entity_to_dict(mock_entity, "character") # Should show is_hidden=True assert result["is_hidden"] is True def test_entity_to_dict_no_is_private_field(self): """Test _entity_to_dict handles missing is_private field.""" # Mock entity without is_private mock_entity = Mock(spec=["id", "entity_id", "name", "type", "tags", "entry"]) mock_entity.id = 1 mock_entity.entity_id = 101 mock_entity.name = "Test Entity" mock_entity.type = "NPC" mock_entity.tags = [] mock_entity.entry = None self.service._tag_cache = {} # Convert to dict result = self.service._entity_to_dict(mock_entity, "character") # Should default to is_hidden=False assert result["is_hidden"] is False class TestPostVisibility: """Test visibility handling for posts.""" @patch("os.getenv") def setup_method(self, method, mock_getenv): """Set up test fixtures.""" mock_getenv.side_effect = lambda key: { "KANKA_TOKEN": "test_token", "KANKA_CAMPAIGN_ID": "123", }.get(key) with patch("mcp_kanka.service.KankaClient") as mock_client_class: self.mock_client = Mock() mock_client_class.return_value = self.mock_client self.service = KankaService() def test_create_post_with_is_hidden_true(self): """Test creating post with is_hidden=True sets visibility_id=2.""" # Mock get_entity_by_id self.service.get_entity_by_id = Mock( return_value={ "id": 1, "entity_id": 101, "entity_type": "character", "name": "Test Character", } ) # Mock post creation created_post = Mock() created_post.id = 50 self.mock_client.characters.create_post.return_value = created_post # Create post with is_hidden=True self.service.create_post( entity_id=101, name="Test Post", entry="Content", is_hidden=True, ) # Verify visibility_id was sent to API self.mock_client.characters.create_post.assert_called_once() call_args = self.mock_client.characters.create_post.call_args[1] assert call_args["visibility_id"] == 2 assert "is_private" not in call_args def test_create_post_with_is_hidden_false(self): """Test creating post with is_hidden=False sets visibility_id=1.""" # Mock get_entity_by_id self.service.get_entity_by_id = Mock( return_value={ "id": 1, "entity_id": 101, "entity_type": "character", "name": "Test Character", } ) # Mock post creation created_post = Mock() created_post.id = 50 self.mock_client.characters.create_post.return_value = created_post # Create post with is_hidden=False self.service.create_post( entity_id=101, name="Test Post", entry="Content", is_hidden=False, ) # Verify visibility_id was sent to API self.mock_client.characters.create_post.assert_called_once() call_args = self.mock_client.characters.create_post.call_args[1] assert call_args["visibility_id"] == 1 assert "is_private" not in call_args def test_update_post_with_is_hidden(self): """Test updating post visibility uses visibility_id.""" # Mock get_entity_by_id self.service.get_entity_by_id = Mock( return_value={ "id": 1, "entity_id": 101, "entity_type": "character", "name": "Test Character", } ) # Mock update self.mock_client.characters.update_post.return_value = True # Update post with is_hidden=True self.service.update_post( entity_id=101, post_id=50, name="Test Post", is_hidden=True, ) # Verify visibility_id was sent to API self.mock_client.characters.update_post.assert_called_once() call_args = self.mock_client.characters.update_post.call_args[1] assert call_args["visibility_id"] == 2 assert "is_private" not in call_args def test_post_to_dict_converts_visibility_id_to_is_hidden(self): """Test _post_to_dict converts visibility_id to is_hidden.""" # Mock post with visibility_id=2 mock_post = Mock() mock_post.id = 50 mock_post.name = "Test Post" mock_post.visibility_id = 2 mock_post.entry = "<p>Content</p>" # Convert to dict result = self.service._post_to_dict(mock_post) # Should show is_hidden=True assert result["is_hidden"] is True # Test with visibility_id=1 mock_post.visibility_id = 1 result = self.service._post_to_dict(mock_post) assert result["is_hidden"] is False def test_post_to_dict_no_visibility_id_field(self): """Test _post_to_dict handles missing visibility_id field.""" # Mock post without visibility_id mock_post = Mock(spec=["id", "name", "entry"]) mock_post.id = 50 mock_post.name = "Test Post" mock_post.entry = None # Convert to dict result = self.service._post_to_dict(mock_post) # Should default to is_hidden=False assert result["is_hidden"] is False

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ervwalter/mcp-kanka'

If you have feedback or need assistance with the MCP directory API, please join our Discord server