@@ -2394,6 +2394,89 @@ func TestWorkspaceUpdateTTL(t *testing.T) {
2394
2394
})
2395
2395
}
2396
2396
2397
+ t .Run ("ModifyAutostopWithRunningWorkspace" ,func (t * testing.T ) {
2398
+ testCases := []struct {
2399
+ name string
2400
+ fromTTL * int64
2401
+ toTTL * int64
2402
+ afterUpdate func (t * testing.T ,before ,after codersdk.NullTime )
2403
+ }{
2404
+ {
2405
+ name :"RemoveAutostopRemovesDeadline" ,
2406
+ fromTTL :ptr .Ref ((8 * time .Hour ).Milliseconds ()),
2407
+ toTTL :nil ,
2408
+ afterUpdate :func (t * testing.T ,before ,after codersdk.NullTime ) {
2409
+ require .NotZero (t ,before )
2410
+ require .Zero (t ,after )
2411
+ },
2412
+ },
2413
+ {
2414
+ name :"AddAutostopDoesNotAddDeadline" ,
2415
+ fromTTL :nil ,
2416
+ toTTL :ptr .Ref ((8 * time .Hour ).Milliseconds ()),
2417
+ afterUpdate :func (t * testing.T ,before ,after codersdk.NullTime ) {
2418
+ require .Zero (t ,before )
2419
+ require .Zero (t ,after )
2420
+ },
2421
+ },
2422
+ {
2423
+ name :"IncreaseAutostopDoesNotModifyDeadline" ,
2424
+ fromTTL :ptr .Ref ((4 * time .Hour ).Milliseconds ()),
2425
+ toTTL :ptr .Ref ((8 * time .Hour ).Milliseconds ()),
2426
+ afterUpdate :func (t * testing.T ,before ,after codersdk.NullTime ) {
2427
+ require .NotZero (t ,before )
2428
+ require .NotZero (t ,after )
2429
+ require .Equal (t ,before ,after )
2430
+ },
2431
+ },
2432
+ {
2433
+ name :"DecreaseAutostopDoesNotModifyDeadline" ,
2434
+ fromTTL :ptr .Ref ((8 * time .Hour ).Milliseconds ()),
2435
+ toTTL :ptr .Ref ((4 * time .Hour ).Milliseconds ()),
2436
+ afterUpdate :func (t * testing.T ,before ,after codersdk.NullTime ) {
2437
+ require .NotZero (t ,before )
2438
+ require .NotZero (t ,after )
2439
+ require .Equal (t ,before ,after )
2440
+ },
2441
+ },
2442
+ }
2443
+
2444
+ for _ ,testCase := range testCases {
2445
+ testCase := testCase
2446
+
2447
+ t .Run (testCase .name ,func (t * testing.T ) {
2448
+ var (
2449
+ client = coderdtest .New (t ,& coderdtest.Options {IncludeProvisionerDaemon :true })
2450
+ user = coderdtest .CreateFirstUser (t ,client )
2451
+ version = coderdtest .CreateTemplateVersion (t ,client ,user .OrganizationID ,nil )
2452
+ _ = coderdtest .AwaitTemplateVersionJobCompleted (t ,client ,version .ID )
2453
+ template = coderdtest .CreateTemplate (t ,client ,user .OrganizationID ,version .ID )
2454
+ workspace = coderdtest .CreateWorkspace (t ,client ,template .ID ,func (cwr * codersdk.CreateWorkspaceRequest ) {
2455
+ cwr .TTLMillis = testCase .fromTTL
2456
+ })
2457
+ build = coderdtest .AwaitWorkspaceBuildJobCompleted (t ,client ,workspace .LatestBuild .ID )
2458
+ )
2459
+
2460
+ ctx ,cancel := context .WithTimeout (context .Background (),testutil .WaitLong )
2461
+ defer cancel ()
2462
+
2463
+ err := client .UpdateWorkspaceTTL (ctx ,workspace .ID , codersdk.UpdateWorkspaceTTLRequest {
2464
+ TTLMillis :testCase .toTTL ,
2465
+ })
2466
+ require .NoError (t ,err )
2467
+
2468
+ deadlineBefore := build .Deadline
2469
+
2470
+ build ,err = client .WorkspaceBuild (ctx ,build .ID )
2471
+ require .NoError (t ,err )
2472
+
2473
+ deadlineAfter := build .Deadline
2474
+
2475
+ testCase .afterUpdate (t ,deadlineBefore ,deadlineAfter )
2476
+ })
2477
+ }
2478
+ })
2479
+
2397
2480
t .Run ("CustomAutostopDisabledByTemplate" ,func (t * testing.T ) {
2398
2481
t .Parallel ()
2399
2482
var (