Files
xinmi/internal/application/service/asset_copy_policy_test.go
T
yawan f7fc992f57
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
WeKnora deployment source with the reviewed wiki identity, summary and recovery fixes
2026-09-22 16:19:06 +08:00

45 lines
2.1 KiB
Go

package service
import (
"testing"
"github.com/Tencent/WeKnora/internal/accesspolicy"
"github.com/Tencent/WeKnora/internal/types"
"github.com/stretchr/testify/require"
)
func TestKnowledgeBaseCopyRejectsSharedSourcesAndTargets(t *testing.T) {
repo := newFakeKBRepo()
repo.rows["shared"] = &types.KnowledgeBase{ID: "shared", TenantID: 1, CreatorID: "alice", Name: "Shared"}
repo.rows["owned"] = &types.KnowledgeBase{ID: "owned", TenantID: 1, CreatorID: "bob", Name: "Owned"}
svc := newPR3KBService(repo, &fakeRegistry{}, &fakeOwnership{})
bob := accesspolicy.WithSnapshot(instructionContext(1, "bob", types.TenantRoleContributor), &accesspolicy.Snapshot{Publications: map[string]bool{"knowledge:shared": true}})
_, _, err := svc.CopyKnowledgeBase(bob, "shared", "")
require.ErrorContains(t, err, "不能复制")
_, err = svc.DuplicateKnowledgeBase(bob, "shared")
require.ErrorContains(t, err, "不能复制")
_, _, err = svc.CopyKnowledgeBase(bob, "owned", "shared")
require.ErrorContains(t, err, "不能复制")
require.Len(t, repo.rows, 2, "denied copies must not create destination rows")
_, _, err = svc.CopyKnowledgeBase(bob, "owned", "")
require.NoError(t, err)
admin := instructionContext(1, "admin", types.TenantRoleAdmin)
_, _, err = svc.CopyKnowledgeBase(admin, "shared", "")
require.NoError(t, err)
require.Error(t, CheckKnowledgeBaseCopyPermission(instructionContext(2, "admin", types.TenantRoleAdmin), repo.rows["shared"]))
}
func TestAgentCopyPreservesOwnerAndAdminPermissions(t *testing.T) {
repo := &lifecycleAgentRepo{rows: map[string]*types.CustomAgent{"a": {ID: "a", TenantID: 1, CreatedBy: "alice", Name: "A", Visibility: "global", Enabled: true}}}
svc := &customAgentService{repo: repo}
for _, identity := range []struct {
user string
role types.TenantRole
}{{"alice", types.TenantRoleContributor}, {"admin", types.TenantRoleAdmin}} {
copy, err := svc.CopyAgent(instructionContext(1, identity.user, identity.role), "a")
require.NoError(t, err)
require.Equal(t, identity.user, copy.CreatedBy)
require.Equal(t, "private", copy.Visibility)
}
}