package common_test

import (
	"encoding/json"
	"testing"

	"github.com/fiskerinc/cloud-services/pkg/common"
	"github.com/fiskerinc/cloud-services/pkg/testhelper"
)

type testHexBinary struct {
	Data *common.BinaryHex `json:"data"`
}

func TestBinaryHexMarshalJSON(t *testing.T) {
	expected := `"0000ffff"`
	value := common.BinaryHex{00, 00, 0xff, 0xff}

	json, err := value.MarshalJSON()

	testhelper.NoError(t, "MarshalJSON error", err)
	testhelper.Equal(t, "MarshalJSON json", expected, string(json))
}

func TestBinaryHexUnmarshalJSON(t *testing.T) {
	expected := []byte{00, 00, 0xff, 0xff}
	value := common.BinaryHex{}

	err := value.UnmarshalJSON([]byte(`"0000ffff"`))

	testhelper.NoError(t, "UnmarshalJSON error", err)
	testhelper.EqualByteArray(t, "UnmarshalJSON len", expected, value)
}

func TestBinaryHexStructMarshalJSON(t *testing.T) {
	expected := `{"data":"0000ffff"}`
	value := testHexBinary{Data: &common.BinaryHex{00, 00, 0xff, 0xff}}

	json, err := json.Marshal(value)

	testhelper.NoError(t, "MarshalJSON error", err)
	testhelper.Equal(t, "MarshalJSON json", expected, string(json))
}

func TestBinaryHexStructUnmarshalJSON(t *testing.T) {
	obj := testHexBinary{}
	data := `{"data":"0e00ffff"}`
	expected := []byte{0x0e, 00, 0xff, 0xff}

	err := json.Unmarshal([]byte(data), &obj)

	testhelper.NoError(t, "UnmarshalJSON error", err)
	testhelper.EqualByteArray(t, "UnmarshalJSON json", *obj.Data, expected)
}
