MM-30041: Return correct error message for user save (#16117)

* MM-30041: Return correct error message for user save

We were collapsing all types of user conflict into a single
error message. Fixed it by inspecting the field of the invalidError type
and returning the correct message.

https://mattermost.atlassian.net/browse/MM-30041

```release-note
NONE
```

* Fix test errors

* Fix wrong message in test when comparing error messages

Co-authored-by: Rodrigo Villablanca <villa061004@gmail.com>
Этот коммит содержится в:
Agniva De Sarker
2020-10-30 11:14:06 +05:30
коммит произвёл GitHub
родитель 1aadd36644
Коммит 325bff1176
7 изменённых файлов: 82 добавлений и 7 удалений

Просмотреть файл

@@ -6,6 +6,7 @@ package app
import (
"bytes"
"encoding/json"
"errors"
"image"
"image/color"
"strings"
@@ -18,6 +19,7 @@ import (
"github.com/mattermost/mattermost-server/v5/einterfaces"
"github.com/mattermost/mattermost-server/v5/model"
oauthgitlab "github.com/mattermost/mattermost-server/v5/model/gitlab"
"github.com/mattermost/mattermost-server/v5/store"
"github.com/mattermost/mattermost-server/v5/utils/testutils"
)
@@ -361,6 +363,46 @@ func TestUpdateOAuthUserAttrs(t *testing.T) {
})
}
func TestCreateUserConflict(t *testing.T) {
th := Setup(t)
defer th.TearDown()
user := &model.User{
Email: "test@localhost",
Username: model.NewId(),
}
user, err := th.App.Srv().Store.User().Save(user)
require.NoError(t, err)
username := user.Username
var invErr *store.ErrInvalidInput
// Same id
_, err = th.App.Srv().Store.User().Save(user)
require.Error(t, err)
require.True(t, errors.As(err, &invErr))
assert.Equal(t, "id", invErr.Field)
// Same email
user = &model.User{
Email: "test@localhost",
Username: model.NewId(),
}
_, err = th.App.Srv().Store.User().Save(user)
require.Error(t, err)
require.True(t, errors.As(err, &invErr))
assert.Equal(t, "email", invErr.Field)
// Same username
user = &model.User{
Email: "test2@localhost",
Username: username,
}
_, err = th.App.Srv().Store.User().Save(user)
require.Error(t, err)
require.True(t, errors.As(err, &invErr))
assert.Equal(t, "username", invErr.Field)
}
func TestUpdateUserEmail(t *testing.T) {
th := Setup(t)
defer th.TearDown()