Skip to main content
Glama
ToolsCommandTests.swift7.56 kB
import Foundation import Testing @testable import PeekabooCLI /// Tests for ToolsCommand functionality @Suite("Tools Command Tests", .tags(.safe)) struct ToolsCommandTests { @Test("ToolsCommand configuration") func toolsCommandDescription() { let config = ToolsCommand.commandDescription #expect(config.commandName == "tools") #expect(config.abstract == "List available tools with filtering and display options") #expect(config.discussion != nil) let discussion = config.discussion ?? "" #expect(discussion.contains("Examples:")) #expect(discussion.contains("peekaboo tools")) #expect(discussion.contains("--native-only")) #expect(discussion.contains("--mcp-only")) } @Test("ToolsCommand default values") func toolsCommandDefaults() throws { let command = try ToolsCommand.parse([]) #expect(command.nativeOnly == false) #expect(command.mcpOnly == false) #expect(command.mcp == nil) #expect(command.verbose == false) #expect(command.jsonOutput == false) #expect(command.includeDisabled == false) #expect(command.noSort == false) #expect(command.groupByServer == false) } @Test("ToolsCommand argument parsing - native only") func argumentParsingNativeOnly() throws { let args = ["--native-only"] let command = try ToolsCommand.parse(args) #expect(command.nativeOnly == true) #expect(command.mcpOnly == false) } @Test("ToolsCommand argument parsing - mcp only") func argumentParsingMcpOnly() throws { let args = ["--mcp-only"] let command = try ToolsCommand.parse(args) #expect(command.nativeOnly == false) #expect(command.mcpOnly == true) } @Test("ToolsCommand argument parsing - specific server") func argumentParsingSpecificServer() throws { let args = ["--mcp", "github"] let command = try ToolsCommand.parse(args) #expect(command.mcp == "github") #expect(command.nativeOnly == false) #expect(command.mcpOnly == false) } @Test("ToolsCommand argument parsing - verbose") func argumentParsingVerbose() throws { let args = ["--verbose"] let command = try ToolsCommand.parse(args) #expect(command.verbose == true) } @Test("ToolsCommand argument parsing - json output") func argumentParsingJsonOutput() throws { let args = ["--json-output"] let command = try ToolsCommand.parse(args) #expect(command.jsonOutput == true) } @Test("ToolsCommand argument parsing - multiple flags") func argumentParsingMultipleFlags() throws { let args = ["--verbose", "--json-output", "--include-disabled", "--group-by-server"] let command = try ToolsCommand.parse(args) #expect(command.verbose == true) #expect(command.jsonOutput == true) #expect(command.includeDisabled == true) #expect(command.groupByServer == true) } @Test("ToolsCommand argument parsing - combined options") func argumentParsingCombined() throws { let args = ["--mcp", "filesystem", "--verbose", "--no-sort"] let command = try ToolsCommand.parse(args) #expect(command.mcp == "filesystem") #expect(command.verbose == true) #expect(command.noSort == true) } @Test("ToolsCommand description property") func descriptionProperty() throws { let command = try ToolsCommand.parse([]) #expect(command.description == "Tools command for listing and filtering available tools") } } /// Tests for ToolFilter validation (private extension) @Suite("Tool Filter Validation Tests", .tags(.safe)) struct ToolFilterValidationTests { @Test("Valid filter combinations should not throw") func validFilterCombinations() throws { // Test individual flags var command1 = try ToolsCommand.parse([]) command1.nativeOnly = true // Should not throw during argument validation var command2 = try ToolsCommand.parse([]) command2.mcpOnly = true // Should not throw during argument validation var command3 = try ToolsCommand.parse([]) command3.mcp = "github" // Should not throw during argument validation var command4 = try ToolsCommand.parse([]) command4.mcpOnly = true command4.mcp = "github" // This combination should be valid (show only tools from specific server) } @Test("ToolsCommand validation in parsing") func validationInParsing() throws { // These should parse successfully _ = try ToolsCommand.parse(["--native-only"]) _ = try ToolsCommand.parse(["--mcp-only"]) _ = try ToolsCommand.parse(["--mcp", "github"]) _ = try ToolsCommand.parse(["--mcp-only", "--mcp", "github"]) // Basic parsing should work - validation might happen during execution } } /// Integration tests for tools command with minimal setup @Suite("Tools Command Integration Tests", .tags(.safe)) struct ToolsCommandIntegrationTests { @Test("ToolsCommand can be created and configured") func commandCreation() throws { let command = try ToolsCommand.parse([]) // Test that the command can be created without errors #expect(command.nativeOnly == false) #expect(command.mcpOnly == false) #expect(command.mcp == nil) // command name verified in other tests } } /// Mock tests to verify command structure without execution @Suite("Tools Command Structure Tests", .tags(.safe)) struct ToolsCommandStructureTests { @Test("Command has required AsyncParsableCommand conformance") func asyncParsableCommandConformance() throws { // Verify that ToolsCommand conforms to AsyncParsableCommand let command = try ToolsCommand.parse([]) // This test verifies the command can be instantiated and has the right type #expect(type(of: command) == ToolsCommand.self) } @Test("Command configuration is properly set") func commandConfigurationProperties() { let config = ToolsCommand.commandDescription // Verify all required configuration properties #expect(config.commandName == "tools") #expect(!config.abstract.isEmpty) #expect(config.discussion != nil) // Verify discussion contains usage examples let discussion = config.discussion ?? "" #expect(discussion.contains("peekaboo tools")) #expect(discussion.contains("Examples:")) #expect(discussion.contains("--native-only")) #expect(discussion.contains("--mcp-only")) #expect(discussion.contains("--mcp github")) #expect(discussion.contains("--verbose")) #expect(discussion.contains("--json-output")) } @Test("Command properties have correct types and attributes") func commandProperties() throws { let command = try ToolsCommand.parse([]) // Verify property types #expect(type(of: command.nativeOnly) == Bool.self) #expect(type(of: command.mcpOnly) == Bool.self) #expect(type(of: command.mcp) == String?.self) #expect(type(of: command.verbose) == Bool.self) #expect(type(of: command.jsonOutput) == Bool.self) #expect(type(of: command.includeDisabled) == Bool.self) #expect(type(of: command.noSort) == Bool.self) #expect(type(of: command.groupByServer) == Bool.self) } }

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/steipete/Peekaboo'

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