@@ -69,12 +69,22 @@ Describe 'Tests for MCP server' {
6969 params = @ {}
7070 }
7171
72- $response = Send-McpRequest - request $mcpRequest
72+ $tools = @ {
73+ ' list_dsc_resources' = $false
74+ ' show_dsc_resource' = $false
75+ }
7376
77+ $response = Send-McpRequest - request $mcpRequest
7478 $response.id | Should - Be 2
75- $response.result.tools.Count | Should - Be 2
76- $response.result.tools [0 ].name | Should - BeIn @ (' list_adapted_resources' , ' list_dsc_resources' )
77- $response.result.tools [1 ].name | Should - BeIn @ (' list_adapted_resources' , ' list_dsc_resources' )
79+ $response.result.tools.Count | Should - Be $tools.Count
80+ foreach ($tool in $response.result.tools ) {
81+ $tools.ContainsKey ($tool.name ) | Should - Be $true
82+ $tools [$tool.name ] = $true
83+ $tool.description | Should -Not - BeNullOrEmpty
84+ }
85+ foreach ($tool in $tools.GetEnumerator ()) {
86+ $tool.Value | Should - Be $true - Because " Tool '$ ( $tool.Key ) ' was not found in the list of tools"
87+ }
7888 }
7989
8090 It ' Calling list_dsc_resources works' {
@@ -89,24 +99,24 @@ Describe 'Tests for MCP server' {
8999 }
90100
91101 $response = Send-McpRequest - request $mcpRequest
92- $response.id | Should - Be 3
102+ $response.id | Should - BeGreaterOrEqual 3
93103 $resources = dsc resource list | ConvertFrom-Json - Depth 20 | Select-Object type, kind, description - Unique
94104 $response.result.structuredContent.resources.Count | Should - Be $resources.Count
95105 for ($i = 0 ; $i -lt $resources.Count ; $i ++ ) {
96- ($response.result.structuredContent.resources [$i ].psobject.properties | Measure-Object ).Count | Should - Be 3
106+ ($response.result.structuredContent.resources [$i ].psobject.properties | Measure-Object ).Count | Should - BeGreaterOrEqual 3
97107 $response.result.structuredContent.resources [$i ].type | Should - BeExactly $resources [$i ].type - Because ($response.result.structuredContent | ConvertTo-Json - Depth 20 | Out-String )
98108 $response.result.structuredContent.resources [$i ].kind | Should - BeExactly $resources [$i ].kind - Because ($response.result.structuredContent | ConvertTo-Json - Depth 20 | Out-String )
99109 $response.result.structuredContent.resources [$i ].description | Should - BeExactly $resources [$i ].description - Because ($response.result.structuredContent | ConvertTo-Json - Depth 20 | Out-String )
100110 }
101111 }
102112
103- It ' Calling list_adapted_resources works' {
113+ It ' Calling list_dsc_resources with adapter works' {
104114 $mcpRequest = @ {
105115 jsonrpc = " 2.0"
106116 id = 4
107117 method = " tools/call"
108118 params = @ {
109- name = " list_adapted_resources "
119+ name = " list_dsc_resources "
110120 arguments = @ {
111121 adapter = " Microsoft.DSC/PowerShell"
112122 }
@@ -125,21 +135,76 @@ Describe 'Tests for MCP server' {
125135 }
126136 }
127137
128- It ' Calling list_adapted_resources with no matches works' {
138+ It ' Calling list_dsc_resources with <adapter> returns error' - TestCases @ (
139+ @ {" adapter" = " Non.Existent/Adapter" },
140+ @ {" adapter" = " Microsoft.DSC.Debug/Echo" }
141+ ) {
142+ param ($adapter )
143+
129144 $mcpRequest = @ {
130145 jsonrpc = " 2.0"
131146 id = 5
132147 method = " tools/call"
133148 params = @ {
134- name = " list_adapted_resources "
149+ name = " list_dsc_resources "
135150 arguments = @ {
136- adapter = " Non.Existent/Adapter "
151+ adapter = $adapter
137152 }
138153 }
139154 }
140155
141156 $response = Send-McpRequest - request $mcpRequest
142157 $response.id | Should - Be 5
143- $response.result.structuredContent.resources.Count | Should - Be 0
158+ $response.error.code | Should - Be -32602
159+ $response.error.message | Should -Not - BeNullOrEmpty
160+ }
161+
162+ It ' Calling show_dsc_resource works' {
163+ $resource = (dsc resource list | Select-Object - First 1 | ConvertFrom-Json - Depth 20 )
164+
165+ $mcpRequest = @ {
166+ jsonrpc = " 2.0"
167+ id = 6
168+ method = " tools/call"
169+ params = @ {
170+ name = " show_dsc_resource"
171+ arguments = @ {
172+ type = $resource.type
173+ }
174+ }
175+ }
176+
177+ $response = Send-McpRequest - request $mcpRequest
178+ $response.id | Should - Be 6
179+ ($response.result.structuredContent.psobject.properties | Measure-Object ).Count | Should - BeGreaterOrEqual 4
180+ $because = ($response.result.structuredContent | ConvertTo-Json - Depth 20 | Out-String )
181+ $response.result.structuredContent.type | Should - BeExactly $resource.type - Because $because
182+ $response.result.structuredContent.kind | Should - BeExactly $resource.kind - Because $because
183+ $response.result.structuredContent.version | Should - Be $resource.version - Because $because
184+ $response.result.structuredContent.capabilities | Should - Be $resource.capabilities - Because $because
185+ $response.result.structuredContent.description | Should - Be $resource.description - Because $because
186+ $schema = (dsc resource schema -- resource $resource.type | ConvertFrom-Json - Depth 20 )
187+ $response.result.structuredContent.schema .' $id' | Should - Be $schema .' $id' - Because $because
188+ $response.result.structuredContent.schema.type | Should - Be $schema.type - Because $because
189+ $response.result.structuredContent.schema.properties.keys | Should - Be $schema.properties.keys - Because $because
190+ }
191+
192+ It ' Calling show_dsc_resource with non-existent resource returns error' {
193+ $mcpRequest = @ {
194+ jsonrpc = " 2.0"
195+ id = 7
196+ method = " tools/call"
197+ params = @ {
198+ name = " show_dsc_resource"
199+ arguments = @ {
200+ type = " Non.Existent/Resource"
201+ }
202+ }
203+ }
204+
205+ $response = Send-McpRequest - request $mcpRequest
206+ $response.id | Should - Be 7
207+ $response.error.code | Should - Be -32602
208+ $response.error.message | Should -Not - BeNullOrEmpty
144209 }
145210}
0 commit comments