package user

import (
	"reflect"
	"testing"

	"github.com/openshift/origin/pkg/user/api"
)

func TestInitializerUser(t *testing.T) {
	testcases := map[string]struct {
		Identity     *api.Identity
		User         *api.User
		ExpectedUser *api.User
	}{
		"empty": {
			Identity:     &api.Identity{},
			User:         &api.User{},
			ExpectedUser: &api.User{},
		},
		"empty extra": {
			Identity:     &api.Identity{Extra: map[string]string{}},
			User:         &api.User{},
			ExpectedUser: &api.User{},
		},
		"sets full name": {
			Identity: &api.Identity{
				Extra: map[string]string{"name": "Bob"},
			},
			User:         &api.User{},
			ExpectedUser: &api.User{FullName: "Bob"},
		},
		"respects existing full name": {
			Identity: &api.Identity{
				Extra: map[string]string{"name": "Bob"},
			},
			User:         &api.User{FullName: "Harold"},
			ExpectedUser: &api.User{FullName: "Harold"},
		},
	}

	for k, tc := range testcases {
		err := NewDefaultUserInitStrategy().InitializeUser(tc.Identity, tc.User)
		if err != nil {
			t.Errorf("%s: unexpected error: %v", k, err)
			continue
		}
		if !reflect.DeepEqual(tc.User, tc.ExpectedUser) {
			t.Errorf("%s: expected \n\t%#v\ngot\n\t%#v", k, tc.ExpectedUser, tc.User)
		}
	}
}