mirror of https://github.com/coder/coder.git
174 lines
5.9 KiB
Go
174 lines
5.9 KiB
Go
package parameter_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/coder/coder/coderd/database"
|
|
"github.com/coder/coder/coderd/database/dbfake"
|
|
"github.com/coder/coder/coderd/database/dbgen"
|
|
"github.com/coder/coder/coderd/parameter"
|
|
)
|
|
|
|
func TestCompute(t *testing.T) {
|
|
t.Parallel()
|
|
generateScope := func() parameter.ComputeScope {
|
|
return parameter.ComputeScope{
|
|
TemplateImportJobID: uuid.New(),
|
|
TemplateID: uuid.NullUUID{
|
|
UUID: uuid.New(),
|
|
Valid: true,
|
|
},
|
|
WorkspaceID: uuid.NullUUID{
|
|
UUID: uuid.New(),
|
|
Valid: true,
|
|
},
|
|
}
|
|
}
|
|
type parameterOptions struct {
|
|
AllowOverrideSource bool
|
|
AllowOverrideDestination bool
|
|
DefaultDestinationScheme database.ParameterDestinationScheme
|
|
TemplateImportJobID uuid.UUID
|
|
}
|
|
generateParameter := func(t *testing.T, db database.Store, opts parameterOptions) database.ParameterSchema {
|
|
if opts.DefaultDestinationScheme == "" {
|
|
opts.DefaultDestinationScheme = database.ParameterDestinationSchemeEnvironmentVariable
|
|
}
|
|
|
|
param := dbgen.ParameterSchema(t, db, database.ParameterSchema{
|
|
JobID: opts.TemplateImportJobID,
|
|
DefaultSourceScheme: database.ParameterSourceSchemeData,
|
|
AllowOverrideSource: opts.AllowOverrideSource,
|
|
AllowOverrideDestination: opts.AllowOverrideDestination,
|
|
DefaultDestinationScheme: opts.DefaultDestinationScheme,
|
|
ValidationTypeSystem: database.ParameterTypeSystemNone,
|
|
})
|
|
|
|
return param
|
|
}
|
|
|
|
t.Run("NoValue", func(t *testing.T) {
|
|
t.Parallel()
|
|
db := dbfake.New()
|
|
scope := generateScope()
|
|
_ = dbgen.ParameterSchema(t, db, database.ParameterSchema{
|
|
JobID: scope.TemplateImportJobID,
|
|
DefaultSourceScheme: database.ParameterSourceSchemeNone,
|
|
DefaultDestinationScheme: database.ParameterDestinationSchemeNone,
|
|
ValidationTypeSystem: database.ParameterTypeSystemNone,
|
|
})
|
|
computed, err := parameter.Compute(context.Background(), db, scope, nil)
|
|
require.NoError(t, err)
|
|
require.Len(t, computed, 0)
|
|
})
|
|
|
|
t.Run("UseDefaultTemplateValue", func(t *testing.T) {
|
|
t.Parallel()
|
|
db := dbfake.New()
|
|
scope := generateScope()
|
|
parameterSchema := generateParameter(t, db, parameterOptions{
|
|
TemplateImportJobID: scope.TemplateImportJobID,
|
|
DefaultDestinationScheme: database.ParameterDestinationSchemeProvisionerVariable,
|
|
})
|
|
computed, err := parameter.Compute(context.Background(), db, scope, nil)
|
|
require.NoError(t, err)
|
|
require.Len(t, computed, 1)
|
|
computedValue := computed[0]
|
|
require.True(t, computedValue.DefaultSourceValue)
|
|
require.Equal(t, database.ParameterScopeImportJob, computedValue.Scope)
|
|
require.Equal(t, scope.TemplateImportJobID, computedValue.ScopeID)
|
|
require.Equal(t, computedValue.SourceValue, parameterSchema.DefaultSourceValue)
|
|
})
|
|
|
|
t.Run("TemplateOverridesTemplateDefault", func(t *testing.T) {
|
|
t.Parallel()
|
|
db := dbfake.New()
|
|
scope := generateScope()
|
|
parameterSchema := generateParameter(t, db, parameterOptions{
|
|
TemplateImportJobID: scope.TemplateImportJobID,
|
|
})
|
|
value := dbgen.ParameterValue(t, db, database.ParameterValue{
|
|
Name: parameterSchema.Name,
|
|
Scope: database.ParameterScopeTemplate,
|
|
ScopeID: scope.TemplateID.UUID,
|
|
SourceScheme: database.ParameterSourceSchemeData,
|
|
SourceValue: "nop",
|
|
DestinationScheme: database.ParameterDestinationSchemeEnvironmentVariable,
|
|
})
|
|
|
|
computed, err := parameter.Compute(context.Background(), db, scope, nil)
|
|
require.NoError(t, err)
|
|
require.Len(t, computed, 1)
|
|
require.Equal(t, false, computed[0].DefaultSourceValue)
|
|
require.Equal(t, value.SourceValue, computed[0].SourceValue)
|
|
})
|
|
|
|
t.Run("WorkspaceCannotOverwriteTemplateDefault", func(t *testing.T) {
|
|
t.Parallel()
|
|
db := dbfake.New()
|
|
scope := generateScope()
|
|
parameterSchema := generateParameter(t, db, parameterOptions{
|
|
TemplateImportJobID: scope.TemplateImportJobID,
|
|
})
|
|
|
|
_ = dbgen.ParameterValue(t, db, database.ParameterValue{
|
|
Name: parameterSchema.Name,
|
|
Scope: database.ParameterScopeWorkspace,
|
|
ScopeID: scope.WorkspaceID.UUID,
|
|
SourceScheme: database.ParameterSourceSchemeData,
|
|
SourceValue: "nop",
|
|
DestinationScheme: database.ParameterDestinationSchemeEnvironmentVariable,
|
|
})
|
|
|
|
computed, err := parameter.Compute(context.Background(), db, scope, nil)
|
|
require.NoError(t, err)
|
|
require.Len(t, computed, 1)
|
|
require.Equal(t, true, computed[0].DefaultSourceValue)
|
|
})
|
|
|
|
t.Run("WorkspaceOverwriteTemplateDefault", func(t *testing.T) {
|
|
t.Parallel()
|
|
db := dbfake.New()
|
|
scope := generateScope()
|
|
parameterSchema := generateParameter(t, db, parameterOptions{
|
|
AllowOverrideSource: true,
|
|
TemplateImportJobID: scope.TemplateImportJobID,
|
|
})
|
|
_ = dbgen.ParameterValue(t, db, database.ParameterValue{
|
|
Name: parameterSchema.Name,
|
|
Scope: database.ParameterScopeWorkspace,
|
|
ScopeID: scope.WorkspaceID.UUID,
|
|
SourceScheme: database.ParameterSourceSchemeData,
|
|
SourceValue: "nop",
|
|
DestinationScheme: database.ParameterDestinationSchemeEnvironmentVariable,
|
|
})
|
|
|
|
computed, err := parameter.Compute(context.Background(), db, scope, nil)
|
|
require.NoError(t, err)
|
|
require.Len(t, computed, 1)
|
|
require.Equal(t, false, computed[0].DefaultSourceValue)
|
|
})
|
|
|
|
t.Run("HideRedisplay", func(t *testing.T) {
|
|
t.Parallel()
|
|
db := dbfake.New()
|
|
scope := generateScope()
|
|
_ = generateParameter(t, db, parameterOptions{
|
|
TemplateImportJobID: scope.TemplateImportJobID,
|
|
DefaultDestinationScheme: database.ParameterDestinationSchemeProvisionerVariable,
|
|
})
|
|
computed, err := parameter.Compute(context.Background(), db, scope, ¶meter.ComputeOptions{
|
|
HideRedisplayValues: true,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Len(t, computed, 1)
|
|
computedValue := computed[0]
|
|
require.True(t, computedValue.DefaultSourceValue)
|
|
require.Equal(t, computedValue.SourceValue, "")
|
|
})
|
|
}
|