9
9
"github.com/google/uuid"
10
10
"github.com/stretchr/testify/assert"
11
11
"github.com/stretchr/testify/require"
12
+ "golang.org/x/exp/slices"
12
13
13
14
"cdr.dev/slog"
14
15
"github.com/coder/coder/v2/coderd/database"
@@ -357,6 +358,90 @@ func TestEntitlements(t *testing.T) {
357
358
require .False (t , entitlements .Trial )
358
359
})
359
360
361
+ t .Run ("Enterprise" , func (t * testing.T ) {
362
+ t .Parallel ()
363
+ db := dbmem .New ()
364
+ _ , err := db .InsertLicense (context .Background (), database.InsertLicenseParams {
365
+ Exp : time .Now ().Add (time .Hour ),
366
+ JWT : coderdenttest .GenerateLicense (t , coderdenttest.LicenseOptions {
367
+ FeatureSet : codersdk .FeatureSetEnterprise ,
368
+ }),
369
+ })
370
+ require .NoError (t , err )
371
+ entitlements , err := license .Entitlements (context .Background (), db , slog.Logger {}, 1 , 1 , coderdenttest .Keys , all )
372
+ require .NoError (t , err )
373
+ require .True (t , entitlements .HasLicense )
374
+ require .False (t , entitlements .Trial )
375
+
376
+ // All enterprise features should be entitled
377
+ enterpriseFeatures := codersdk .FeatureSetEnterprise .Features ()
378
+ for _ , featureName := range codersdk .FeatureNames {
379
+ if featureName == codersdk .FeatureUserLimit {
380
+ continue
381
+ }
382
+ if slices .Contains (enterpriseFeatures , featureName ) {
383
+ require .True (t , entitlements .Features [featureName ].Enabled , featureName )
384
+ require .Equal (t , codersdk .EntitlementEntitled , entitlements .Features [featureName ].Entitlement )
385
+ } else {
386
+ require .False (t , entitlements .Features [featureName ].Enabled , featureName )
387
+ require .Equal (t , codersdk .EntitlementNotEntitled , entitlements .Features [featureName ].Entitlement )
388
+ }
389
+ }
390
+ })
391
+
392
+ t .Run ("Premium" , func (t * testing.T ) {
393
+ t .Parallel ()
394
+ db := dbmem .New ()
395
+ _ , err := db .InsertLicense (context .Background (), database.InsertLicenseParams {
396
+ Exp : time .Now ().Add (time .Hour ),
397
+ JWT : coderdenttest .GenerateLicense (t , coderdenttest.LicenseOptions {
398
+ FeatureSet : codersdk .FeatureSetPremium ,
399
+ }),
400
+ })
401
+ require .NoError (t , err )
402
+ entitlements , err := license .Entitlements (context .Background (), db , slog.Logger {}, 1 , 1 , coderdenttest .Keys , all )
403
+ require .NoError (t , err )
404
+ require .True (t , entitlements .HasLicense )
405
+ require .False (t , entitlements .Trial )
406
+
407
+ // All premium features should be entitled
408
+ enterpriseFeatures := codersdk .FeatureSetPremium .Features ()
409
+ for _ , featureName := range codersdk .FeatureNames {
410
+ if featureName == codersdk .FeatureUserLimit {
411
+ continue
412
+ }
413
+ if slices .Contains (enterpriseFeatures , featureName ) {
414
+ require .True (t , entitlements .Features [featureName ].Enabled , featureName )
415
+ require .Equal (t , codersdk .EntitlementEntitled , entitlements .Features [featureName ].Entitlement )
416
+ } else {
417
+ require .False (t , entitlements .Features [featureName ].Enabled , featureName )
418
+ require .Equal (t , codersdk .EntitlementNotEntitled , entitlements .Features [featureName ].Entitlement )
419
+ }
420
+ }
421
+ })
422
+
423
+ t .Run ("SetNone" , func (t * testing.T ) {
424
+ t .Parallel ()
425
+ db := dbmem .New ()
426
+ _ , err := db .InsertLicense (context .Background (), database.InsertLicenseParams {
427
+ Exp : time .Now ().Add (time .Hour ),
428
+ JWT : coderdenttest .GenerateLicense (t , coderdenttest.LicenseOptions {
429
+ FeatureSet : "" ,
430
+ }),
431
+ })
432
+ require .NoError (t , err )
433
+ entitlements , err := license .Entitlements (context .Background (), db , slog.Logger {}, 1 , 1 , coderdenttest .Keys , all )
434
+ require .NoError (t , err )
435
+ require .True (t , entitlements .HasLicense )
436
+ require .False (t , entitlements .Trial )
437
+
438
+ for _ , featureName := range codersdk .FeatureNames {
439
+ require .False (t , entitlements .Features [featureName ].Enabled , featureName )
440
+ require .Equal (t , codersdk .EntitlementNotEntitled , entitlements .Features [featureName ].Entitlement )
441
+ }
442
+ })
443
+
444
+ // AllFeatures uses the deprecated 'AllFeatures' boolean.
360
445
t .Run ("AllFeatures" , func (t * testing.T ) {
361
446
t .Parallel ()
362
447
db := dbmem .New ()
@@ -370,12 +455,20 @@ func TestEntitlements(t *testing.T) {
370
455
require .NoError (t , err )
371
456
require .True (t , entitlements .HasLicense )
372
457
require .False (t , entitlements .Trial )
458
+
459
+ // All enterprise features should be entitled
460
+ enterpriseFeatures := codersdk .FeatureSetEnterprise .Features ()
373
461
for _ , featureName := range codersdk .FeatureNames {
374
462
if featureName == codersdk .FeatureUserLimit {
375
463
continue
376
464
}
377
- require .True (t , entitlements .Features [featureName ].Enabled )
378
- require .Equal (t , codersdk .EntitlementEntitled , entitlements .Features [featureName ].Entitlement )
465
+ if slices .Contains (enterpriseFeatures , featureName ) {
466
+ require .True (t , entitlements .Features [featureName ].Enabled , featureName )
467
+ require .Equal (t , codersdk .EntitlementEntitled , entitlements .Features [featureName ].Entitlement )
468
+ } else {
469
+ require .False (t , entitlements .Features [featureName ].Enabled , featureName )
470
+ require .Equal (t , codersdk .EntitlementNotEntitled , entitlements .Features [featureName ].Entitlement )
471
+ }
379
472
}
380
473
})
381
474
@@ -392,13 +485,21 @@ func TestEntitlements(t *testing.T) {
392
485
require .NoError (t , err )
393
486
require .True (t , entitlements .HasLicense )
394
487
require .False (t , entitlements .Trial )
488
+ // All enterprise features should be entitled
489
+ enterpriseFeatures := codersdk .FeatureSetEnterprise .Features ()
395
490
for _ , featureName := range codersdk .FeatureNames {
396
491
if featureName == codersdk .FeatureUserLimit {
397
492
continue
398
493
}
494
+
399
495
feature := entitlements .Features [featureName ]
400
- require .Equal (t , featureName .AlwaysEnable (), feature .Enabled )
401
- require .Equal (t , codersdk .EntitlementEntitled , feature .Entitlement )
496
+ if slices .Contains (enterpriseFeatures , featureName ) {
497
+ require .Equal (t , featureName .AlwaysEnable (), feature .Enabled )
498
+ require .Equal (t , codersdk .EntitlementEntitled , feature .Entitlement )
499
+ } else {
500
+ require .False (t , entitlements .Features [featureName ].Enabled , featureName )
501
+ require .Equal (t , codersdk .EntitlementNotEntitled , entitlements .Features [featureName ].Entitlement )
502
+ }
402
503
}
403
504
})
404
505
@@ -417,12 +518,19 @@ func TestEntitlements(t *testing.T) {
417
518
require .NoError (t , err )
418
519
require .True (t , entitlements .HasLicense )
419
520
require .False (t , entitlements .Trial )
521
+ // All enterprise features should be entitled
522
+ enterpriseFeatures := codersdk .FeatureSetEnterprise .Features ()
420
523
for _ , featureName := range codersdk .FeatureNames {
421
524
if featureName == codersdk .FeatureUserLimit {
422
525
continue
423
526
}
424
- require .True (t , entitlements .Features [featureName ].Enabled )
425
- require .Equal (t , codersdk .EntitlementGracePeriod , entitlements .Features [featureName ].Entitlement )
527
+ if slices .Contains (enterpriseFeatures , featureName ) {
528
+ require .True (t , entitlements .Features [featureName ].Enabled , featureName )
529
+ require .Equal (t , codersdk .EntitlementGracePeriod , entitlements .Features [featureName ].Entitlement )
530
+ } else {
531
+ require .False (t , entitlements .Features [featureName ].Enabled , featureName )
532
+ require .Equal (t , codersdk .EntitlementNotEntitled , entitlements .Features [featureName ].Entitlement )
533
+ }
426
534
}
427
535
})
428
536
0 commit comments