Skip to content

Commit 4c61646

Browse files
unit tests for marshal diff
1 parent e626a45 commit 4c61646

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package plugin
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hexops/autogold/v2"
7+
"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
8+
"github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin"
9+
pulumirpc "github.com/pulumi/pulumi/sdk/v3/proto/go"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
// autogold gets confused about the enums, so we just re-define them here.
14+
//
15+
//nolint:revive
16+
const (
17+
ADD pulumirpc.PropertyDiff_Kind = 0
18+
ADD_REPLACE pulumirpc.PropertyDiff_Kind = 1
19+
DELETE pulumirpc.PropertyDiff_Kind = 2
20+
DELETE_REPLACE pulumirpc.PropertyDiff_Kind = 3
21+
UPDATE pulumirpc.PropertyDiff_Kind = 4
22+
UPDATE_REPLACE pulumirpc.PropertyDiff_Kind = 5
23+
)
24+
25+
//nolint:revive
26+
const (
27+
DIFF_UNKNOWN pulumirpc.DiffResponse_DiffChanges = 0
28+
DIFF_NONE pulumirpc.DiffResponse_DiffChanges = 1
29+
DIFF_SOME pulumirpc.DiffResponse_DiffChanges = 2
30+
)
31+
32+
//nolint:unconvert
33+
func TestMarshalDiff(t *testing.T) {
34+
t.Parallel()
35+
36+
runTest := func(t *testing.T, diff plugin.DiffResult) *pulumirpc.DiffResponse {
37+
server := providerServer{}
38+
resp, err := server.marshalDiff(diff)
39+
require.NoError(t, err)
40+
return resp
41+
}
42+
43+
t.Run("no diffs", func(t *testing.T) {
44+
diff := plugin.DiffResult{
45+
Changes: plugin.DiffNone,
46+
ReplaceKeys: []resource.PropertyKey{},
47+
ChangedKeys: []resource.PropertyKey{},
48+
DetailedDiff: map[string]plugin.PropertyDiff{},
49+
}
50+
51+
autogold.Expect(&pulumirpc.DiffResponse{
52+
Replaces: []string{},
53+
Changes: pulumirpc.DiffResponse_DIFF_NONE,
54+
Diffs: []string{},
55+
}).Equal(t, runTest(t, diff))
56+
})
57+
58+
t.Run("diff without detailed diff", func(t *testing.T) {
59+
diff := plugin.DiffResult{
60+
Changes: plugin.DiffSome,
61+
ReplaceKeys: []resource.PropertyKey{"replace"},
62+
ChangedKeys: []resource.PropertyKey{"change"},
63+
}
64+
65+
autogold.Expect(&pulumirpc.DiffResponse{
66+
Replaces: []string{"replace"},
67+
Changes: pulumirpc.DiffResponse_DIFF_SOME,
68+
Diffs: []string{"change"},
69+
}).Equal(t, runTest(t, diff))
70+
})
71+
72+
t.Run("diff with detailed diff", func(t *testing.T) {
73+
diff := plugin.DiffResult{
74+
Changes: plugin.DiffSome,
75+
ReplaceKeys: []resource.PropertyKey{"replace"},
76+
ChangedKeys: []resource.PropertyKey{"change", "replace"},
77+
DetailedDiff: map[string]plugin.PropertyDiff{
78+
"change": {
79+
Kind: plugin.DiffAdd,
80+
},
81+
"replace": {
82+
Kind: plugin.DiffDeleteReplace,
83+
},
84+
},
85+
}
86+
87+
autogold.Expect(&pulumirpc.DiffResponse{
88+
Replaces: []string{
89+
"replace",
90+
},
91+
Changes: pulumirpc.DiffResponse_DiffChanges(DIFF_SOME),
92+
Diffs: []string{
93+
"change",
94+
"replace",
95+
},
96+
DetailedDiff: map[string]*pulumirpc.PropertyDiff{
97+
"change": {},
98+
"replace": {Kind: pulumirpc.PropertyDiff_Kind(DELETE_REPLACE)},
99+
},
100+
HasDetailedDiff: true,
101+
}).Equal(t, runTest(t, diff))
102+
})
103+
}

0 commit comments

Comments
 (0)