package object_test

import (
	"testing"

	v2container "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
	cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
	objecttest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/test"
	usertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user/test"
	"github.com/stretchr/testify/require"
)

func TestInitCreation(t *testing.T) {
	var o object.Object
	cnr := cidtest.ID()
	own := usertest.ID()

	object.InitCreation(&o, object.RequiredFields{
		Container: cnr,
		Owner:     own,
	})

	cID, set := o.ContainerID()
	require.True(t, set)
	require.Equal(t, cnr, cID)
	require.Equal(t, own, o.OwnerID())
}

func Test_Attributes(t *testing.T) {
	obj := objecttest.Object()

	t.Run("get user attributes", func(t *testing.T) {
		// See how we create a test object. It's created with two attributes.
		require.Len(t, obj.UserAttributes(), 2)
	})

	userAttrs := obj.UserAttributes()

	sysAttr := *object.NewAttribute()
	sysAttr.SetKey(v2container.SysAttributePrefix + "key")
	sysAttr.SetValue("value")

	attr := append(userAttrs, sysAttr)
	obj.SetAttributes(attr...)

	t.Run("get attributes", func(t *testing.T) {
		require.ElementsMatch(t, obj.UserAttributes(), userAttrs)
		require.ElementsMatch(t, obj.Attributes(), attr)
	})
}