Skip to content

Commit 73921aa

Browse files
committed
add more unit tests
1 parent ca9e67c commit 73921aa

File tree

1 file changed

+114
-6
lines changed

1 file changed

+114
-6
lines changed

enterprise/coderd/license/license_test.go

Lines changed: 114 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/google/uuid"
1010
"github.com/stretchr/testify/assert"
1111
"github.com/stretchr/testify/require"
12+
"golang.org/x/exp/slices"
1213

1314
"cdr.dev/slog"
1415
"github.com/coder/coder/v2/coderd/database"
@@ -357,6 +358,90 @@ func TestEntitlements(t *testing.T) {
357358
require.False(t, entitlements.Trial)
358359
})
359360

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.
360445
t.Run("AllFeatures", func(t *testing.T) {
361446
t.Parallel()
362447
db := dbmem.New()
@@ -370,12 +455,20 @@ func TestEntitlements(t *testing.T) {
370455
require.NoError(t, err)
371456
require.True(t, entitlements.HasLicense)
372457
require.False(t, entitlements.Trial)
458+
459+
// All enterprise features should be entitled
460+
enterpriseFeatures := codersdk.FeatureSetEnterprise.Features()
373461
for _, featureName := range codersdk.FeatureNames {
374462
if featureName == codersdk.FeatureUserLimit {
375463
continue
376464
}
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+
}
379472
}
380473
})
381474

@@ -392,13 +485,21 @@ func TestEntitlements(t *testing.T) {
392485
require.NoError(t, err)
393486
require.True(t, entitlements.HasLicense)
394487
require.False(t, entitlements.Trial)
488+
// All enterprise features should be entitled
489+
enterpriseFeatures := codersdk.FeatureSetEnterprise.Features()
395490
for _, featureName := range codersdk.FeatureNames {
396491
if featureName == codersdk.FeatureUserLimit {
397492
continue
398493
}
494+
399495
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+
}
402503
}
403504
})
404505

@@ -417,12 +518,19 @@ func TestEntitlements(t *testing.T) {
417518
require.NoError(t, err)
418519
require.True(t, entitlements.HasLicense)
419520
require.False(t, entitlements.Trial)
521+
// All enterprise features should be entitled
522+
enterpriseFeatures := codersdk.FeatureSetEnterprise.Features()
420523
for _, featureName := range codersdk.FeatureNames {
421524
if featureName == codersdk.FeatureUserLimit {
422525
continue
423526
}
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+
}
426534
}
427535
})
428536

0 commit comments

Comments
 (0)