diff --git a/models/user/user.go b/models/user/user.go index 6b54776adf..bfd7e6063f 100644 --- a/models/user/user.go +++ b/models/user/user.go @@ -1163,8 +1163,8 @@ func GetUserByEmail(ctx context.Context, email string) (*User, error) { email = strings.ToLower(email) // Otherwise, check in alternative list for activated email addresses - emailAddress := &EmailAddress{LowerEmail: email, IsActivated: true} - has, err := db.GetEngine(ctx).Get(emailAddress) + emailAddress := &EmailAddress{} + has, err := db.GetEngine(ctx).Where("lower_email = ? AND is_activated = ?", email, true).Get(emailAddress) if err != nil { return nil, err } diff --git a/models/user/user_test.go b/models/user/user_test.go index fd9d05653f..288a45105b 100644 --- a/models/user/user_test.go +++ b/models/user/user_test.go @@ -835,3 +835,25 @@ func TestPronounsPrivacy(t *testing.T) { assert.Equal(t, "any", user.GetPronouns(true)) }) } + +func TestGetUserByEmail(t *testing.T) { + require.NoError(t, unittest.PrepareTestDatabase()) + + t.Run("Normal", func(t *testing.T) { + u, err := user_model.GetUserByEmail(t.Context(), "user2@example.com") + require.NoError(t, err) + assert.EqualValues(t, 2, u.ID) + }) + + t.Run("Not activated", func(t *testing.T) { + u, err := user_model.GetUserByEmail(t.Context(), "user11@example.com") + require.ErrorIs(t, err, user_model.ErrUserNotExist{Name: "user11@example.com"}) + assert.Nil(t, u) + }) + + t.Run("Not primary", func(t *testing.T) { + u, err := user_model.GetUserByEmail(t.Context(), "user1-3@example.com") + require.NoError(t, err) + assert.EqualValues(t, 1, u.ID) + }) +}