mirror of
https://github.com/coder/coder.git
synced 2025-07-03 16:13:58 +00:00
* Feature server implementation Signed-off-by: Spike Curtis <spike@coder.com> * Fix imports Signed-off-by: Spike Curtis <spike@coder.com> Signed-off-by: Spike Curtis <spike@coder.com>
101 lines
2.2 KiB
Go
101 lines
2.2 KiB
Go
package coderd
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/coder/coder/coderd/audit"
|
|
"github.com/coder/coder/codersdk"
|
|
)
|
|
|
|
func TestEntitlements(t *testing.T) {
|
|
t.Parallel()
|
|
t.Run("GET", func(t *testing.T) {
|
|
t.Parallel()
|
|
r := httptest.NewRequest("GET", "https://example.com/api/v2/entitlements", nil)
|
|
rw := httptest.NewRecorder()
|
|
featuresService{}.EntitlementsAPI(rw, r)
|
|
resp := rw.Result()
|
|
defer resp.Body.Close()
|
|
assert.Equal(t, http.StatusOK, resp.StatusCode)
|
|
dec := json.NewDecoder(resp.Body)
|
|
var result codersdk.Entitlements
|
|
err := dec.Decode(&result)
|
|
require.NoError(t, err)
|
|
assert.False(t, result.HasLicense)
|
|
assert.Empty(t, result.Warnings)
|
|
for _, f := range codersdk.FeatureNames {
|
|
require.Contains(t, result.Features, f)
|
|
fe := result.Features[f]
|
|
assert.False(t, fe.Enabled)
|
|
assert.Equal(t, codersdk.EntitlementNotEntitled, fe.Entitlement)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestFeaturesServiceGet(t *testing.T) {
|
|
t.Parallel()
|
|
t.Run("Auditor", func(t *testing.T) {
|
|
t.Parallel()
|
|
uut := featuresService{}
|
|
target := struct {
|
|
Auditor audit.Auditor
|
|
}{}
|
|
err := uut.Get(&target)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, target.Auditor)
|
|
})
|
|
|
|
t.Run("NotPointer", func(t *testing.T) {
|
|
t.Parallel()
|
|
uut := featuresService{}
|
|
target := struct {
|
|
Auditor audit.Auditor
|
|
}{}
|
|
err := uut.Get(target)
|
|
require.Error(t, err)
|
|
assert.Nil(t, target.Auditor)
|
|
})
|
|
|
|
t.Run("UnknownInterface", func(t *testing.T) {
|
|
t.Parallel()
|
|
uut := featuresService{}
|
|
target := struct {
|
|
test testInterface
|
|
}{}
|
|
err := uut.Get(&target)
|
|
require.Error(t, err)
|
|
assert.Nil(t, target.test)
|
|
})
|
|
|
|
t.Run("PointerToNonStruct", func(t *testing.T) {
|
|
t.Parallel()
|
|
uut := featuresService{}
|
|
var target audit.Auditor
|
|
err := uut.Get(&target)
|
|
require.Error(t, err)
|
|
assert.Nil(t, target)
|
|
})
|
|
|
|
t.Run("StructWithNonInterfaces", func(t *testing.T) {
|
|
t.Parallel()
|
|
uut := featuresService{}
|
|
target := struct {
|
|
N int64
|
|
Auditor audit.Auditor
|
|
}{}
|
|
err := uut.Get(&target)
|
|
require.Error(t, err)
|
|
assert.Nil(t, target.Auditor)
|
|
})
|
|
}
|
|
|
|
type testInterface interface {
|
|
Test() error
|
|
}
|