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
}
0 commit comments