mirror of https://github.com/coder/coder.git
108 lines
2.6 KiB
Go
108 lines
2.6 KiB
Go
package provisionersdk_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/coder/coder/v2/provisionersdk"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestMutateTags(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
testUserID := uuid.New()
|
|
|
|
for _, tt := range []struct {
|
|
name string
|
|
userID uuid.UUID
|
|
tags map[string]string
|
|
want map[string]string
|
|
}{
|
|
{
|
|
name: "nil tags",
|
|
userID: uuid.Nil,
|
|
tags: nil,
|
|
want: map[string]string{
|
|
provisionersdk.TagScope: provisionersdk.ScopeOrganization,
|
|
provisionersdk.TagOwner: "",
|
|
},
|
|
},
|
|
{
|
|
name: "empty tags",
|
|
userID: uuid.Nil,
|
|
tags: map[string]string{},
|
|
want: map[string]string{
|
|
provisionersdk.TagScope: provisionersdk.ScopeOrganization,
|
|
provisionersdk.TagOwner: "",
|
|
},
|
|
},
|
|
{
|
|
name: "user scope",
|
|
tags: map[string]string{provisionersdk.TagScope: provisionersdk.ScopeUser},
|
|
userID: testUserID,
|
|
want: map[string]string{
|
|
provisionersdk.TagScope: provisionersdk.ScopeUser,
|
|
provisionersdk.TagOwner: testUserID.String(),
|
|
},
|
|
},
|
|
{
|
|
name: "organization scope",
|
|
tags: map[string]string{provisionersdk.TagScope: provisionersdk.ScopeOrganization},
|
|
userID: testUserID,
|
|
want: map[string]string{
|
|
provisionersdk.TagScope: provisionersdk.ScopeOrganization,
|
|
provisionersdk.TagOwner: "",
|
|
},
|
|
},
|
|
{
|
|
name: "organization scope with owner",
|
|
tags: map[string]string{
|
|
provisionersdk.TagScope: provisionersdk.ScopeOrganization,
|
|
provisionersdk.TagOwner: testUserID.String(),
|
|
},
|
|
userID: uuid.Nil,
|
|
want: map[string]string{
|
|
provisionersdk.TagScope: provisionersdk.ScopeOrganization,
|
|
provisionersdk.TagOwner: "",
|
|
},
|
|
},
|
|
{
|
|
name: "owner tag with no other context",
|
|
tags: map[string]string{
|
|
provisionersdk.TagOwner: testUserID.String(),
|
|
},
|
|
userID: uuid.Nil,
|
|
want: map[string]string{
|
|
provisionersdk.TagScope: provisionersdk.ScopeOrganization,
|
|
provisionersdk.TagOwner: "",
|
|
},
|
|
},
|
|
{
|
|
name: "invalid scope",
|
|
tags: map[string]string{provisionersdk.TagScope: "360noscope"},
|
|
userID: testUserID,
|
|
want: map[string]string{
|
|
provisionersdk.TagScope: provisionersdk.ScopeOrganization,
|
|
provisionersdk.TagOwner: "",
|
|
},
|
|
},
|
|
} {
|
|
tt := tt
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
// make a copy of the map because the function under test
|
|
// mutates the map
|
|
bytes, err := json.Marshal(tt.tags)
|
|
require.NoError(t, err)
|
|
var tags map[string]string
|
|
err = json.Unmarshal(bytes, &tags)
|
|
require.NoError(t, err)
|
|
got := provisionersdk.MutateTags(tt.userID, tags)
|
|
require.Equal(t, tt.want, got)
|
|
})
|
|
}
|
|
}
|