package acl

import (
	"testing"

	"github.com/nspcc-dev/neofs-api-go/acl"
	"github.com/nspcc-dev/neofs-api-go/object"
	"github.com/stretchr/testify/require"
)

func TestNewTypedObjectExtendedHeader(t *testing.T) {
	var res acl.TypedHeader

	hdr := object.Header{}

	// nil value
	require.Nil(t, newTypedObjectExtendedHeader(hdr))

	// UserHeader
	{
		key := "key"
		val := "val"
		hdr.Value = &object.Header_UserHeader{
			UserHeader: &object.UserHeader{
				Key:   key,
				Value: val,
			},
		}

		res = newTypedObjectExtendedHeader(hdr)
		require.Equal(t, acl.HdrTypeObjUsr, res.HeaderType())
		require.Equal(t, key, res.Name())
		require.Equal(t, val, res.Value())
	}

	{ // Link
		link := new(object.Link)
		link.ID = object.ID{1, 2, 3}

		hdr.Value = &object.Header_Link{
			Link: link,
		}

		check := func(lt object.Link_Type, name string) {
			link.Type = lt

			res = newTypedObjectExtendedHeader(hdr)

			require.Equal(t, acl.HdrTypeObjSys, res.HeaderType())
			require.Equal(t, name, res.Name())
			require.Equal(t, link.ID.String(), res.Value())
		}

		check(object.Link_Previous, acl.HdrObjSysLinkPrev)
		check(object.Link_Next, acl.HdrObjSysLinkNext)
		check(object.Link_Parent, acl.HdrObjSysLinkPar)
		check(object.Link_Child, acl.HdrObjSysLinkChild)
		check(object.Link_StorageGroup, acl.HdrObjSysLinkSG)
	}
}