package entity

import (
	"testing"

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

func TestCreateUserDetails(t *testing.T) {
	t.Run("EmptyUid", func(t *testing.T) {
		m := &User{UserUID: ""}
		assert.Error(t, CreateUserDetails(m))
		assert.Nil(t, m.UserDetails)
	})
	t.Run("Success", func(t *testing.T) {
		m := &User{UserUID: "1234"}
		err := CreateUserDetails(m)

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

		assert.NotNil(t, m.UserDetails)
	})
}

func TestUserDetails_HasID(t *testing.T) {
	u := FindUserByName("alice")
	assert.True(t, u.UserDetails.HasID())
}

func TestUserDetails_Updates(t *testing.T) {
	m := &User{
		UserUID: "1234",
		UserDetails: &UserDetails{
			BirthYear:  1999,
			BirthMonth: 3,
			NameTitle:  "Dr.",
			GivenName:  "John",
			MiddleName: "Wulfrick",
			FamilyName: "Doe",
		}}

	m.UserDetails.Updates(UserDetails{GivenName: "Jane"})
	assert.Equal(t, "Jane", m.UserDetails.GivenName)
}

func TestUserDetails_DisplayName(t *testing.T) {
	t.Run("DrJohnDoe", func(t *testing.T) {
		m := &User{
			UserUID: "1234",
			UserDetails: &UserDetails{
				BirthYear:  1999,
				BirthMonth: 3,
				NameTitle:  "Dr.",
				GivenName:  "John",
				MiddleName: "Wulfrick",
				FamilyName: "Doe",
			}}

		assert.Equal(t, "Dr. John Doe", m.UserDetails.DisplayName())
	})
	t.Run("Empty", func(t *testing.T) {
		m := &User{}
		assert.Equal(t, "", m.UserDetails.DisplayName())
	})

}
