MCPcopy Index your code
hub / github.com/riverqueue/river / TestParseAndUpdateGoModFile

Function TestParseAndUpdateGoModFile

rivershared/cmd/update-mod-go/main_test.go:24–118  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

22)`
23
24func TestParseAndUpdateGoModFile(t *testing.T) {
25 t.Parallel()
26
27 type testBundle struct{}
28
29 setup := func(t *testing.T) (string, *testBundle) { //nolint:unparam
30 t.Helper()
31
32 file, err := os.CreateTemp(t.TempDir(), "go.mod")
33 require.NoError(t, err)
34 t.Cleanup(func() { _ = os.Remove(file.Name()) })
35
36 _, err = file.WriteString(sampleGoMod)
37 require.NoError(t, err)
38 require.NoError(t, file.Close())
39
40 return file.Name(), &testBundle{}
41 }
42
43 requireDirectives := func(t *testing.T, filename, goVersion, toolchainName string) {
44 t.Helper()
45
46 fileData, err := os.ReadFile(filename)
47 require.NoError(t, err)
48
49 modFile, err := modfile.Parse(filename, fileData, nil)
50 require.NoError(t, err)
51
52 require.Equal(t, goVersion, modFile.Go.Version)
53 require.Equal(t, toolchainName, modFile.Toolchain.Name)
54 }
55
56 t.Run("WritesChanges", func(t *testing.T) {
57 t.Parallel()
58
59 filename, _ := setup(t)
60
61 anyMismatch, err := parseAndUpdateGoModFile(false, filename, "go.work", "1.23", "go1.23.2")
62 require.NoError(t, err)
63 require.True(t, anyMismatch)
64
65 // Reread the file that the command above just wrote and make sure the right
66 // changes were made.
67 requireDirectives(t, filename, "1.23", "go1.23.2")
68
69 // Running again is allowed and should be idempotent. This time it'll
70 // return that no changes were made.
71 anyMismatch, err = parseAndUpdateGoModFile(false, filename, "go.work", "1.23", "go1.23.2")
72 require.NoError(t, err)
73 require.False(t, anyMismatch)
74 })
75
76 t.Run("NoChanges", func(t *testing.T) {
77 t.Parallel()
78
79 filename, _ := setup(t)
80
81 anyMismatch, err := parseAndUpdateGoModFile(false, filename, "go.work", "1.22", "go1.23.1")

Callers

nothing calls this directly

Calls 7

CleanupMethod · 0.80
parseAndUpdateGoModFileFunction · 0.70
HelperMethod · 0.65
NameMethod · 0.65
CloseMethod · 0.65
RunMethod · 0.65
RemoveMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…