package dispatch

import (
	"encoding/json"
	"testing"

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

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

	receiverMappingValue := "L1"
	payload, err := json.Marshal(ActionExecutionContextAssign{
		ReceiverMappingValue:   &receiverMappingValue,
		RemoveAutoAssignLabels: []string{"dispatcher-auto-assign-l1", "dispatcher-auto-assign-l3"},
	})
	require.NoError(t, err)
	require.JSONEq(t, `{"receiver_mapping_value":"L1","remove_auto_assign_labels":["dispatcher-auto-assign-l1","dispatcher-auto-assign-l3"]}`, string(payload))

	payload, err = json.Marshal(ActionExecutionContextAssign{})
	require.NoError(t, err)
	require.JSONEq(t, `{}`, string(payload))

	receiverMappingValue = ""
	payload, err = json.Marshal(ActionExecutionContextAssign{ReceiverMappingValue: &receiverMappingValue})
	require.NoError(t, err)
	require.JSONEq(t, `{"receiver_mapping_value":""}`, string(payload))
}

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

	payload, err := json.Marshal(ActionExecutionContextEscalate{
		EscalateTo:             EscalateToL3,
		TargetStatus:           "ESCALATE TO L3",
		TransitionID:           "31",
		RemoveAutoAssignLabels: []string{"dispatcher-auto-assign-l1", "dispatcher-auto-assign-l3"},
	})
	require.NoError(t, err)
	require.JSONEq(t, `{
		"escalate_to":"L3",
		"target_status":"ESCALATE TO L3",
		"transition_id":"31",
		"remove_auto_assign_labels":["dispatcher-auto-assign-l1","dispatcher-auto-assign-l3"]
	}`, string(payload))
}
