forked from speakeasy-api/git-diff-parser
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparser_test.go
111 lines (102 loc) · 3.2 KB
/
parser_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package git_diff_parser_test
import (
"embed"
"fmt"
"os"
"path/filepath"
"runtime"
"strings"
"testing"
git_diff_parser "github.com/speakeasy-api/git-diff-parser"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
//go:embed testdata
var testdata embed.FS
func TestParse(t *testing.T) {
type SignificanceTest struct {
name string
relativePath string
input string
want bool
}
significantDiffs, err := testdata.ReadDir("testdata/significant")
assert.NoError(t, err)
insignificantDiffs, err := testdata.ReadDir("testdata/insignificant")
assert.NoError(t, err)
tests := []SignificanceTest{}
for _, testFile := range significantDiffs {
if !strings.HasSuffix(testFile.Name(), "diff") {
continue
}
content, err := testdata.ReadFile("testdata/significant/" + testFile.Name())
assert.NoError(t, err)
tests = append(tests, SignificanceTest{
name: testFile.Name(),
relativePath: filepath.Join("testdata/significant", testFile.Name()),
input: string(content),
want: true,
})
}
for _, testFile := range insignificantDiffs {
if !strings.HasSuffix(testFile.Name(), "diff") {
continue
}
content, err := testdata.ReadFile("testdata/insignificant/" + testFile.Name())
assert.NoError(t, err)
tests = append(tests, SignificanceTest{
name: testFile.Name(),
relativePath: filepath.Join("testdata/insignificant", testFile.Name()),
input: string(content),
want: false,
})
}
for _, test := range tests {
test := test
t.Run(test.name, func(t *testing.T) {
t.Parallel()
got, msg, err := git_diff_parser.SignificantChange(test.input, func(diff *git_diff_parser.FileDiff, change *git_diff_parser.ContentChange) (bool, string) {
if diff.ToFile == "gen.yaml" || diff.ToFile == "RELEASES.md" {
return false, ""
}
if strings.Contains(change.From, "0.13.5") && strings.Contains(change.To, "0.13.6") {
return false, ""
}
if strings.Contains(change.From, "1.120.3") && strings.Contains(change.To, "1.120.4") {
return false, ""
}
if strings.Contains(change.From, "2.192.1") && strings.Contains(change.To, "2.192.3") {
return false, ""
}
if diff.Type == git_diff_parser.FileDiffTypeModified {
return true, fmt.Sprintf("significant diff %#v", diff)
}
if change.Type == git_diff_parser.ContentChangeTypeNOOP {
return false, ""
}
return true, fmt.Sprintf("significant change %#v in %s", change, diff.ToFile)
})
require.NoError(t, err)
MatchMessageSnapshot(t, test.relativePath+".msg", msg)
assert.Equal(t, test.want, got)
})
}
}
func MatchMessageSnapshot(t *testing.T, snapshotName string, content string) {
t.Helper()
_, filename, _, ok := runtime.Caller(0)
require.True(t, ok)
dirname := filepath.Dir(filename)
snapshotFile := filepath.Join(dirname, snapshotName)
if _, err := os.Stat(snapshotFile); err != nil {
f, err := os.OpenFile(snapshotFile, os.O_APPEND|os.O_CREATE|os.O_RDWR, os.ModePerm)
require.NoError(t, err)
defer f.Close()
_, err = f.WriteString(content)
require.NoError(t, err)
return
}
f, err := os.ReadFile(snapshotFile)
require.NoError(t, err)
require.Equal(t, string(f), content)
}