package taskboard

import (
	"testing"

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

func TestTaskDiscussionReadQueryUsesCanonicalParentAuthority(t *testing.T) {
	query := taskDiscussionScopeMessagesSelectSQL()
	require.Contains(t, query, "JOIN task_boards task_board")
	require.Contains(t, query, "JOIN scopes task_board_channel")
	require.Contains(t, query, "t.channel_id = task_board.channel_id")
	require.Contains(t, query, "task_scope.status = 'active'")
	require.Contains(t, query, "sm.workspace_id = $1")
}

func TestNormalizeTaskScopeMessageInputTrimsPlainScopeMessage(t *testing.T) {
	t.Parallel()

	input, err := normalizeTaskScopeMessageInput(TaskScopeMessageInput{
		Content: "  plain progress update  ",
	})

	require.NoError(t, err)
	require.Equal(t, "plain progress update", input.Content)
}

func TestNormalizeTaskScopeMessageInputValidatesTrustedDigest(t *testing.T) {
	t.Parallel()

	input, err := normalizeTaskScopeMessageInput(TaskScopeMessageInput{
		Content:                  "callback",
		IdempotencyPayloadDigest: "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789",
	})
	require.NoError(t, err)
	require.Equal(t, "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789", input.IdempotencyPayloadDigest)

	_, err = normalizeTaskScopeMessageInput(TaskScopeMessageInput{
		Content:                  "callback",
		IdempotencyPayloadDigest: "not-a-sha256",
	})
	require.ErrorContains(t, err, "idempotency payload digest is invalid")
}
