package dto

import (
	"encoding/json"
	"testing"

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

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

	tests := []struct {
		name    string
		payload string
		wantNil bool
		want    string
	}{
		{name: "omitted leaves unchanged", payload: `{}`, wantNil: true},
		{name: "null unassigns", payload: `{"assigneeRef":null}`, want: ""},
		{name: "empty unassigns", payload: `{"assigneeRef":""}`, want: ""},
		{name: "value assigns", payload: `{"assigneeRef":"mem_agent"}`, want: "mem_agent"},
	}

	for _, test := range tests {
		test := test
		t.Run(test.name, func(t *testing.T) {
			t.Parallel()

			var request TaskUpdateRequest
			require.NoError(t, json.Unmarshal([]byte(test.payload), &request))
			if test.wantNil {
				require.Nil(t, request.AssigneeRef)
				return
			}
			require.NotNil(t, request.AssigneeRef)
			require.Equal(t, test.want, *request.AssigneeRef)
		})
	}
}
