package message

import (
	"testing"

	"github.com/stretchr/testify/require"
)

func TestRedactServiceAccountPublisherMetadataForSharedProjection(t *testing.T) {
	t.Parallel()
	appMessage := AppMessage{
		MessageType: MessageTypeServiceAccountPost,
		Metadata: map[string]any{
			"serviceAccountPost": map[string]any{"title": "A public article"},
			serviceAccountPublisherMetadataKey: map[string]any{
				"bylineActorRef": map[string]any{"memberId": "mem_private"},
			},
			platformAccountBroadcastMetadataKey: map[string]any{
				"operatorPrincipalId": "usr_private",
			},
		},
	}

	RedactServiceAccountPublisherMetadataForSharedProjection(&appMessage)

	require.NotContains(t, appMessage.Metadata, serviceAccountPublisherMetadataKey)
	require.NotContains(t, appMessage.Metadata, platformAccountBroadcastMetadataKey)
	require.Equal(t, map[string]any{"title": "A public article"}, appMessage.Metadata["serviceAccountPost"])
}

func TestRedactServiceAccountPublisherMetadataLeavesOrdinaryMessagesUnchanged(t *testing.T) {
	t.Parallel()
	metadata := map[string]any{
		serviceAccountPublisherMetadataKey: map[string]any{"memberId": "mem_1"},
	}
	appMessage := AppMessage{MessageType: "", Metadata: metadata}

	RedactServiceAccountPublisherMetadataForSharedProjection(&appMessage)

	require.Equal(t, metadata, appMessage.Metadata)
}
