Skip to content

Commit 6f2bef5

Browse files
committed
cli/bump: ensure minimum duration
1 parent 2a74312 commit 6f2bef5

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

cli/bump.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ func bump() *cobra.Command {
3535
}
3636
bumpDuration = d
3737
}
38+
39+
if bumpDuration < time.Minute {
40+
return xerrors.New("minimum bump duration is 1 minute")
41+
}
42+
3843
client, err := createClient(cmd)
3944
if err != nil {
4045
return xerrors.Errorf("create client: %w", err)

cli/bump_test.go

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func TestBump(t *testing.T) {
9090

9191
// When: we execute `coder bump workspace <number without units>`
9292
err = cmd.ExecuteContext(ctx)
93-
require.NoError(t, err, "unexpected error")
93+
require.NoError(t, err)
9494

9595
// Then: the deadline of the latest build is updated assuming the units are minutes
9696
updated, err := client.Workspace(ctx, workspace.ID)
@@ -175,4 +175,44 @@ func TestBump(t *testing.T) {
175175
require.NoError(t, err)
176176
require.Zero(t, updated.LatestBuild.Deadline)
177177
})
178+
179+
t.Run("BumpMinimumDuration", func(t *testing.T) {
180+
t.Parallel()
181+
182+
// Given: we have a workspace with no deadline set
183+
var (
184+
err error
185+
ctx = context.Background()
186+
client = coderdtest.New(t, &coderdtest.Options{IncludeProvisionerD: true})
187+
user = coderdtest.CreateFirstUser(t, client)
188+
version = coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
189+
_ = coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
190+
project = coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
191+
workspace = coderdtest.CreateWorkspace(t, client, user.OrganizationID, project.ID)
192+
cmdArgs = []string{"bump", workspace.Name, "59s"}
193+
stdoutBuf = &bytes.Buffer{}
194+
)
195+
196+
// Given: we wait for the workspace to build
197+
coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID)
198+
workspace, err = client.Workspace(ctx, workspace.ID)
199+
require.NoError(t, err)
200+
201+
// Assert test invariant: workspace build has a deadline set equal to now plus ttl
202+
require.WithinDuration(t, workspace.LatestBuild.Deadline, time.Now().Add(*workspace.TTL), time.Minute)
203+
require.NoError(t, err)
204+
205+
cmd, root := clitest.New(t, cmdArgs...)
206+
clitest.SetupConfig(t, client, root)
207+
cmd.SetOut(stdoutBuf)
208+
209+
// When: we execute `coder bump workspace 59s`
210+
err = cmd.ExecuteContext(ctx)
211+
212+
// Then: an error is reported and the deadline remains as before
213+
require.ErrorContains(t, err, "minimum bump duration is 1 minute")
214+
updated, err := client.Workspace(ctx, workspace.ID)
215+
require.NoError(t, err)
216+
require.WithinDuration(t, workspace.LatestBuild.Deadline, updated.LatestBuild.Deadline, time.Minute)
217+
})
178218
}

0 commit comments

Comments
 (0)