mirror of
https://github.com/coder/coder.git
synced 2025-07-13 21:36:50 +00:00
Add tests
This commit is contained in:
@ -1340,35 +1340,9 @@ func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob)
|
||||
}
|
||||
}
|
||||
|
||||
for _, preset := range jobType.TemplateImport.Presets {
|
||||
s.Logger.Info(ctx, "inserting template import job preset",
|
||||
slog.F("job_id", job.ID.String()),
|
||||
slog.F("preset_name", preset.Name),
|
||||
)
|
||||
|
||||
dbPreset, err := s.Database.InsertPreset(ctx, database.InsertPresetParams{
|
||||
TemplateVersionID: input.TemplateVersionID,
|
||||
Name: preset.Name,
|
||||
CreatedAt: s.timeNow(),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("insert preset: %w", err)
|
||||
}
|
||||
|
||||
var presetParameterNames []string
|
||||
var presetParameterValues []string
|
||||
for _, parameter := range preset.Parameters {
|
||||
presetParameterNames = append(presetParameterNames, parameter.Name)
|
||||
presetParameterValues = append(presetParameterValues, parameter.Value)
|
||||
}
|
||||
_, err = s.Database.InsertPresetParameters(ctx, database.InsertPresetParametersParams{
|
||||
TemplateVersionPresetID: dbPreset.ID,
|
||||
Names: presetParameterNames,
|
||||
Values: presetParameterValues,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("insert preset parameters: %w", err)
|
||||
}
|
||||
err = InsertWorkspacePresetsAndParameters(ctx, s.Logger, s.Database, jobID, input.TemplateVersionID, jobType.TemplateImport.Presets, s.timeNow())
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("insert workspace presets and parameters: %w", err)
|
||||
}
|
||||
|
||||
var completedError sql.NullString
|
||||
@ -1840,6 +1814,46 @@ func InsertWorkspaceModule(ctx context.Context, db database.Store, jobID uuid.UU
|
||||
return nil
|
||||
}
|
||||
|
||||
func InsertWorkspacePresetsAndParameters(ctx context.Context, logger slog.Logger, db database.Store, jobID uuid.UUID, templateVersionID uuid.UUID, protoPresets []*sdkproto.Preset, t time.Time) error {
|
||||
for _, preset := range protoPresets {
|
||||
logger.Info(ctx, "inserting template import job preset",
|
||||
slog.F("job_id", jobID.String()),
|
||||
slog.F("preset_name", preset.Name),
|
||||
)
|
||||
if err := InsertWorkspacePresetAndParameters(ctx, db, templateVersionID, preset, t); err != nil {
|
||||
return xerrors.Errorf("insert workspace preset: %w", err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func InsertWorkspacePresetAndParameters(ctx context.Context, db database.Store, templateVersionID uuid.UUID, protoPreset *sdkproto.Preset, t time.Time) error {
|
||||
dbPreset, err := db.InsertPreset(ctx, database.InsertPresetParams{
|
||||
TemplateVersionID: templateVersionID,
|
||||
Name: protoPreset.Name,
|
||||
CreatedAt: t,
|
||||
})
|
||||
if err != nil {
|
||||
return xerrors.Errorf("insert preset: %w", err)
|
||||
}
|
||||
|
||||
var presetParameterNames []string
|
||||
var presetParameterValues []string
|
||||
for _, parameter := range protoPreset.Parameters {
|
||||
presetParameterNames = append(presetParameterNames, parameter.Name)
|
||||
presetParameterValues = append(presetParameterValues, parameter.Value)
|
||||
}
|
||||
_, err = db.InsertPresetParameters(ctx, database.InsertPresetParametersParams{
|
||||
TemplateVersionPresetID: dbPreset.ID,
|
||||
Names: presetParameterNames,
|
||||
Values: presetParameterValues,
|
||||
})
|
||||
if err != nil {
|
||||
return xerrors.Errorf("insert preset parameters: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func InsertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.UUID, transition database.WorkspaceTransition, protoResource *sdkproto.Resource, snapshot *telemetry.Snapshot) error {
|
||||
resource, err := db.InsertWorkspaceResource(ctx, database.InsertWorkspaceResourceParams{
|
||||
ID: uuid.New(),
|
||||
|
@ -30,6 +30,7 @@ import (
|
||||
"github.com/coder/coder/v2/coderd/database"
|
||||
"github.com/coder/coder/v2/coderd/database/dbgen"
|
||||
"github.com/coder/coder/v2/coderd/database/dbmem"
|
||||
"github.com/coder/coder/v2/coderd/database/dbtestutil"
|
||||
"github.com/coder/coder/v2/coderd/database/dbtime"
|
||||
"github.com/coder/coder/v2/coderd/database/pubsub"
|
||||
"github.com/coder/coder/v2/coderd/externalauth"
|
||||
@ -1708,6 +1709,155 @@ func TestCompleteJob(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestInsertWorkspacePresetsAndParameters(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
type testCase struct {
|
||||
name string
|
||||
givenPresets []*sdkproto.Preset
|
||||
}
|
||||
|
||||
testCases := []testCase{
|
||||
{
|
||||
name: "no presets",
|
||||
},
|
||||
{
|
||||
name: "one preset with no parameters",
|
||||
givenPresets: []*sdkproto.Preset{
|
||||
{
|
||||
Name: "preset1",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "one preset with multiple parameters",
|
||||
givenPresets: []*sdkproto.Preset{
|
||||
{
|
||||
Name: "preset1",
|
||||
Parameters: []*sdkproto.PresetParameter{
|
||||
{
|
||||
Name: "param1",
|
||||
Value: "value1",
|
||||
},
|
||||
{
|
||||
Name: "param2",
|
||||
Value: "value2",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "multiple presets with parameters",
|
||||
givenPresets: []*sdkproto.Preset{
|
||||
{
|
||||
Name: "preset1",
|
||||
Parameters: []*sdkproto.PresetParameter{
|
||||
{
|
||||
Name: "param1",
|
||||
Value: "value1",
|
||||
},
|
||||
{
|
||||
Name: "param2",
|
||||
Value: "value2",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "preset2",
|
||||
Parameters: []*sdkproto.PresetParameter{
|
||||
{
|
||||
Name: "param3",
|
||||
Value: "value3",
|
||||
},
|
||||
{
|
||||
Name: "param4",
|
||||
Value: "value4",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, c := range testCases {
|
||||
c := c
|
||||
t.Run(c.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
ctx := context.Background()
|
||||
logger := testutil.Logger(t)
|
||||
db, ps := dbtestutil.NewDB(t)
|
||||
org := dbgen.Organization(t, db, database.Organization{})
|
||||
user := dbgen.User(t, db, database.User{})
|
||||
job := dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{
|
||||
Type: database.ProvisionerJobTypeWorkspaceBuild,
|
||||
OrganizationID: org.ID,
|
||||
})
|
||||
templateVersion := dbgen.TemplateVersion(t, db, database.TemplateVersion{
|
||||
JobID: job.ID,
|
||||
OrganizationID: org.ID,
|
||||
CreatedBy: user.ID,
|
||||
})
|
||||
|
||||
err := provisionerdserver.InsertWorkspacePresetsAndParameters(
|
||||
ctx,
|
||||
logger,
|
||||
db,
|
||||
job.ID,
|
||||
templateVersion.ID,
|
||||
c.givenPresets,
|
||||
time.Now(),
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
gotPresets, err := db.GetPresetsByTemplateVersionID(ctx, templateVersion.ID)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, gotPresets, len(c.givenPresets))
|
||||
|
||||
for _, givenPreset := range c.givenPresets {
|
||||
foundMatch := false
|
||||
for _, gotPreset := range gotPresets {
|
||||
if givenPreset.Name == gotPreset.Name {
|
||||
foundMatch = true
|
||||
break
|
||||
}
|
||||
}
|
||||
require.True(t, foundMatch, "preset %s not found in parameters", givenPreset.Name)
|
||||
}
|
||||
|
||||
gotPresetParameters, err := db.GetPresetParametersByTemplateVersionID(ctx, templateVersion.ID)
|
||||
require.NoError(t, err)
|
||||
|
||||
for _, givenPreset := range c.givenPresets {
|
||||
for _, givenParameter := range givenPreset.Parameters {
|
||||
foundMatch := false
|
||||
for _, gotParameter := range gotPresetParameters {
|
||||
nameMatches := givenParameter.Name == gotParameter.Name
|
||||
valueMatches := givenParameter.Value == gotParameter.Value
|
||||
|
||||
// ensure that preset parameters are matched to the correct preset:
|
||||
var gotPreset database.GetPresetsByTemplateVersionIDRow
|
||||
for _, preset := range gotPresets {
|
||||
if preset.ID == gotParameter.TemplateVersionPresetID {
|
||||
gotPreset = preset
|
||||
break
|
||||
}
|
||||
}
|
||||
presetMatches := gotPreset.Name == givenPreset.Name
|
||||
|
||||
if nameMatches && valueMatches && presetMatches {
|
||||
foundMatch = true
|
||||
break
|
||||
}
|
||||
}
|
||||
require.True(t, foundMatch, "preset parameter %s not found in presets", givenParameter.Name)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestInsertWorkspaceResource(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := context.Background()
|
||||
|
Reference in New Issue
Block a user