mirror of https://github.com/coder/coder.git
159 lines
5.6 KiB
Go
159 lines
5.6 KiB
Go
package cli_test
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/coder/coder/cli/clitest"
|
|
"github.com/coder/coder/coderd/coderdtest"
|
|
"github.com/coder/coder/coderd/util/ptr"
|
|
"github.com/coder/coder/codersdk"
|
|
)
|
|
|
|
func TestAutostart(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
t.Run("ShowOK", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
var (
|
|
ctx = context.Background()
|
|
client = coderdtest.New(t, &coderdtest.Options{IncludeProvisionerD: true})
|
|
user = coderdtest.CreateFirstUser(t, client)
|
|
version = coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
|
|
_ = coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
|
|
project = coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
|
|
workspace = coderdtest.CreateWorkspace(t, client, user.OrganizationID, project.ID)
|
|
cmdArgs = []string{"autostart", "show", workspace.Name}
|
|
sched = "CRON_TZ=Europe/Dublin 30 17 * * 1-5"
|
|
stdoutBuf = &bytes.Buffer{}
|
|
)
|
|
|
|
err := client.UpdateWorkspaceAutostart(ctx, workspace.ID, codersdk.UpdateWorkspaceAutostartRequest{
|
|
Schedule: ptr.Ref(sched),
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
cmd, root := clitest.New(t, cmdArgs...)
|
|
clitest.SetupConfig(t, client, root)
|
|
cmd.SetOut(stdoutBuf)
|
|
|
|
err = cmd.Execute()
|
|
require.NoError(t, err, "unexpected error")
|
|
// CRON_TZ gets stripped
|
|
require.Contains(t, stdoutBuf.String(), "schedule: 30 17 * * 1-5")
|
|
})
|
|
|
|
t.Run("setunsetOK", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
var (
|
|
ctx = context.Background()
|
|
client = coderdtest.New(t, &coderdtest.Options{IncludeProvisionerD: true})
|
|
user = coderdtest.CreateFirstUser(t, client)
|
|
version = coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
|
|
_ = coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
|
|
project = coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
|
|
workspace = coderdtest.CreateWorkspace(t, client, user.OrganizationID, project.ID)
|
|
tz = "Europe/Dublin"
|
|
cmdArgs = []string{"autostart", "set", workspace.Name, "9:30AM", "Mon-Fri", tz}
|
|
sched = "CRON_TZ=Europe/Dublin 30 9 * * Mon-Fri"
|
|
stdoutBuf = &bytes.Buffer{}
|
|
)
|
|
|
|
cmd, root := clitest.New(t, cmdArgs...)
|
|
clitest.SetupConfig(t, client, root)
|
|
cmd.SetOut(stdoutBuf)
|
|
|
|
err := cmd.Execute()
|
|
require.NoError(t, err, "unexpected error")
|
|
require.Contains(t, stdoutBuf.String(), "will automatically start at 9:30AM Mon-Fri (Europe/Dublin)", "unexpected output")
|
|
|
|
// Ensure autostart schedule updated
|
|
updated, err := client.Workspace(ctx, workspace.ID)
|
|
require.NoError(t, err, "fetch updated workspace")
|
|
require.Equal(t, sched, *updated.AutostartSchedule, "expected autostart schedule to be set")
|
|
|
|
// unset schedule
|
|
cmd, root = clitest.New(t, "autostart", "unset", workspace.Name)
|
|
clitest.SetupConfig(t, client, root)
|
|
cmd.SetOut(stdoutBuf)
|
|
|
|
err = cmd.Execute()
|
|
require.NoError(t, err, "unexpected error")
|
|
require.Contains(t, stdoutBuf.String(), "will no longer automatically start", "unexpected output")
|
|
|
|
// Ensure autostart schedule updated
|
|
updated, err = client.Workspace(ctx, workspace.ID)
|
|
require.NoError(t, err, "fetch updated workspace")
|
|
require.Nil(t, updated.AutostartSchedule, "expected autostart schedule to not be set")
|
|
})
|
|
|
|
t.Run("set_NotFound", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
var (
|
|
client = coderdtest.New(t, &coderdtest.Options{IncludeProvisionerD: true})
|
|
user = coderdtest.CreateFirstUser(t, client)
|
|
version = coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
|
|
_ = coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
|
|
)
|
|
|
|
cmd, root := clitest.New(t, "autostart", "set", "doesnotexist", "09:30AM")
|
|
clitest.SetupConfig(t, client, root)
|
|
|
|
err := cmd.Execute()
|
|
require.ErrorContains(t, err, "status code 404", "unexpected error")
|
|
})
|
|
|
|
t.Run("unset_NotFound", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
var (
|
|
client = coderdtest.New(t, &coderdtest.Options{IncludeProvisionerD: true})
|
|
user = coderdtest.CreateFirstUser(t, client)
|
|
version = coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
|
|
_ = coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
|
|
)
|
|
|
|
cmd, root := clitest.New(t, "autostart", "unset", "doesnotexist")
|
|
clitest.SetupConfig(t, client, root)
|
|
|
|
err := cmd.Execute()
|
|
require.ErrorContains(t, err, "status code 404:", "unexpected error")
|
|
})
|
|
}
|
|
|
|
//nolint:paralleltest // t.Setenv
|
|
func TestAutostartSetDefaultSchedule(t *testing.T) {
|
|
t.Setenv("TZ", "UTC")
|
|
var (
|
|
ctx = context.Background()
|
|
client = coderdtest.New(t, &coderdtest.Options{IncludeProvisionerD: true})
|
|
user = coderdtest.CreateFirstUser(t, client)
|
|
version = coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
|
|
_ = coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
|
|
project = coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
|
|
workspace = coderdtest.CreateWorkspace(t, client, user.OrganizationID, project.ID)
|
|
stdoutBuf = &bytes.Buffer{}
|
|
)
|
|
|
|
expectedSchedule := fmt.Sprintf("CRON_TZ=%s 30 9 * * *", "UTC")
|
|
cmd, root := clitest.New(t, "autostart", "set", workspace.Name, "9:30AM")
|
|
clitest.SetupConfig(t, client, root)
|
|
cmd.SetOutput(stdoutBuf)
|
|
|
|
err := cmd.Execute()
|
|
require.NoError(t, err, "unexpected error")
|
|
|
|
// Ensure nothing happened
|
|
updated, err := client.Workspace(ctx, workspace.ID)
|
|
require.NoError(t, err, "fetch updated workspace")
|
|
require.Equal(t, expectedSchedule, *updated.AutostartSchedule, "expected default autostart schedule")
|
|
require.Contains(t, stdoutBuf.String(), "will automatically start at 9:30AM daily (UTC)")
|
|
}
|