Ctrl K
ComunidadGuías…

store/memo_relation_policy_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package store_test

import (
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/usememos/memos/store"
)

func TestValidateMemoRelationEndpointReadDanglingPlacement(t *testing.T) {
	danglingSpaceID := int32(42)
	for _, visibility := range []store.Visibility{store.Public, store.Protected, store.Private} {
		t.Run(string(visibility), func(t *testing.T) {
			err := store.ValidateMemoRelationEndpointRead(&store.MemoRelationEndpointSnapshot{
				ActorUserID:          1,
				Actor:                store.MemoActorState{Active: true},
				EndpointID:           2,
				EndpointCreatorID:    1,
				EndpointRowStatus:    store.Normal,
				EndpointVisibility:   visibility,
				EndpointSpaceID:      &danglingSpaceID,
				EndpointSpaceExists:  false,
				EndpointMemberActive: false,
			})
			require.NoError(t, err, "a dangling placement must not override a non-Space audience")
		})
	}

	err := store.ValidateMemoRelationEndpointRead(&store.MemoRelationEndpointSnapshot{
		ActorUserID:          1,
		Actor:                store.MemoActorState{Active: true},
		EndpointID:           2,
		EndpointCreatorID:    2,
		EndpointRowStatus:    store.Normal,
		EndpointVisibility:   store.SpaceAudience,
		EndpointSpaceID:      &danglingSpaceID,
		EndpointSpaceExists:  false,
		EndpointMemberActive: true,
	})
	require.ErrorIs(t, err, store.ErrMemoMutationConflict, "a Space audience must fail closed when its placement is dangling")
}

func TestValidateMemoWriteSnapshotRejectsDanglingSourcePlacement(t *testing.T) {
	danglingSpaceID := int32(42)
	err := store.ValidateMemoWriteSnapshot(
		&store.MemoWritePolicy{ActorUserID: 1},
		nil,
		&store.MemoWriteSnapshot{
			CreatorID:         1,
			RowStatus:         store.Normal,
			SpaceID:           &danglingSpaceID,
			Visibility:        store.Public,
			SourceSpaceExists: false,
		},
	)
	require.ErrorIs(t, err, store.ErrMemoSpaceNotWritable)
}