mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat(coderd): add support for presets to the coder API (#16526)
This pull request builds on the existing migrations and queries to add support for presets to the coder API.
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
package coderd_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/coder/coder/v2/coderd/coderdtest"
|
||||
"github.com/coder/coder/v2/coderd/database"
|
||||
"github.com/coder/coder/v2/coderd/database/dbauthz"
|
||||
"github.com/coder/coder/v2/coderd/httpmw"
|
||||
"github.com/coder/coder/v2/coderd/rbac"
|
||||
"github.com/coder/coder/v2/codersdk"
|
||||
"github.com/coder/coder/v2/testutil"
|
||||
)
|
||||
|
||||
func TestTemplateVersionPresets(t *testing.T) {
|
||||
// TODO (sasswart): Test case: what if a user tries to read presets or preset parameters from a different org?
|
||||
|
||||
t.Parallel()
|
||||
|
||||
givenPreset := codersdk.Preset{
|
||||
Name: "My Preset",
|
||||
Parameters: []codersdk.PresetParameter{
|
||||
{
|
||||
Name: "preset_param1",
|
||||
Value: "A1B2C3",
|
||||
},
|
||||
{
|
||||
Name: "preset_param2",
|
||||
Value: "D4E5F6",
|
||||
},
|
||||
},
|
||||
}
|
||||
ctx := testutil.Context(t, testutil.WaitShort)
|
||||
|
||||
client, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||
user := coderdtest.CreateFirstUser(t, client)
|
||||
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
|
||||
|
||||
// nolint:gocritic // This is a test
|
||||
provisionerCtx := dbauthz.AsProvisionerd(ctx)
|
||||
|
||||
dbPreset, err := db.InsertPreset(provisionerCtx, database.InsertPresetParams{
|
||||
Name: givenPreset.Name,
|
||||
TemplateVersionID: version.ID,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
var presetParameterNames []string
|
||||
var presetParameterValues []string
|
||||
for _, presetParameter := range givenPreset.Parameters {
|
||||
presetParameterNames = append(presetParameterNames, presetParameter.Name)
|
||||
presetParameterValues = append(presetParameterValues, presetParameter.Value)
|
||||
}
|
||||
_, err = db.InsertPresetParameters(provisionerCtx, database.InsertPresetParametersParams{
|
||||
TemplateVersionPresetID: dbPreset.ID,
|
||||
Names: presetParameterNames,
|
||||
Values: presetParameterValues,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
userSubject, _, err := httpmw.UserRBACSubject(ctx, db, user.UserID, rbac.ScopeAll)
|
||||
require.NoError(t, err)
|
||||
userCtx := dbauthz.As(ctx, userSubject)
|
||||
|
||||
gotPresets, err := client.TemplateVersionPresets(userCtx, version.ID)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 1, len(gotPresets))
|
||||
require.Equal(t, givenPreset.Name, gotPresets[0].Name)
|
||||
|
||||
for _, presetParameter := range givenPreset.Parameters {
|
||||
require.Contains(t, gotPresets[0].Parameters, presetParameter)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user