TestPremiumSuperSet tests that the "premium" feature set is a superset of the "enterprise" feature set.
(t *testing.T)
| 1026 | // TestPremiumSuperSet tests that the "premium" feature set is a superset of the |
| 1027 | // "enterprise" feature set. |
| 1028 | func TestPremiumSuperSet(t *testing.T) { |
| 1029 | t.Parallel() |
| 1030 | |
| 1031 | enterprise := codersdk.FeatureSetEnterprise |
| 1032 | premium := codersdk.FeatureSetPremium |
| 1033 | |
| 1034 | // Premium > Enterprise |
| 1035 | require.Greater(t, len(premium.Features()), len(enterprise.Features()), "premium should have more features than enterprise") |
| 1036 | |
| 1037 | // Premium ⊃ Enterprise |
| 1038 | require.Subset(t, premium.Features(), enterprise.Features(), "premium should be a superset of enterprise. If this fails, update the premium feature set to include all enterprise features.") |
| 1039 | |
| 1040 | // Premium = All Features EXCEPT limit-based features. |
| 1041 | // TODO: In future release, also exclude addon features (f.IsAddonFeature()). |
| 1042 | expectedPremiumFeatures := []codersdk.FeatureName{} |
| 1043 | for _, feature := range codersdk.FeatureNames { |
| 1044 | if feature.UsesLimit() { |
| 1045 | continue |
| 1046 | } |
| 1047 | expectedPremiumFeatures = append(expectedPremiumFeatures, feature) |
| 1048 | } |
| 1049 | require.NotEmpty(t, expectedPremiumFeatures, "expectedPremiumFeatures should not be empty") |
| 1050 | require.ElementsMatch(t, premium.Features(), expectedPremiumFeatures, "premium should contain all features except usage limit features") |
| 1051 | |
| 1052 | // This check exists because if you misuse the slices.Delete, you can end up |
| 1053 | // with zero'd values. |
| 1054 | require.NotContains(t, enterprise.Features(), "", "enterprise should not contain empty string") |
| 1055 | require.NotContains(t, premium.Features(), "", "premium should not contain empty string") |
| 1056 | } |
| 1057 | |
| 1058 | func TestNotificationsCanBeDisabled(t *testing.T) { |
| 1059 | t.Parallel() |