snapshot of https://github.com/cortezaproject/corteza.git (2024.9.x, 2026-09-18; blobs > 131072B omitted)
Some checks failed
SonarQube / SonarQube (push) Failing after 5m28s
E2e test on main branch push / server and client test (map[name:admin port:8080]) (push) Failing after 3m33s
Server and lib tests / Library test (js) (push) Failing after 1m36s
Server and lib tests / Library test (vue) (push) Successful in 2m24s
Server and lib tests / Web client test (admin) (push) Successful in 2m52s
Server and lib tests / Web client test (compose) (push) Successful in 3m23s
Server and lib tests / Web client test (discovery) (push) Successful in 2m49s
Server and lib tests / Web client test (one) (push) Successful in 2m52s
Server and lib tests / Web client test (privacy) (push) Successful in 2m44s
Server and lib tests / Web client test (reporter) (push) Successful in 2m56s
Server and lib tests / Web client test (workflow) (push) Successful in 3m0s
Server and lib tests / Server tests (push) Failing after 4m55s
E2e test on main branch push / notify-failure (push) Failing after 9s
Server and lib tests / Send matrix testing notification (push) Successful in 2s
Mark stale issues and pull requests / stale (push) Successful in 40s
Some checks failed
SonarQube / SonarQube (push) Failing after 5m28s
E2e test on main branch push / server and client test (map[name:admin port:8080]) (push) Failing after 3m33s
Server and lib tests / Library test (js) (push) Failing after 1m36s
Server and lib tests / Library test (vue) (push) Successful in 2m24s
Server and lib tests / Web client test (admin) (push) Successful in 2m52s
Server and lib tests / Web client test (compose) (push) Successful in 3m23s
Server and lib tests / Web client test (discovery) (push) Successful in 2m49s
Server and lib tests / Web client test (one) (push) Successful in 2m52s
Server and lib tests / Web client test (privacy) (push) Successful in 2m44s
Server and lib tests / Web client test (reporter) (push) Successful in 2m56s
Server and lib tests / Web client test (workflow) (push) Successful in 3m0s
Server and lib tests / Server tests (push) Failing after 4m55s
E2e test on main branch push / notify-failure (push) Failing after 9s
Server and lib tests / Send matrix testing notification (push) Successful in 2s
Mark stale issues and pull requests / stale (push) Successful in 40s
This commit is contained in:
145
server/compose/service/page_test.go
Normal file
145
server/compose/service/page_test.go
Normal file
@@ -0,0 +1,145 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/cortezaproject/corteza/server/compose/types"
|
||||
"github.com/cortezaproject/corteza/server/pkg/eventbus"
|
||||
"github.com/cortezaproject/corteza/server/pkg/locale"
|
||||
"github.com/cortezaproject/corteza/server/pkg/logger"
|
||||
"github.com/cortezaproject/corteza/server/pkg/rbac"
|
||||
"github.com/cortezaproject/corteza/server/store"
|
||||
"github.com/cortezaproject/corteza/server/store/adapters/rdbms/drivers/sqlite"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestPageDeleting(t *testing.T) {
|
||||
var (
|
||||
//ctx = context.Background()
|
||||
//s, err = sqlite.ConnectInMemory(ctx)
|
||||
|
||||
ctx = logger.ContextWithValue(context.Background(), logger.MakeDebugLogger())
|
||||
s, err = sqlite.ConnectInMemoryWithDebug(ctx)
|
||||
|
||||
namespaceID = nextID()
|
||||
ns *types.Namespace
|
||||
|
||||
pages = types.PageSet{
|
||||
// should be deleted w/o a problem
|
||||
&types.Page{ID: 1},
|
||||
&types.Page{ID: 2},
|
||||
&types.Page{ID: 3, SelfID: 2},
|
||||
//&types.Page{ID: 4},
|
||||
//&types.Page{ID: 5, SelfID: 4},
|
||||
|
||||
// will be used for rebase delete
|
||||
&types.Page{ID: 10},
|
||||
&types.Page{ID: 11, SelfID: 10},
|
||||
&types.Page{ID: 12, SelfID: 10},
|
||||
&types.Page{ID: 121, SelfID: 12},
|
||||
&types.Page{ID: 122, SelfID: 12},
|
||||
|
||||
// will be used for cascade delete
|
||||
&types.Page{ID: 20},
|
||||
&types.Page{ID: 21, SelfID: 20},
|
||||
&types.Page{ID: 22, SelfID: 20},
|
||||
&types.Page{ID: 221, SelfID: 22},
|
||||
&types.Page{ID: 222, SelfID: 22},
|
||||
}
|
||||
|
||||
svc = &page{
|
||||
store: s,
|
||||
ac: &accessControl{rbac: &rbac.ServiceAllowAll{}},
|
||||
eventbus: eventbus.New(),
|
||||
locale: ResourceTranslationsManager(locale.Static()),
|
||||
}
|
||||
|
||||
pageLookup = func(t *testing.T, pageID uint64) *types.Page {
|
||||
p, err := store.LookupComposePageByID(ctx, s, pageID)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, p)
|
||||
return p
|
||||
}
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("failed to init sqlite in-memory db: %v", err)
|
||||
}
|
||||
|
||||
//if err = store.Upgrade(ctx, zap.NewNop(), s); err != nil {
|
||||
if err = store.Upgrade(ctx, logger.MakeDebugLogger(), 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.TruncateComposeModules(ctx); err != nil {
|
||||
t.Fatalf("failed to truncate compose modules: %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)
|
||||
}
|
||||
|
||||
_ = pages.Walk(func(p *types.Page) error {
|
||||
p.NamespaceID = ns.ID
|
||||
return nil
|
||||
})
|
||||
|
||||
if err = store.CreateComposePage(ctx, s, pages...); err != nil {
|
||||
t.Fatalf("failed to seed pages: %v", err)
|
||||
}
|
||||
|
||||
t.Run("remove page without children", func(t *testing.T) {
|
||||
require.NoError(t, svc.DeleteByID(ctx, ns.ID, 1, types.PageChildrenOnDeleteAbort))
|
||||
require.NotNil(t, pageLookup(t, 1).DeletedAt, "parent should be deleted")
|
||||
})
|
||||
|
||||
t.Run("abort when children are present", func(t *testing.T) {
|
||||
require.ErrorIs(t, svc.DeleteByID(ctx, ns.ID, 2, types.PageChildrenOnDeleteAbort), PageErrDeleteAbortedForPageWithSubpages())
|
||||
require.Nil(t, pageLookup(t, 2).DeletedAt, "parent should be deleted")
|
||||
require.Nil(t, pageLookup(t, 3).DeletedAt, "child should be deleted")
|
||||
})
|
||||
|
||||
t.Run("remove only parent when forced", func(t *testing.T) {
|
||||
require.NoError(t, svc.DeleteByID(ctx, ns.ID, 2, types.PageChildrenOnDeleteForce))
|
||||
require.NotNil(t, pageLookup(t, 2).DeletedAt, "parent should be deleted")
|
||||
require.Nil(t, pageLookup(t, 3).DeletedAt, "child should not be deleted")
|
||||
})
|
||||
|
||||
t.Run("delete parent and rebase children", func(t *testing.T) {
|
||||
require.NoError(t, svc.DeleteByID(ctx, ns.ID, 10, types.PageChildrenOnDeleteRebase))
|
||||
require.NotNil(t, pageLookup(t, 10).DeletedAt)
|
||||
|
||||
for _, pageID := range []uint64{11, 12} {
|
||||
require.Nil(t, pageLookup(t, pageID).DeletedAt, "child page should not be deleted")
|
||||
require.Equal(t, uint64(0), pageLookup(t, pageID).SelfID, "child page should be moved one level lower")
|
||||
}
|
||||
|
||||
for _, pageID := range []uint64{121, 122} {
|
||||
require.Nil(t, pageLookup(t, pageID).DeletedAt, "grandchild page should not be deleted")
|
||||
require.Equal(t, uint64(12), pageLookup(t, pageID).SelfID, "grand child page should stay where it is")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("delete parent and all children", func(t *testing.T) {
|
||||
require.NoError(t, svc.DeleteByID(ctx, ns.ID, 20, types.PageChildrenOnDeleteCascade))
|
||||
require.NotNil(t, pageLookup(t, 20).DeletedAt, "parent page should be deleted")
|
||||
|
||||
for _, pageID := range []uint64{21, 22} {
|
||||
require.NotNil(t, pageLookup(t, pageID).DeletedAt, "child page should not be deleted")
|
||||
require.Equal(t, uint64(20), pageLookup(t, pageID).SelfID, "child page should be stay where it is")
|
||||
}
|
||||
|
||||
for _, pageID := range []uint64{221, 222} {
|
||||
require.NotNil(t, pageLookup(t, pageID).DeletedAt, "grandchild page should not be deleted")
|
||||
require.Equal(t, uint64(22), pageLookup(t, pageID).SelfID, "grandchild page should be stay where it is")
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user