diff --git a/server/e2e/gql_user_test.go b/server/e2e/gql_user_test.go index d13586df88..b452e439dd 100644 --- a/server/e2e/gql_user_test.go +++ b/server/e2e/gql_user_test.go @@ -141,23 +141,46 @@ func TestDeleteMe(t *testing.T) { func TestSearchUser(t *testing.T) { e, _ := StartGQLServerAndRepos(t, baseSeederUser) - query := fmt.Sprintf(` { searchUser(nameOrEmail: "%s"){ id name email } }`, "e2e") - request := GraphQLRequest{ - Query: query, - } - o := Request(e, uId1.String(), request).Object().Value("data").Object().Value("searchUser").Object() - o.Value("id").String().IsEqual(uId1.String()) - o.Value("name").String().IsEqual("e2e") - o.Value("email").String().IsEqual("e2e@e2e.com") - - query = fmt.Sprintf(` { searchUser(nameOrEmail: "%s"){ id name email } }`, "notfound") - request = GraphQLRequest{ - Query: query, - } - resp := Request(e, uId1.String(), request).Object() - resp.Value("data").Object().Value("searchUser").IsNull() - resp.NotContainsKey("errors") // not exist + tests := []struct { + name string + input string + wantFound bool + }{ + { + name: "exact match", + input: "e2e", + wantFound: true, + }, + { + name: "trimming space", + input: " e2e", + wantFound: true, + }, + { + name: "not found", + input: "notfound", + wantFound: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + query := fmt.Sprintf(`{ searchUser(nameOrEmail: "%s"){ id name email } }`,tt.input) + request := GraphQLRequest{ Query: query } + resp := Request(e, uId1.String(), request).Object().Value("data").Object() + + if tt.wantFound { + o := resp.Value("searchUser").Object() + o.Value("id").String().IsEqual(uId1.String()) + o.Value("name").String().IsEqual("e2e") + o.Value("email").String().IsEqual("e2e@e2e.com") + } else { + resp.Value("searchUser").IsNull() + resp.NotContainsKey("errors") + } + }) + } } func TestNode(t *testing.T) { diff --git a/server/internal/adapter/gql/loader_user.go b/server/internal/adapter/gql/loader_user.go index 4dea0df810..c9c32bb18c 100644 --- a/server/internal/adapter/gql/loader_user.go +++ b/server/internal/adapter/gql/loader_user.go @@ -2,6 +2,7 @@ package gql import ( "context" + "strings" "github.com/reearth/reearth/server/internal/adapter/gql/gqldataloader" "github.com/reearth/reearth/server/internal/adapter/gql/gqlmodel" @@ -38,6 +39,10 @@ func (c *UserLoader) Fetch(ctx context.Context, ids []gqlmodel.ID) ([]*gqlmodel. } func (c *UserLoader) SearchUser(ctx context.Context, nameOrEmail string) (*gqlmodel.User, error) { + + trimmed := strings.TrimSpace(nameOrEmail) + nameOrEmail = trimmed + res, err := c.usecase.SearchUser(ctx, nameOrEmail) if err != nil { return nil, err