3
0

Fix/improve DAL integration tests

This commit is contained in:
Tomaž Jerman
2022-07-18 18:46:25 +02:00
parent 1d5232fc75
commit 149d75578a
26 changed files with 121 additions and 181 deletions

View File

@@ -145,22 +145,6 @@ func (svc *dalConnection) Update(ctx context.Context, upd *types.DalConnection)
return fmt.Errorf("can not update connection parameters for primary connection")
}
if old.Handle != upd.Handle {
return fmt.Errorf("can not update handle for primary connection")
}
if old.Config.DefaultModelIdent != upd.Config.DefaultModelIdent {
return fmt.Errorf("can not update defaultModelIdent for primary connection")
}
if old.Config.DefaultAttributeIdent != upd.Config.DefaultAttributeIdent {
return fmt.Errorf("can not update defaultAttributeIdent for primary connection")
}
if old.Handle != upd.Handle {
return fmt.Errorf("can not update handle for primary connection")
}
if old.Type != upd.Type {
return fmt.Errorf("can not update type for primary connection")
}
@@ -245,7 +229,8 @@ func (svc *dalConnection) UndeleteByID(ctx context.Context, ID uint64) (err erro
}
// We're creating it here since it was removed on delete
return dalConnectionRemove(ctx, svc.dal, c)
// primary connection can't be deleted we're just using nil here.
return dalConnectionReplace(ctx, nil, svc.dal, c)
}()
return svc.recordAction(ctx, cProps, DalConnectionActionDelete, err)

View File

