1
1
package provisionersdk_test
2
2
3
3
import (
4
- "encoding/json"
5
4
"testing"
6
5
7
6
"github.com/coder/coder/v2/provisionersdk"
@@ -18,13 +17,13 @@ func TestMutateTags(t *testing.T) {
18
17
for _ ,tt := range []struct {
19
18
name string
20
19
userID uuid.UUID
21
- tags map [string ]string
20
+ tags [] map [string ]string
22
21
want map [string ]string
23
22
}{
24
23
{
25
24
name :"nil tags" ,
26
25
userID :uuid .Nil ,
27
- tags :nil ,
26
+ tags :[] map [ string ] string { nil } ,
28
27
want :map [string ]string {
29
28
provisionersdk .TagScope :provisionersdk .ScopeOrganization ,
30
29
provisionersdk .TagOwner :"" ,
@@ -33,24 +32,28 @@ func TestMutateTags(t *testing.T) {
33
32
{
34
33
name :"empty tags" ,
35
34
userID :uuid .Nil ,
36
- tags :map [string ]string {},
35
+ tags :[] map [string ]string {{} },
37
36
want :map [string ]string {
38
37
provisionersdk .TagScope :provisionersdk .ScopeOrganization ,
39
38
provisionersdk .TagOwner :"" ,
40
39
},
41
40
},
42
41
{
43
- name :"user scope" ,
44
- tags :map [string ]string {provisionersdk .TagScope :provisionersdk .ScopeUser },
42
+ name :"user scope" ,
43
+ tags : []map [string ]string {
44
+ {provisionersdk .TagScope :provisionersdk .ScopeUser },
45
+ },
45
46
userID :testUserID ,
46
47
want :map [string ]string {
47
48
provisionersdk .TagScope :provisionersdk .ScopeUser ,
48
49
provisionersdk .TagOwner :testUserID .String (),
49
50
},
50
51
},
51
52
{
52
- name :"organization scope" ,
53
- tags :map [string ]string {provisionersdk .TagScope :provisionersdk .ScopeOrganization },
53
+ name :"organization scope" ,
54
+ tags : []map [string ]string {
55
+ {provisionersdk .TagScope :provisionersdk .ScopeOrganization },
56
+ },
54
57
userID :testUserID ,
55
58
want :map [string ]string {
56
59
provisionersdk .TagScope :provisionersdk .ScopeOrganization ,
@@ -59,9 +62,11 @@ func TestMutateTags(t *testing.T) {
59
62
},
60
63
{
61
64
name :"organization scope with owner" ,
62
- tags :map [string ]string {
63
- provisionersdk .TagScope :provisionersdk .ScopeOrganization ,
64
- provisionersdk .TagOwner :testUserID .String (),
65
+ tags : []map [string ]string {
66
+ {
67
+ provisionersdk .TagScope :provisionersdk .ScopeOrganization ,
68
+ provisionersdk .TagOwner :testUserID .String (),
69
+ },
65
70
},
66
71
userID :uuid .Nil ,
67
72
want :map [string ]string {
@@ -71,8 +76,10 @@ func TestMutateTags(t *testing.T) {
71
76
},
72
77
{
73
78
name :"owner tag with no other context" ,
74
- tags :map [string ]string {
75
- provisionersdk .TagOwner :testUserID .String (),
79
+ tags : []map [string ]string {
80
+ {
81
+ provisionersdk .TagOwner :testUserID .String (),
82
+ },
76
83
},
77
84
userID :uuid .Nil ,
78
85
want :map [string ]string {
@@ -81,8 +88,96 @@ func TestMutateTags(t *testing.T) {
81
88
},
82
89
},
83
90
{
84
- name :"invalid scope" ,
85
- tags :map [string ]string {provisionersdk .TagScope :"360noscope" },
91
+ name :"invalid scope" ,
92
+ tags : []map [string ]string {
93
+ {provisionersdk .TagScope :"360noscope" },
94
+ },
95
+ userID :testUserID ,
96
+ want :map [string ]string {
97
+ provisionersdk .TagScope :provisionersdk .ScopeOrganization ,
98
+ provisionersdk .TagOwner :"" ,
99
+ },
100
+ },
101
+ {
102
+ name :"merge two empty maps" ,
103
+ tags : []map [string ]string {
104
+ {},
105
+ {},
106
+ },
107
+ userID :testUserID ,
108
+ want :map [string ]string {
109
+ provisionersdk .TagScope :provisionersdk .ScopeOrganization ,
110
+ provisionersdk .TagOwner :"" ,
111
+ },
112
+ },
113
+ {
114
+ name :"merge empty map with non-empty map" ,
115
+ tags : []map [string ]string {
116
+ {},
117
+ {"foo" :"bar" },
118
+ },
119
+ userID :testUserID ,
120
+ want :map [string ]string {
121
+ provisionersdk .TagScope :provisionersdk .ScopeOrganization ,
122
+ provisionersdk .TagOwner :"" ,
123
+ "foo" :"bar" ,
124
+ },
125
+ },
126
+ {
127
+ name :"merge non-empty map with empty map" ,
128
+ tags : []map [string ]string {
129
+ {"foo" :"bar" },
130
+ {},
131
+ },
132
+ userID :testUserID ,
133
+ want :map [string ]string {
134
+ provisionersdk .TagScope :provisionersdk .ScopeOrganization ,
135
+ provisionersdk .TagOwner :"" ,
136
+ "foo" :"bar" ,
137
+ },
138
+ },
139
+ {
140
+ name :"merge map with same map" ,
141
+ tags : []map [string ]string {
142
+ {"foo" :"bar" },
143
+ {"foo" :"bar" },
144
+ },
145
+ userID :testUserID ,
146
+ want :map [string ]string {
147
+ provisionersdk .TagScope :provisionersdk .ScopeOrganization ,
148
+ provisionersdk .TagOwner :"" ,
149
+ "foo" :"bar" ,
150
+ },
151
+ },
152
+ {
153
+ name :"merge map with override" ,
154
+ tags : []map [string ]string {
155
+ {"foo" :"bar" },
156
+ {"foo" :"baz" },
157
+ },
158
+ userID :testUserID ,
159
+ want :map [string ]string {
160
+ provisionersdk .TagScope :provisionersdk .ScopeOrganization ,
161
+ provisionersdk .TagOwner :"" ,
162
+ "foo" :"baz" ,
163
+ },
164
+ },
165
+ {
166
+ name :"do not override empty in second map" ,
167
+ tags : []map [string ]string {
168
+ {"foo" :"bar" },
169
+ {"foo" :"" },
170
+ },
171
+ userID :testUserID ,
172
+ want :map [string ]string {
173
+ provisionersdk .TagScope :provisionersdk .ScopeOrganization ,
174
+ provisionersdk .TagOwner :"" ,
175
+ "foo" :"bar" ,
176
+ },
177
+ },
178
+ {
179
+ name :"merge nil map with nil map" ,
180
+ tags : []map [string ]string {nil ,nil },
86
181
userID :testUserID ,
87
182
want :map [string ]string {
88
183
provisionersdk .TagScope :provisionersdk .ScopeOrganization ,
@@ -93,14 +188,7 @@ func TestMutateTags(t *testing.T) {
93
188
tt := tt
94
189
t .Run (tt .name ,func (t * testing.T ) {
95
190
t .Parallel ()
96
- // make a copy of the map because the function under test
97
- // mutates the map
98
- bytes ,err := json .Marshal (tt .tags )
99
- require .NoError (t ,err )
100
- var tags map [string ]string
101
- err = json .Unmarshal (bytes ,& tags )
102
- require .NoError (t ,err )
103
- got := provisionersdk .MutateTags (tt .userID ,tags )
191
+ got := provisionersdk .MutateTags (tt .userID ,tt .tags ... )
104
192
require .Equal (t ,tt .want ,got )
105
193
})
106
194
}