package session import ( "context" "testing" "github.com/Tencent/WeKnora/internal/types" "github.com/Tencent/WeKnora/internal/types/interfaces" "github.com/stretchr/testify/require" ) type uploadedResourceCatalog struct { interfaces.ResourceCatalog tenant uint64 bound []types.ResourceBinding } func (c *uploadedResourceCatalog) Resolve(context.Context, string) (*types.StoredResource, error) { return &types.StoredResource{TenantID: c.tenant}, nil } func (c *uploadedResourceCatalog) Bind(_ context.Context, ref, ownerType, ownerID, relation string) error { c.bound = append(c.bound, types.ResourceBinding{ResourceID: ref, OwnerType: ownerType, OwnerID: ownerID, Relation: relation}) return nil } func TestBindUploadedMessageResources(t *testing.T) { ctx := context.WithValue(context.Background(), types.TenantIDContextKey, uint64(7)) ref := types.BuildResourcePath("AbCdEfGhIjKlMnOpQrStUv") catalog := &uploadedResourceCatalog{tenant: 7} h := &Handler{resourceCatalog: catalog} message := &types.Message{ ID: "message-1", Content: types.BuildResourcePath("XbCdEfGhIjKlMnOpQrStUv"), Images: types.MessageImages{{URL: ref}}, Attachments: types.MessageAttachments{{URL: ref}}, } require.NoError(t, h.bindUploadedMessageResources(ctx, message)) require.Len(t, catalog.bound, 1) require.Equal(t, types.ResourceOwnerMessage, catalog.bound[0].OwnerType) require.Equal(t, "message-1", catalog.bound[0].OwnerID) catalog.bound = nil catalog.tenant = 8 require.Error(t, h.bindUploadedMessageResources(ctx, message)) require.Empty(t, catalog.bound) }