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 : mapslice ( 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 : mapslice ( 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 : mapslice (
44
+ map [string ]string {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 : mapslice (
55
+ map [string ]string {provisionersdk .TagScope : provisionersdk .ScopeOrganization },
56
+ ),
54
57
userID : testUserID ,
55
58
want : map [string ]string {
56
59
provisionersdk .TagScope : provisionersdk .ScopeOrganization ,
@@ -59,49 +62,129 @@ func TestMutateTags(t *testing.T) {
59
62
},
60
63
{
61
64
name : "organization scope with owner" ,
62
- tags : map [string ]string {
65
+ tags : mapslice (
66
+ map [string ]string {
67
+ provisionersdk .TagScope : provisionersdk .ScopeOrganization ,
68
+ provisionersdk .TagOwner : testUserID .String (),
69
+ },
70
+ ),
71
+ userID : uuid .Nil ,
72
+ want : map [string ]string {
63
73
provisionersdk .TagScope : provisionersdk .ScopeOrganization ,
64
- provisionersdk .TagOwner : testUserID . String () ,
74
+ provisionersdk .TagOwner : "" ,
65
75
},
76
+ },
77
+ {
78
+ name : "owner tag with no other context" ,
79
+ tags : mapslice (
80
+ map [string ]string {
81
+ provisionersdk .TagOwner : testUserID .String (),
82
+ },
83
+ ),
66
84
userID : uuid .Nil ,
67
85
want : map [string ]string {
68
86
provisionersdk .TagScope : provisionersdk .ScopeOrganization ,
69
87
provisionersdk .TagOwner : "" ,
70
88
},
71
89
},
72
90
{
73
- name : "owner tag with no other context" ,
74
- tags : map [string ]string {
75
- provisionersdk .TagOwner : testUserID .String (),
91
+ name : "invalid scope" ,
92
+ tags : mapslice (
93
+ map [string ]string {provisionersdk .TagScope : "360noscope" },
94
+ ),
95
+ userID : testUserID ,
96
+ want : map [string ]string {
97
+ provisionersdk .TagScope : provisionersdk .ScopeOrganization ,
98
+ provisionersdk .TagOwner : "" ,
76
99
},
77
- userID : uuid .Nil ,
100
+ },
101
+ {
102
+ name : "merge two empty maps" ,
103
+ tags : mapslice (
104
+ map [string ]string {},
105
+ map [string ]string {},
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 : mapslice (
116
+ map [string ]string {},
117
+ map [string ]string {"foo" : "bar" },
118
+ ),
119
+ userID : testUserID ,
78
120
want : map [string ]string {
79
121
provisionersdk .TagScope : provisionersdk .ScopeOrganization ,
80
122
provisionersdk .TagOwner : "" ,
123
+ "foo" : "bar" ,
81
124
},
82
125
},
83
126
{
84
- name : "invalid scope" ,
85
- tags : map [string ]string {provisionersdk .TagScope : "360noscope" },
127
+ name : "merge non-empty map with empty map" ,
128
+ tags : mapslice (
129
+ map [string ]string {"foo" : "bar" },
130
+ map [string ]string {},
131
+ ),
86
132
userID : testUserID ,
87
133
want : map [string ]string {
88
134
provisionersdk .TagScope : provisionersdk .ScopeOrganization ,
89
135
provisionersdk .TagOwner : "" ,
136
+ "foo" : "bar" ,
137
+ },
138
+ },
139
+ {
140
+ name : "merge map with same map" ,
141
+ tags : mapslice (
142
+ map [string ]string {"foo" : "bar" },
143
+ map [string ]string {"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 : mapslice (
155
+ map [string ]string {"foo" : "bar" },
156
+ map [string ]string {"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 : mapslice (
168
+ map [string ]string {"foo" : "bar" },
169
+ map [string ]string {"foo" : "" },
170
+ ),
171
+ userID : testUserID ,
172
+ want : map [string ]string {
173
+ provisionersdk .TagScope : provisionersdk .ScopeOrganization ,
174
+ provisionersdk .TagOwner : "" ,
175
+ "foo" : "bar" ,
90
176
},
91
177
},
92
178
} {
93
179
tt := tt
94
180
t .Run (tt .name , func (t * testing.T ) {
95
181
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 )
182
+ got := provisionersdk .MutateTags (tt .userID , tt .tags ... )
104
183
require .Equal (t , tt .want , got )
105
184
})
106
185
}
107
186
}
187
+
188
+ func mapslice (m ... map [string ]string ) []map [string ]string {
189
+ return m
190
+ }
0 commit comments