@@ -2,6 +2,9 @@ package mcp
22
33import (
44 "encoding/json"
5+ "os"
6+ "path/filepath"
7+ "runtime"
58 "strconv"
69 "testing"
710
@@ -17,20 +20,24 @@ import (
1720 clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
1821)
1922
23+ const updateJsonEnvVar = "UPDATE_TOOLSETS_JSON"
24+
2025type ToolsetsSuite struct {
2126 suite.Suite
2227 originalToolsets []api.Toolset
2328 * test.MockServer
2429 * test.McpClient
25- Cfg * configuration.StaticConfig
26- mcpServer * Server
30+ Cfg * configuration.StaticConfig
31+ mcpServer * Server
32+ updateJson bool
2733}
2834
2935func (s * ToolsetsSuite ) SetupTest () {
3036 s .originalToolsets = toolsets .Toolsets ()
3137 s .MockServer = test .NewMockServer ()
3238 s .Cfg = configuration .Default ()
3339 s .Cfg .KubeConfig = s .KubeconfigFile (s .T ())
40+ s .updateJson = os .Getenv (updateJsonEnvVar ) != ""
3441}
3542
3643func (s * ToolsetsSuite ) TearDownTest () {
@@ -76,10 +83,7 @@ func (s *ToolsetsSuite) TestDefaultToolsetsTools() {
7683 s .NoError (err , "Expected no error from ListTools" )
7784 })
7885 s .Run ("ListTools returns correct Tool metadata" , func () {
79- expectedMetadata := test .ReadFile ("testdata" , "toolsets-full-tools.json" )
80- metadata , err := json .MarshalIndent (tools .Tools , "" , " " )
81- s .Require ().NoErrorf (err , "failed to marshal tools metadata: %v" , err )
82- s .JSONEq (expectedMetadata , string (metadata ), "tools metadata does not match expected" )
86+ s .assertJsonSnapshot ("toolsets-full-tools.json" , tools .Tools )
8387 })
8488 })
8589}
@@ -97,10 +101,7 @@ func (s *ToolsetsSuite) TestDefaultToolsetsToolsInOpenShift() {
97101 s .NoError (err , "Expected no error from ListTools" )
98102 })
99103 s .Run ("ListTools returns correct Tool metadata" , func () {
100- expectedMetadata := test .ReadFile ("testdata" , "toolsets-full-tools-openshift.json" )
101- metadata , err := json .MarshalIndent (tools .Tools , "" , " " )
102- s .Require ().NoErrorf (err , "failed to marshal tools metadata: %v" , err )
103- s .JSONEq (expectedMetadata , string (metadata ), "tools metadata does not match expected" )
104+ s .assertJsonSnapshot ("toolsets-full-tools-openshift.json" , tools .Tools )
104105 })
105106 })
106107}
@@ -123,10 +124,7 @@ func (s *ToolsetsSuite) TestDefaultToolsetsToolsInMultiCluster() {
123124 s .NoError (err , "Expected no error from ListTools" )
124125 })
125126 s .Run ("ListTools returns correct Tool metadata" , func () {
126- expectedMetadata := test .ReadFile ("testdata" , "toolsets-full-tools-multicluster.json" )
127- metadata , err := json .MarshalIndent (tools .Tools , "" , " " )
128- s .Require ().NoErrorf (err , "failed to marshal tools metadata: %v" , err )
129- s .JSONEq (expectedMetadata , string (metadata ), "tools metadata does not match expected" )
127+ s .assertJsonSnapshot ("toolsets-full-tools-multicluster.json" , tools .Tools )
130128 })
131129 })
132130}
@@ -147,10 +145,7 @@ func (s *ToolsetsSuite) TestDefaultToolsetsToolsInMultiClusterEnum() {
147145 s .NoError (err , "Expected no error from ListTools" )
148146 })
149147 s .Run ("ListTools returns correct Tool metadata" , func () {
150- expectedMetadata := test .ReadFile ("testdata" , "toolsets-full-tools-multicluster-enum.json" )
151- metadata , err := json .MarshalIndent (tools .Tools , "" , " " )
152- s .Require ().NoErrorf (err , "failed to marshal tools metadata: %v" , err )
153- s .JSONEq (expectedMetadata , string (metadata ), "tools metadata does not match expected" )
148+ s .assertJsonSnapshot ("toolsets-full-tools-multicluster-enum.json" , tools .Tools )
154149 })
155150 })
156151}
@@ -173,10 +168,7 @@ func (s *ToolsetsSuite) TestGranularToolsetsTools() {
173168 s .NoError (err , "Expected no error from ListTools" )
174169 })
175170 s .Run ("ListTools returns correct Tool metadata" , func () {
176- expectedMetadata := test .ReadFile ("testdata" , "toolsets-" + testCase .GetName ()+ "-tools.json" )
177- metadata , err := json .MarshalIndent (tools .Tools , "" , " " )
178- s .Require ().NoErrorf (err , "failed to marshal tools metadata: %v" , err )
179- s .JSONEq (expectedMetadata , string (metadata ), "tools metadata does not match expected" )
171+ s .assertJsonSnapshot ("toolsets-" + testCase .GetName ()+ "-tools.json" , tools .Tools )
180172 })
181173 })
182174 }
@@ -211,6 +203,27 @@ func (s *ToolsetsSuite) InitMcpClient() {
211203 s .McpClient = test .NewMcpClient (s .T (), s .mcpServer .ServeHTTP ())
212204}
213205
206+ func (s * ToolsetsSuite ) assertJsonSnapshot (snapshotFile string , actual any ) {
207+ _ , file , _ , _ := runtime .Caller (1 )
208+ snapshotPath := filepath .Join (filepath .Dir (file ), "testdata" , snapshotFile )
209+ actualJson , err := json .MarshalIndent (actual , "" , " " )
210+ s .Require ().NoErrorf (err , "failed to marshal actual data: %v" , err )
211+ if s .updateJson {
212+ err := os .WriteFile (snapshotPath , append (actualJson , '\n' ), 0644 )
213+ s .Require ().NoErrorf (err , "failed to write snapshot file %s: %v" , snapshotFile , err )
214+ s .T ().Logf ("Updated snapshot: %s" , snapshotFile )
215+ return
216+ }
217+ expectedJson := test .ReadFile ("testdata" , snapshotFile )
218+ s .JSONEq (
219+ expectedJson ,
220+ string (actualJson ),
221+ "snapshot %s does not match - to update snapshots re-run the tests with %s=1" ,
222+ snapshotFile ,
223+ updateJsonEnvVar ,
224+ )
225+ }
226+
214227func TestToolsets (t * testing.T ) {
215228 suite .Run (t , new (ToolsetsSuite ))
216229}
0 commit comments