package entity

import (
	"testing"

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

func TestModelValues(t *testing.T) {
	t.Run("NoInterface", func(t *testing.T) {
		m := Photo{}
		values, keys, err := ModelValues(m, "ID", "PhotoUID")

		assert.Error(t, err)
		assert.IsType(t, Values{}, values)
		assert.Len(t, keys, 0)
	})
	t.Run("NewPhoto", func(t *testing.T) {
		m := &Photo{}
		values, keys, err := ModelValues(m, "ID", "PhotoUID")

		if err != nil {
			t.Fatal(err)
		}

		assert.Len(t, keys, 0)
		assert.NotNil(t, values)
		assert.IsType(t, Values{}, values)
	})
	t.Run("ExistingPhoto", func(t *testing.T) {
		m := PhotoFixtures.Pointer("Photo01")
		values, keys, err := ModelValues(m, "ID", "PhotoUID")

		if err != nil {
			t.Fatal(err)
		}

		assert.Len(t, keys, 2)
		assert.NotNil(t, values)
		assert.IsType(t, Values{}, values)
	})
	t.Run("NewFace", func(t *testing.T) {
		m := &Face{}
		values, keys, err := ModelValues(m, "ID")

		if err != nil {
			t.Fatal(err)
		}

		assert.Len(t, keys, 0)
		assert.NotNil(t, values)
		assert.IsType(t, Values{}, values)
	})
	t.Run("ExistingFace", func(t *testing.T) {
		m := FaceFixtures.Pointer("john-doe")
		values, keys, err := ModelValues(m, "ID")

		if err != nil {
			t.Fatal(err)
		}

		assert.Len(t, keys, 1)
		assert.NotNil(t, values)
		assert.IsType(t, Values{}, values)
	})
}