@@ -44,8 +44,8 @@ func Test_dal_codec_alias(t *testing.T) {
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "intr_vDate", Value: "2022-01-01"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "intr_vNumber", Value: "2423423"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "intr_vText", Value: "lorm ipsum "})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "intr_vBoolean_T", Value: "true"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "intr_vBoolean_F", Value: "false"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "intr_vBoolean_T", Value: "1"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "intr_vBoolean_F", Value: ""})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "intr_vEnum", Value: "abc"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "intr_vGeometry", Value: `{"lat":1,"lng":1}`})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "intr_vJSON", Value: `[{"bool":true"}]`})
@@ -53,7 +53,7 @@ func Test_dal_codec_alias(t *testing.T) {
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "intr_vUUID", Value: "ba485865-54f9-44de-bde8-6965556c022a"})
bootstrap(t, func(ctx context.Context, t *testing.T, h helper, svc dalService) {
h.a.NoError(svc.CreateModel(ctx, model))
h.a.NoError(svc.ReplaceModel(ctx, model))
h.a.NoError(svc.Create(ctx, model.ToFilter(), capabilities.CreateCapabilities(model.Capabilities...), &rIn))
h.a.NoError(svc.Lookup(ctx, model.ToFilter(), capabilities.LookupCapabilities(model.Capabilities...), dal.PKValues{"id": rIn.ID}, &rOut))

View File

@@ -44,8 +44,8 @@ func Test_dal_codec_json(t *testing.T) {
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vDate", Value: "2022-01-01"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vNumber", Value: "2423423"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vText", Value: "lorm ipsum "})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vBoolean_T", Value: "true"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vBoolean_F", Value: "false"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vBoolean_T", Value: "1"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vBoolean_F", Value: ""})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vEnum", Value: "abc"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vGeometry", Value: `{"lat":1,"lng":1}`})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vJSON", Value: `[{"bool":true"}]`})
@@ -53,7 +53,7 @@ func Test_dal_codec_json(t *testing.T) {
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vUUID", Value: "ba485865-54f9-44de-bde8-6965556c022a"})
bootstrap(t, func(ctx context.Context, t *testing.T, h helper, svc dalService) {
h.a.NoError(svc.CreateModel(ctx, model))
h.a.NoError(svc.ReplaceModel(ctx, model))
h.a.NoError(svc.Create(ctx, model.ToFilter(), capabilities.CreateCapabilities(model.Capabilities...), &rIn))
h.a.NoError(svc.Lookup(ctx, model.ToFilter(), capabilities.LookupCapabilities(model.Capabilities...), dal.PKValues{"id": rIn.ID}, &rOut))

View File

@@ -44,8 +44,8 @@ func Test_dal_codec_plain(t *testing.T) {
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vDate", Value: "2022-01-01"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vNumber", Value: "2423423"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vText", Value: "lorm ipsum "})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vBoolean_T", Value: "true"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vBoolean_F", Value: "false"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vBoolean_T", Value: "1"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vBoolean_F", Value: ""})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vEnum", Value: "abc"})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vGeometry", Value: `{"lat":1,"lng":1}`})
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vJSON", Value: `[{"bool":true"}]`})
@@ -53,7 +53,7 @@ func Test_dal_codec_plain(t *testing.T) {
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vUUID", Value: "ba485865-54f9-44de-bde8-6965556c022a"})
bootstrap(t, func(ctx context.Context, t *testing.T, h helper, svc dalService) {
h.a.NoError(svc.CreateModel(ctx, model))
h.a.NoError(svc.ReplaceModel(ctx, model))
h.a.NoError(svc.Create(ctx, model.ToFilter(), capabilities.CreateCapabilities(model.Capabilities...), &rIn))
h.a.NoError(svc.Lookup(ctx, model.ToFilter(), capabilities.LookupCapabilities(model.Capabilities...), dal.PKValues{"id": rIn.ID}, &rOut))
@@ -108,7 +108,7 @@ func benchmark_dal_codec_plain(b *testing.B, count int) {
rIn.Values = rIn.Values.Set(&types.RecordValue{Name: "vUUID", Value: "ba485865-54f9-44de-bde8-6965556c022a"})
bootstrapBenchmark(b, func(ctx context.Context, b *testing.B, h helper, svc dalService) {
h.a.NoError(svc.CreateModel(ctx, model))
h.a.NoError(svc.ReplaceModel(ctx, model))
ctr := uint64(1)
for rep := 0; rep < b.N; rep++ {

View File

@@ -18,15 +18,8 @@ func Test_dal_crud_compose_record_create(t *testing.T) {
ctx := h.secCtx()
helpers.AllowMe(h, types.NamespaceRbacResource(0), "module.create")
helpers.AllowMe(h, types.NamespaceRbacResource(0), "modules.search")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "read")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "update")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "delete")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "record.create")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "records.search")
helpers.AllowMe(h, types.ModuleFieldRbacResource(0, 0, 0), "record.value.update")
helpers.AllowMe(h, types.ModuleFieldRbacResource(0, 0, 0), "record.value.read")
helpers.AllowMeModuleCRUD(h)
helpers.AllowMeRecordCRUD(h)
ns := h.createNamespace("test")
module := createModuleFromGenerics(ctx, t, "ok_module.json", ns.ID, &types.ModelConfig{
@@ -84,16 +77,8 @@ func Test_dal_crud_compose_record_update(t *testing.T) {
ctx := h.secCtx()
helpers.AllowMe(h, types.NamespaceRbacResource(0), "module.create")
helpers.AllowMe(h, types.NamespaceRbacResource(0), "modules.search")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "read")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "update")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "delete")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "record.create")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "records.search")
helpers.AllowMe(h, types.ModuleFieldRbacResource(0, 0, 0), "record.value.update")
helpers.AllowMe(h, types.ModuleFieldRbacResource(0, 0, 0), "record.value.read")
helpers.AllowMe(h, types.RecordRbacResource(0, 0, 0), "update")
helpers.AllowMeModuleCRUD(h)
helpers.AllowMeRecordCRUD(h)
ns := h.createNamespace("test")
module := createModuleFromGenerics(ctx, t, "ok_module.json", ns.ID, &types.ModelConfig{
@@ -151,17 +136,8 @@ func Test_dal_crud_compose_record_delete(t *testing.T) {
ctx := h.secCtx()
helpers.AllowMe(h, types.NamespaceRbacResource(0), "module.create")
helpers.AllowMe(h, types.NamespaceRbacResource(0), "modules.search")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "read")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "update")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "delete")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "record.create")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "records.search")
helpers.AllowMe(h, types.ModuleFieldRbacResource(0, 0, 0), "record.value.update")
helpers.AllowMe(h, types.ModuleFieldRbacResource(0, 0, 0), "record.value.read")
helpers.AllowMe(h, types.RecordRbacResource(0, 0, 0), "delete")
helpers.AllowMe(h, types.RecordRbacResource(0, 0, 0), "read")
helpers.AllowMeModuleCRUD(h)
helpers.AllowMeRecordCRUD(h)
ns := h.createNamespace("test")
module := createModuleFromGenerics(ctx, t, "ok_module.json", ns.ID, &types.ModelConfig{

View File

@@ -14,8 +14,7 @@ func Test_dal_crud_connection_list(t *testing.T) {
h := newHelperT(t)
defer h.cleanupDal()
helpers.AllowMe(h, types.ComponentRbacResource(), "dal-connections.search")
helpers.AllowMe(h, types.DalConnectionRbacResource(0), "read")
helpers.AllowMeDalConnectionSearch(h)
h.apiInit().
Get("/system/dal/connections/").
@@ -87,7 +86,7 @@ func Test_dal_crud_connection_create_invalid_type(t *testing.T) {
Header("Content-Type", "application/json").
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertErrorP("corteza::system:primary_dal_connection")).
Assert(helpers.AssertErrorP("corteza::system:primary-dal-connection")).
End()
}

View File

@@ -6,8 +6,6 @@ import (
"net/http"
"testing"
"github.com/cortezaproject/corteza-server/compose/types"
systemTypes "github.com/cortezaproject/corteza-server/system/types"
"github.com/cortezaproject/corteza-server/tests/helpers"
jsonpath "github.com/steinfletcher/apitest-jsonpath"
)
@@ -16,14 +14,8 @@ func Test_dal_crud_issues_compose_module_missing_sensitivity(t *testing.T) {
h := newHelperT(t)
defer h.cleanupDal()
helpers.AllowMe(h, types.NamespaceRbacResource(0), "module.create")
helpers.AllowMe(h, types.NamespaceRbacResource(0), "modules.search")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "read")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "update")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "delete")
helpers.AllowMeModuleCRUD(h)
ns := h.createNamespace("test")
aux := &composeModuleRestRsp{}
rsp := h.apiInit().
@@ -79,14 +71,8 @@ func Test_dal_crud_issues_compose_module_field_missing_sensitivity(t *testing.T)
h := newHelperT(t)
defer h.cleanupDal()
helpers.AllowMe(h, types.NamespaceRbacResource(0), "module.create")
helpers.AllowMe(h, types.NamespaceRbacResource(0), "modules.search")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "read")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "update")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "delete")
helpers.AllowMeModuleCRUD(h)
ns := h.createNamespace("test")
aux := &composeModuleRestRsp{}
rsp := h.apiInit().
@@ -141,17 +127,8 @@ func Test_dal_crud_issues_compose_module_nok_connection(t *testing.T) {
h := newHelperT(t)
defer h.cleanupDal()
helpers.AllowMe(h, types.NamespaceRbacResource(0), "module.create")
helpers.AllowMe(h, types.NamespaceRbacResource(0), "modules.search")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "read")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "update")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "delete")
helpers.AllowMe(h, systemTypes.ComponentRbacResource(), "dal-connection.create")
helpers.AllowMe(h, systemTypes.ComponentRbacResource(), "dal-connections.search")
helpers.AllowMe(h, systemTypes.DalConnectionRbacResource(0), "read")
helpers.AllowMe(h, systemTypes.DalConnectionRbacResource(0), "update")
helpers.AllowMe(h, systemTypes.DalConnectionRbacResource(0), "delete")
helpers.AllowMeModuleCRUD(h)
helpers.AllowMeDalConnectionCRUD(h)
ns := h.createNamespace("test")
conn := createConnectionFromGenerics(h.secCtx(), t, "nok_connection_connectivity.json")

View File

@@ -7,7 +7,6 @@ import (
"github.com/cortezaproject/corteza-server/compose/types"
"github.com/cortezaproject/corteza-server/pkg/dal/capabilities"
systemTypes "github.com/cortezaproject/corteza-server/system/types"
"github.com/cortezaproject/corteza-server/tests/helpers"
)
@@ -15,20 +14,9 @@ func Test_dal_crud_issues_compose_record_nok_connection(t *testing.T) {
h := newHelperT(t)
defer h.cleanupDal()
helpers.AllowMe(h, systemTypes.ComponentRbacResource(), "dal-connection.create")
helpers.AllowMe(h, systemTypes.ComponentRbacResource(), "dal-connections.search")
helpers.AllowMe(h, systemTypes.DalConnectionRbacResource(0), "read")
helpers.AllowMe(h, systemTypes.DalConnectionRbacResource(0), "update")
helpers.AllowMe(h, systemTypes.DalConnectionRbacResource(0), "delete")
helpers.AllowMe(h, types.NamespaceRbacResource(0), "module.create")
helpers.AllowMe(h, types.NamespaceRbacResource(0), "modules.search")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "read")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "update")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "delete")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "record.create")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "records.search")
helpers.AllowMe(h, types.ModuleFieldRbacResource(0, 0, 0), "record.value.update")
helpers.AllowMe(h, types.ModuleFieldRbacResource(0, 0, 0), "record.value.read")
helpers.AllowMeDalConnectionCRUD(h)
helpers.AllowMeModuleCRUD(h)
helpers.AllowMeRecordCRUD(h)
ns := h.createNamespace("test")
@@ -53,20 +41,9 @@ func Test_dal_crud_issues_compose_record_nok_model(t *testing.T) {
h := newHelperT(t)
defer h.cleanupDal()
helpers.AllowMe(h, systemTypes.ComponentRbacResource(), "dal-connection.create")
helpers.AllowMe(h, systemTypes.ComponentRbacResource(), "dal-connections.search")
helpers.AllowMe(h, systemTypes.DalConnectionRbacResource(0), "read")
helpers.AllowMe(h, systemTypes.DalConnectionRbacResource(0), "update")
helpers.AllowMe(h, systemTypes.DalConnectionRbacResource(0), "delete")
helpers.AllowMe(h, types.NamespaceRbacResource(0), "module.create")
helpers.AllowMe(h, types.NamespaceRbacResource(0), "modules.search")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "read")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "update")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "delete")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "record.create")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "records.search")
helpers.AllowMe(h, types.ModuleFieldRbacResource(0, 0, 0), "record.value.update")
helpers.AllowMe(h, types.ModuleFieldRbacResource(0, 0, 0), "record.value.read")
helpers.AllowMeDalConnectionCRUD(h)
helpers.AllowMeModuleCRUD(h)
helpers.AllowMeRecordCRUD(h)
ns := h.createNamespace("test")
@@ -91,20 +68,9 @@ func Test_dal_crud_issues_compose_record_ok(t *testing.T) {
h := newHelperT(t)
defer h.cleanupDal()
helpers.AllowMe(h, systemTypes.ComponentRbacResource(), "dal-connection.create")
helpers.AllowMe(h, systemTypes.ComponentRbacResource(), "dal-connections.search")
helpers.AllowMe(h, systemTypes.DalConnectionRbacResource(0), "read")
helpers.AllowMe(h, systemTypes.DalConnectionRbacResource(0), "update")
helpers.AllowMe(h, systemTypes.DalConnectionRbacResource(0), "delete")
helpers.AllowMe(h, types.NamespaceRbacResource(0), "module.create")
helpers.AllowMe(h, types.NamespaceRbacResource(0), "modules.search")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "read")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "update")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "delete")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "record.create")
helpers.AllowMe(h, types.ModuleRbacResource(0, 0), "records.search")
helpers.AllowMe(h, types.ModuleFieldRbacResource(0, 0, 0), "record.value.update")
helpers.AllowMe(h, types.ModuleFieldRbacResource(0, 0, 0), "record.value.read")
helpers.AllowMeDalConnectionCRUD(h)
helpers.AllowMeModuleCRUD(h)
helpers.AllowMeRecordCRUD(h)
ns := h.createNamespace("test")

View File

@@ -6,7 +6,6 @@ import (
"net/http"
"testing"
"github.com/cortezaproject/corteza-server/system/types"
"github.com/cortezaproject/corteza-server/tests/helpers"
jsonpath "github.com/steinfletcher/apitest-jsonpath"
)
@@ -15,11 +14,7 @@ func Test_dal_crud_issues_connection_connectivity(t *testing.T) {
h := newHelperT(t)
defer h.cleanupDal()
helpers.AllowMe(h, types.ComponentRbacResource(), "dal-connection.create")
helpers.AllowMe(h, types.ComponentRbacResource(), "dal-connections.search")
helpers.AllowMe(h, types.DalConnectionRbacResource(0), "read")
helpers.AllowMe(h, types.DalConnectionRbacResource(0), "update")
helpers.AllowMe(h, types.DalConnectionRbacResource(0), "delete")
helpers.AllowMeDalConnectionCRUD(h)
aux := &dalConnectionRestRsp{}
@@ -76,11 +71,7 @@ func Test_dal_crud_issues_connection_sensitivity(t *testing.T) {
h := newHelperT(t)
defer h.cleanupDal()
helpers.AllowMe(h, types.ComponentRbacResource(), "dal-connection.create")
helpers.AllowMe(h, types.ComponentRbacResource(), "dal-connections.search")
helpers.AllowMe(h, types.DalConnectionRbacResource(0), "read")
helpers.AllowMe(h, types.DalConnectionRbacResource(0), "update")
helpers.AllowMe(h, types.DalConnectionRbacResource(0), "delete")
helpers.AllowMeDalConnectionCRUD(h)
aux := &dalConnectionRestRsp{}

View File

@@ -1 +0,0 @@
package dal

View File

@@ -30,29 +30,27 @@ type (
dalService interface {
Drivers() (drivers []dal.Driver)
ReloadSensitivityLevels(levels ...dal.SensitivityLevel) (err error)
CreateSensitivityLevel(levels ...dal.SensitivityLevel) (err error)
UpdateSensitivityLevel(levels ...dal.SensitivityLevel) (err error)
DeleteSensitivityLevel(levels ...dal.SensitivityLevel) (err error)
CreateConnection(ctx context.Context, connectionID uint64, cp dal.ConnectionParams, cm dal.ConnectionMeta, capabilities ...capabilities.Capability) (err error)
DeleteConnection(ctx context.Context, connectionID uint64) (err error)
UpdateConnection(ctx context.Context, connectionID uint64, cp dal.ConnectionParams, cm dal.ConnectionMeta, capabilities ...capabilities.Capability) (err error)
ReplaceSensitivityLevel(levels ...dal.SensitivityLevel) (err error)
RemoveSensitivityLevel(levelIDs ...uint64) (err error)
ReplaceConnection(ctx context.Context, cw *dal.ConnectionWrap, isDefault bool) (err error)
RemoveConnection(ctx context.Context, ID uint64) (err error)
SearchModels(ctx context.Context) (out dal.ModelSet, err error)
ReplaceModel(ctx context.Context, model *dal.Model) (err error)
RemoveModel(ctx context.Context, connectionID, ID uint64) (err error)
ReplaceModelAttribute(ctx context.Context, model *dal.Model, old, new *dal.Attribute, trans ...dal.TransformationFunction) (err error)
FindModelByResourceID(connectionID uint64, resourceID uint64) *dal.Model
FindModelByResourceIdent(connectionID uint64, resourceType, resourceIdent string) *dal.Model
FindModelByIdent(connectionID uint64, ident string) *dal.Model
Create(ctx context.Context, mf dal.ModelFilter, capabilities capabilities.Set, rr ...dal.ValueGetter) (err error)
Update(ctx context.Context, mf dal.ModelFilter, capabilities capabilities.Set, rr ...dal.ValueGetter) (err error)
Search(ctx context.Context, mf dal.ModelFilter, capabilities capabilities.Set, f filter.Filter) (iter dal.Iterator, err error)
Lookup(ctx context.Context, mf dal.ModelFilter, capabilities capabilities.Set, lookup dal.ValueGetter, dst dal.ValueSetter) (err error)
Delete(ctx context.Context, mf dal.ModelFilter, capabilities capabilities.Set, vv ...dal.ValueGetter) (err error)
Truncate(ctx context.Context, mf dal.ModelFilter, capabilities capabilities.Set) (err error)
ReloadModel(ctx context.Context, models ...*dal.Model) (err error)
SearchModels(ctx context.Context) (out dal.ModelSet, err error)
CreateModel(ctx context.Context, models ...*dal.Model) (err error)
DeleteModel(ctx context.Context, models ...*dal.Model) (err error)
UpdateModel(ctx context.Context, old, new *dal.Model) (err error)
UpdateModelAttribute(ctx context.Context, model *dal.Model, old, new *dal.Attribute, trans ...dal.TransformationFunction) (err error)
ModelIdentFormatter(connectionID uint64) (f *dal.IdentFormatter, err error)
FindModelByResourceID(connectionID uint64, resourceID uint64) *dal.Model
FindModelByResourceIdent(connectionID uint64, resourceType, resourceIdent string) *dal.Model
FindModelByIdent(connectionID uint64, ident string) *dal.Model
SearchConnectionIssues(connectionID uint64) (out []error)
SearchModelIssues(connectionID, resourceID uint64) (out []error)
@@ -131,6 +129,7 @@ func (h helper) cleanupDal() {
}
h.a.NoError(store.DeleteDalConnectionByID(ctx, ds, c.ID))
}
dd.Purge(ctx)
h.a.NoError(service.DefaultDalConnection.ReloadConnections(ctx))
h.a.NoError(composeService.DefaultModule.ReloadDALModels(ctx))
@@ -147,15 +146,15 @@ func initSvc(ctx context.Context, d driver) (dalService, error) {
Label: c.Handle,
}
svc, err := dal.New(
ctx,
zap.NewNop(),
false,
c.ID,
c.Config.Connection,
cm,
capabilities.FullCapabilities()...,
)
svc, err := dal.New(zap.NewNop(), false)
if err != nil {
return nil, err
}
err = svc.ReplaceConnection(ctx, dal.MakeConnection(c.ID, nil, c.Config.Connection, cm, capabilities.FullCapabilities()...), true)
if err != nil {
return nil, err
}
return svc, err
}
@@ -233,7 +232,7 @@ func bootstrapWithModel(rootTest *testing.T, ident string, run func(context.Cont
driver.setup(ctx, rootTest, driver.dsn)
require.NoError(t, svc.CreateModel(ctx, model))
require.NoError(t, svc.ReplaceModel(ctx, model))
run(ctx, t, h, svc, model)
})

View File

@@ -138,6 +138,7 @@ func (h helper) createSensitivityLevel(res *types.DalSensitivityLevel) *types.Da
}
h.a.NoError(service.DefaultStore.CreateDalSensitivityLevel(context.Background(), res))
h.a.NoError(service.DefaultDalSensitivityLevel.ReloadSensitivityLevels(context.Background(), service.DefaultStore))
return res
}

View File

@@ -75,6 +75,10 @@ func InitTestApp() {
return nil
})
if err := testApp.Activate(ctx); err != nil {
panic(fmt.Errorf("could not activate corteza: %v", err))
}
}
hh = &handlers.AuthHandlers{

View File

@@ -1,7 +1,7 @@
{
"name": "Primary Connection EDITED",
"handle": "primary_connection",
"type": "corteza::system:primary_dal_connection",
"type": "corteza::system:primary-dal-connection",
"location": {
"geometry": {
"type": "",

View File

@@ -1,7 +1,7 @@
{
"name": "Test Connection",
"handle": "test_connection",
"type": "corteza::system:dal_connection",
"type": "corteza::system:dal-connection",
"location": {
"geometry": {
"type": "",

View File

@@ -1,7 +1,7 @@
{
"name": "Test Connection",
"handle": "test_connection",
"type": "corteza::system:primary_dal_connection",
"type": "corteza::system:primary-dal-connection",
"location": {
"geometry": {
"type": "",

View File

@@ -1,7 +1,7 @@
{
"name": "Test Connection",
"handle": "test_connection",
"type": "corteza::system:dal_connection",
"type": "corteza::system:dal-connection",
"location": {
"geometry": {
"type": "",

View File

@@ -1,7 +1,7 @@
{
"name": "Test Connection",
"handle": "test_connection",
"type": "corteza::system:dal_connection",
"type": "corteza::system:dal-connection",
"location": {
"geometry": {
"type": "",

View File

@@ -1,7 +1,7 @@
{
"name": "Test Connection EDITED",
"handle": "test_connection_edited",
"type": "corteza::system:dal_connection",
"type": "corteza::system:dal-connection",
"location": {
"geometry": {
"type": "",

View File

@@ -3,6 +3,7 @@ package helpers
import (
"context"
composeTypes "github.com/cortezaproject/corteza-server/compose/types"
"github.com/cortezaproject/corteza-server/pkg/auth"
"github.com/cortezaproject/corteza-server/pkg/cli"
"github.com/cortezaproject/corteza-server/pkg/eventbus"
@@ -63,3 +64,45 @@ func Deny(role *types.Role, r string, oo ...string) {
func Grant(rr ...*rbac.Rule) {
cli.HandleError(rbac.Global().Grant(context.Background(), rr...))
}
// Common RBAC presets
func AllowMeModuleCreate(mrg myRoleGetter) {
AllowMe(mrg, composeTypes.NamespaceRbacResource(0), "module.create")
}
func AllowMeModuleSearch(mrg myRoleGetter) {
AllowMe(mrg, composeTypes.NamespaceRbacResource(0), "modules.search")
AllowMe(mrg, composeTypes.ModuleRbacResource(0, 0), "read")
}
func AllowMeModuleCRUD(mrg myRoleGetter) {
AllowMe(mrg, composeTypes.NamespaceRbacResource(0), "module.create")
AllowMe(mrg, composeTypes.NamespaceRbacResource(0), "modules.search")
AllowMe(mrg, composeTypes.ModuleRbacResource(0, 0), "read")
AllowMe(mrg, composeTypes.ModuleRbacResource(0, 0), "update")
AllowMe(mrg, composeTypes.ModuleRbacResource(0, 0), "delete")
}
func AllowMeRecordCRUD(mrg myRoleGetter) {
AllowMe(mrg, composeTypes.ModuleRbacResource(0, 0), "record.create")
AllowMe(mrg, composeTypes.ModuleRbacResource(0, 0), "records.search")
AllowMe(mrg, composeTypes.RecordRbacResource(0, 0, 0), "read")
AllowMe(mrg, composeTypes.RecordRbacResource(0, 0, 0), "update")
AllowMe(mrg, composeTypes.RecordRbacResource(0, 0, 0), "delete")
AllowMe(mrg, composeTypes.ModuleFieldRbacResource(0, 0, 0), "record.value.update")
AllowMe(mrg, composeTypes.ModuleFieldRbacResource(0, 0, 0), "record.value.read")
}
func AllowMeDalConnectionSearch(mrg myRoleGetter) {
AllowMe(mrg, types.ComponentRbacResource(), "dal-connections.search")
AllowMe(mrg, types.DalConnectionRbacResource(0), "read")
}
func AllowMeDalConnectionCRUD(mrg myRoleGetter) {
AllowMe(mrg, types.ComponentRbacResource(), "dal-connection.create")
AllowMe(mrg, types.ComponentRbacResource(), "dal-connections.search")
AllowMe(mrg, types.DalConnectionRbacResource(0), "read")
AllowMe(mrg, types.DalConnectionRbacResource(0), "update")
AllowMe(mrg, types.DalConnectionRbacResource(0), "delete")
}

View File

@@ -1,7 +1,7 @@
{
"name": "Test Connection",
"handle": "test_connection",
"type": "corteza::system:dal_connection",
"type": "corteza::system:dal-connection",
"location": {
"geometry": {
"type": "",

View File

@@ -1,7 +1,7 @@
{
"name": "Test Connection",
"handle": "test_connection",
"type": "corteza::system:dal_connection",
"type": "corteza::system:dal-connection",
"location": {
"geometry": {
"type": "",

View File

@@ -1,7 +1,7 @@
{
"name": "Test Connection",
"handle": "test_connection",
"type": "corteza::system:primary_dal_connection",
"type": "corteza::system:primary-dal-connection",
"location": {
"geometry": {
"type": "",

View File

@@ -1,7 +1,7 @@
{
"name": "Test Connection EDITED",
"handle": "test_connection_edited",
"type": "corteza::system:dal_connection",
"type": "corteza::system:dal-connection",
"location": {
"geometry": {
"type": "",

View File

@@ -1,7 +1,7 @@
{
"name": "Test Connection EDITED",
"handle": "test_connection_edited",
"type": "corteza::system:dal_connection",
"type": "corteza::system:dal-connection",
"location": {
"geometry": {
"type": "",

View File

@@ -1,7 +1,7 @@
{
"name": "Primary Connection EDITED",
"handle": "primary_connection",
"type": "corteza::system:primary_dal_connection",
"type": "corteza::system:primary-dal-connection",
"location": {
"geometry": {
"type": "",