package images

import (
	"encoding/json"
	"errors"
	"testing"

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

func TestIdentityImage_GetDataURI(t *testing.T) {
	cs := []struct {
		II    IdentityImage
		URI   string
		Error error
	}{
		{
			IdentityImage{Payload: testJpegBytes},
			"data:image/jpeg;base64,/9j/2wCEAFA3PEY8MlA=",
			nil,
		},
		{
			IdentityImage{Payload: testPngBytes},
			"data:image/png;base64,iVBORw0KGgoAAAANSUg=",
			nil,
		},
		{
			IdentityImage{Payload: testGifBytes},
			"data:image/gif;base64,R0lGODlhAAEAAYQfAP8=",
			nil,
		},
		{
			IdentityImage{Payload: testWebpBytes},
			"data:image/webp;base64,UklGRpBJAABXRUJQVlA=",
			nil,
		},
		{
			IdentityImage{Payload: testAacBytes},
			"",
			errors.New("image format not supported"),
		},
	}

	for _, c := range cs {
		u, err := c.II.GetDataURI()

		if c.Error == nil {
			require.NoError(t, err)
		} else {
			require.EqualError(t, err, c.Error.Error())
		}

		require.Exactly(t, c.URI, u)
	}
}

func TestIdentityImage_MarshalJSON(t *testing.T) {
	ii := IdentityImage{
		Name:         "thumbnail",
		Payload:      testJpegBytes,
		Width:        80,
		Height:       80,
		FileSize:     256,
		ResizeTarget: 80,
	}
	expected := `{"keyUid":"","type":"thumbnail","uri":"data:image/jpeg;base64,/9j/2wCEAFA3PEY8MlA=","width":80,"height":80,"fileSize":256,"resizeTarget":80,"clock":0}`

	js, err := json.Marshal(ii)
	require.NoError(t, err)
	require.Exactly(t, expected, string(js))
}