Skip to main content
Glama
test_visibility.py13.2 kB
#!/usr/bin/env python3 """Integration tests for visibility handling (is_hidden).""" import asyncio import sys from base_direct import IntegrationTestBase class TestVisibility(IntegrationTestBase): """Test visibility handling for entities and posts.""" async def test_create_entity_with_is_hidden(self): """Test creating entities with different is_hidden values.""" # Create a hidden entity created = await self.call_tool( "create_entities", entities=[ { "entity_type": "character", "name": "Integration Test Hidden Character - DELETE ME", "type": "NPC", "entry": "This is a hidden character.", "is_hidden": True, } ], ) assert created[0]["success"] is True hidden_entity_id = created[0]["entity_id"] self.track_entity(hidden_entity_id) # Create a visible entity created = await self.call_tool( "create_entities", entities=[ { "entity_type": "character", "name": "Integration Test Visible Character - DELETE ME", "type": "NPC", "entry": "This is a visible character.", "is_hidden": False, } ], ) assert created[0]["success"] is True visible_entity_id = created[0]["entity_id"] self.track_entity(visible_entity_id) await self.wait_for_api() # Get both entities and verify is_hidden results = await self.call_tool( "get_entities", entity_ids=[hidden_entity_id, visible_entity_id], include_posts=False, ) # Find our entities hidden_result = None visible_result = None for result in results: if result["entity_id"] == hidden_entity_id: hidden_result = result elif result["entity_id"] == visible_entity_id: visible_result = result assert hidden_result is not None, "Hidden entity not found" assert visible_result is not None, "Visible entity not found" # Verify is_hidden values assert ( hidden_result["is_hidden"] is True ), "Hidden entity should have is_hidden=True" assert ( visible_result["is_hidden"] is False ), "Visible entity should have is_hidden=False" async def test_update_entity_visibility(self): """Test updating entity visibility.""" # Create an entity that starts visible created = await self.call_tool( "create_entities", entities=[ { "entity_type": "location", "name": "Integration Test Location - DELETE ME", "type": "City", "is_hidden": False, } ], ) assert created[0]["success"] is True entity_id = created[0]["entity_id"] self.track_entity(entity_id) await self.wait_for_api() # Update it to be hidden updated = await self.call_tool( "update_entities", updates=[ { "entity_id": entity_id, "name": "Integration Test Location - DELETE ME", "is_hidden": True, } ], ) assert updated[0]["success"] is True await self.wait_for_api() # Get entity and verify it's now hidden results = await self.call_tool( "get_entities", entity_ids=[entity_id], include_posts=False, ) assert results[0]["success"] is True assert results[0]["is_hidden"] is True, "Entity should be hidden after update" # Update it back to visible updated = await self.call_tool( "update_entities", updates=[ { "entity_id": entity_id, "name": "Integration Test Location - DELETE ME", "is_hidden": False, } ], ) assert updated[0]["success"] is True await self.wait_for_api() # Verify it's visible again results = await self.call_tool( "get_entities", entity_ids=[entity_id], include_posts=False, ) assert results[0]["success"] is True assert ( results[0]["is_hidden"] is False ), "Entity should be visible after second update" async def test_create_post_with_is_hidden(self): """Test creating posts with different is_hidden values.""" # First create an entity to attach posts to created = await self.call_tool( "create_entities", entities=[ { "entity_type": "organization", "name": "Integration Test Guild - DELETE ME", "type": "Guild", } ], ) assert created[0]["success"] is True entity_id = created[0]["entity_id"] self.track_entity(entity_id) await self.wait_for_api() # Create a hidden post post_result = await self.call_tool( "create_posts", posts=[ { "entity_id": entity_id, "name": "Secret Guild Meeting Notes", "entry": "These are confidential notes.", "is_hidden": True, } ], ) assert post_result[0]["success"] is True hidden_post_id = post_result[0]["post_id"] # Create a visible post post_result = await self.call_tool( "create_posts", posts=[ { "entity_id": entity_id, "name": "Public Guild Announcement", "entry": "This is a public announcement.", "is_hidden": False, } ], ) assert post_result[0]["success"] is True visible_post_id = post_result[0]["post_id"] await self.wait_for_api() # Get entity with posts results = await self.call_tool( "get_entities", entity_ids=[entity_id], include_posts=True, ) assert results[0]["success"] is True posts = results[0].get("posts", []) assert len(posts) >= 2, "Should have at least 2 posts" # Find our posts hidden_post = None visible_post = None for post in posts: if post["id"] == hidden_post_id: hidden_post = post elif post["id"] == visible_post_id: visible_post = post assert hidden_post is not None, "Hidden post not found" assert visible_post is not None, "Visible post not found" # Verify is_hidden values assert ( hidden_post["is_hidden"] is True ), "Hidden post should have is_hidden=True" assert ( visible_post["is_hidden"] is False ), "Visible post should have is_hidden=False" async def test_update_post_visibility(self): """Test updating post visibility.""" # Create an entity created = await self.call_tool( "create_entities", entities=[ { "entity_type": "quest", "name": "Integration Test Quest - DELETE ME", "type": "Main Quest", } ], ) assert created[0]["success"] is True entity_id = created[0]["entity_id"] self.track_entity(entity_id) await self.wait_for_api() # Create a post that starts visible post_result = await self.call_tool( "create_posts", posts=[ { "entity_id": entity_id, "name": "Quest Progress", "entry": "Initial progress notes.", "is_hidden": False, } ], ) assert post_result[0]["success"] is True post_id = post_result[0]["post_id"] await self.wait_for_api() # Update post to be hidden update_result = await self.call_tool( "update_posts", updates=[ { "entity_id": entity_id, "post_id": post_id, "name": "Quest Progress", "is_hidden": True, } ], ) assert update_result[0]["success"] is True await self.wait_for_api() # Get entity with posts and verify visibility results = await self.call_tool( "get_entities", entity_ids=[entity_id], include_posts=True, ) assert results[0]["success"] is True posts = results[0].get("posts", []) # Find our post our_post = None for post in posts: if post["id"] == post_id: our_post = post break assert our_post is not None, "Post not found" assert our_post["is_hidden"] is True, "Post should be hidden after update" async def test_note_entity_default_hidden(self): """Test that note entities default to hidden.""" # Create a note without specifying is_hidden created = await self.call_tool( "create_entities", entities=[ { "entity_type": "note", "name": "Integration Test GM Note - DELETE ME", "entry": "This is a GM-only note.", } ], ) assert created[0]["success"] is True entity_id = created[0]["entity_id"] self.track_entity(entity_id) await self.wait_for_api() # Get the note and verify it's hidden by default results = await self.call_tool( "get_entities", entity_ids=[entity_id], include_posts=False, ) assert results[0]["success"] is True assert results[0]["is_hidden"] is True, "Notes should default to is_hidden=True" async def test_find_entities_includes_visibility(self): """Test that find_entities returns is_hidden field.""" # Create a few entities with different visibility created = await self.call_tool( "create_entities", entities=[ { "entity_type": "creature", "name": "Integration Test Visibility Dragon - DELETE ME", "type": "Dragon", "is_hidden": True, }, { "entity_type": "creature", "name": "Integration Test Visibility Goblin - DELETE ME", "type": "Goblin", "is_hidden": False, }, ], ) # Track for cleanup for result in created: if result["success"]: self.track_entity(result["entity_id"]) await self.wait_for_api() # Find them results = await self.call_tool( "find_entities", name="Integration Test Visibility", entity_type="creature", include_full=True, ) entities = results["entities"] assert len(entities) >= 2, "Should find at least our 2 creatures" # Check that is_hidden is included for entity in entities: if "Dragon" in entity.get("name", ""): assert entity["is_hidden"] is True, "Dragon should be hidden" elif "Goblin" in entity.get("name", ""): assert entity["is_hidden"] is False, "Goblin should be visible" async def main(): """Run all tests.""" test = TestVisibility() tests = [ ("Create entity with is_hidden", test.test_create_entity_with_is_hidden), ("Update entity visibility", test.test_update_entity_visibility), ("Create post with is_hidden", test.test_create_post_with_is_hidden), ("Update post visibility", test.test_update_post_visibility), ("Note entity default hidden", test.test_note_entity_default_hidden), ( "Find entities includes visibility", test.test_find_entities_includes_visibility, ), ] passed = 0 failed = 0 for test_name, test_func in tests: if await test.run_test(test_name, test_func): passed += 1 else: failed += 1 print(f"\n{'='*60}") print(f"Test Results: {passed} passed, {failed} failed") print(f"{'='*60}") return failed == 0 if __name__ == "__main__": success = asyncio.run(main()) sys.exit(0 if success else 1)

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