3
0
corteza/compose/service/chart_test.go
2021-01-25 18:05:24 +01:00

100 lines
2.4 KiB
Go

package service
import (
"context"
"testing"
"github.com/cortezaproject/corteza-server/compose/types"
"github.com/cortezaproject/corteza-server/pkg/errors"
"github.com/cortezaproject/corteza-server/pkg/rbac"
"github.com/cortezaproject/corteza-server/store"
"github.com/cortezaproject/corteza-server/store/sqlite3"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
)
func TestCharts(t *testing.T) {
var (
ctx = context.Background()
s, err = sqlite3.ConnectInMemory(ctx)
namespaceID = nextID()
ns *types.Namespace
)
if err != nil {
t.Fatalf("failed to init sqlite in-memory db: %v", err)
}
if err = store.Upgrade(ctx, zap.NewNop(), s); err != nil {
t.Fatalf("failed to upgrade store: %v", err)
}
if err = s.TruncateComposeNamespaces(ctx); err != nil {
t.Fatalf("failed to truncate compose namespaces: %v", err)
}
if err = s.TruncateComposeCharts(ctx); err != nil {
t.Fatalf("failed to truncate compose charts: %v", err)
}
ns = &types.Namespace{Name: "testing", ID: namespaceID, CreatedAt: *now()}
if err = store.CreateComposeNamespace(ctx, s, ns); err != nil {
t.Fatalf("failed to seed namespaces: %v", err)
}
t.Run("crud", func(t *testing.T) {
req := require.New(t)
svc := chart{
store: s,
ac: AccessControl(&rbac.ServiceAllowAll{}),
}
res, err := svc.Create(ctx, &types.Chart{Name: "My first chart", NamespaceID: namespaceID})
req.NoError(unwrapChartInternal(err))
req.NotNil(res)
res, err = svc.FindByID(ctx, namespaceID, res.ID)
req.NoError(unwrapChartInternal(err))
req.NotNil(res)
res, err = svc.FindByHandle(ctx, namespaceID, res.Handle)
req.NoError(unwrapChartInternal(err))
req.NotNil(res)
res.Name = "Changed"
res, err = svc.Update(ctx, res)
req.NoError(unwrapChartInternal(err))
req.NotNil(res)
req.NotNil(res.UpdatedAt)
req.Equal(res.Name, "Changed")
res, err = svc.FindByID(ctx, namespaceID, res.ID)
req.NoError(unwrapChartInternal(err))
req.NotNil(res)
req.Equal(res.Name, "Changed")
err = svc.DeleteByID(ctx, namespaceID, res.ID)
req.NoError(unwrapChartInternal(err))
req.NotNil(res)
// this works because we're allowed to do everything
res, err = svc.FindByID(ctx, namespaceID, res.ID)
req.NoError(unwrapChartInternal(err))
req.NotNil(res)
req.NotNil(res.DeletedAt)
})
}
func unwrapChartInternal(err error) error {
g := ChartErrGeneric()
for {
if errors.Is(err, g) {
err = errors.Unwrap(err)
continue
}
return err
}
}