Skip to content

Commit 82f3d41

Browse files
authored
refactor(test): toolset tests act as snapshot tests (#514)
Signed-off-by: Calum Murray <cmurray@redhat.com>
1 parent 3efc5f3 commit 82f3d41

File tree

1 file changed

+35
-22
lines changed

1 file changed

+35
-22
lines changed

pkg/mcp/toolsets_test.go

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ package mcp
22

33
import (
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+
2025
type 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

2935
func (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

3643
func (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+
214227
func TestToolsets(t *testing.T) {
215228
suite.Run(t, new(ToolsetsSuite))
216229
}

0 commit comments

Comments
 (0)