package app

import (
	"testing"

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

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

	tests := []struct {
		name    string
		input   string
		mode    JobMode
		request string
		ok      bool
	}{
		{name: "analysis", input: "看下 TCID-13023", mode: JobModeAnalyze, request: "看下 TCID-13023", ok: true},
		{name: "pr", input: "/pr 修复 continuation", mode: JobModePR, request: "修复 continuation", ok: true},
		{name: "single ticket", input: "/ticket APID-29232 evidence was lost", mode: JobModeTicket, request: "APID-29232 evidence was lost", ok: true},
		{name: "single ticket normalized", input: "/ticket apid-29232", mode: JobModeTicket, request: "apid-29232", ok: true},
		{name: "invalid single ticket", input: "/ticket not-a-ticket", ok: false},
		{name: "multiple tickets", input: "/ticket APID-29232 compare APID-29265", ok: false},
		{name: "empty single ticket", input: "/ticket", ok: false},
		{name: "empty pr", input: "/pr", ok: false},
		{name: "not pr prefix", input: "/prank investigate", mode: JobModeAnalyze, request: "/prank investigate", ok: true},
		{name: "empty", input: "  ", ok: false},
	}
	for _, test := range tests {
		t.Run(test.name, func(t *testing.T) {
			t.Parallel()
			mode, request, ok := ParseCommand(test.input)
			require.Equal(t, test.mode, mode)
			require.Equal(t, test.request, request)
			require.Equal(t, test.ok, ok)
		})
	}
}

func TestParseSingleTicketRequest(t *testing.T) {
	t.Parallel()
	issueKey, nomination, ok := parseSingleTicketRequest("apid-29232 parent lost provider facts")
	require.True(t, ok)
	require.Equal(t, "APID-29232", issueKey)
	require.Equal(t, "parent lost provider facts", nomination)
}
