PLT-5365 Import of basic user properties. (#5231)

Этот коммит содержится в:
George Goldberg
2017-01-31 13:04:17 +00:00
коммит произвёл enahum
родитель c0c6ef47d9
Коммит 67739cb516
6 изменённых файлов: 571 добавлений и 36 удалений

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

@@ -7,6 +7,7 @@ import (
"github.com/mattermost/platform/model"
"strings"
"testing"
"github.com/mattermost/platform/utils"
)
func ptrStr(s string) *string {
@@ -236,6 +237,118 @@ func TestImportValidateChannelImportData(t *testing.T) {
}
}
func TestImportValidateUserImportData(t *testing.T) {
// Test with minimum required valid properties.
data := UserImportData{
Username: ptrStr("bob"),
Email: ptrStr("bob@example.com"),
}
if err := validateUserImportData(&data); err != nil {
t.Fatal("Validation failed but should have been valid.")
}
// Invalid Usernames.
data.Username = nil
if err := validateUserImportData(&data); err == nil {
t.Fatal("Validation should have failed due to nil Username.")
}
data.Username = ptrStr("")
if err := validateUserImportData(&data); err == nil {
t.Fatal("Validation should have failed due to 0 length Username.")
}
data.Username = ptrStr(strings.Repeat("abcdefghij", 7))
if err := validateUserImportData(&data); err == nil {
t.Fatal("Validation should have failed due to too long Username.")
}
data.Username = ptrStr("i am a username with spaces and !!!")
if err := validateUserImportData(&data); err == nil {
t.Fatal("Validation should have failed due to invalid characters in Username.")
}
data.Username = ptrStr("bob")
// Invalid Emails
data.Email = nil
if err := validateUserImportData(&data); err == nil {
t.Fatal("Validation should have failed due to nil Email.")
}
data.Email = ptrStr("")
if err := validateUserImportData(&data); err == nil {
t.Fatal("Validation should have failed due to 0 length Email.")
}
data.Email = ptrStr(strings.Repeat("abcdefghij", 13))
if err := validateUserImportData(&data); err == nil {
t.Fatal("Validation should have failed due to too long Email.")
}
data.Email = ptrStr("bob@example.com")
// TODO: Auth Service and Auth Data.
// Test a valid User with all fields populated.
data = UserImportData{
Username: ptrStr("bob"),
Email: ptrStr("bob@example.com"),
AuthService: ptrStr("ldap"),
AuthData: ptrStr("bob"),
Nickname: ptrStr("BobNick"),
FirstName: ptrStr("Bob"),
LastName: ptrStr("Blob"),
Position: ptrStr("The Boss"),
Roles: ptrStr("system_user"),
Locale: ptrStr("en"),
}
if err := validateUserImportData(&data); err != nil {
t.Fatal("Validation failed but should have been valid.")
}
// Test various invalid optional field values.
data.Nickname = ptrStr(strings.Repeat("abcdefghij", 7))
if err := validateUserImportData(&data); err == nil {
t.Fatal("Validation should have failed due to too long Nickname.")
}
data.Nickname = ptrStr("BobNick")
data.FirstName = ptrStr(strings.Repeat("abcdefghij", 7))
if err := validateUserImportData(&data); err == nil {
t.Fatal("Validation should have failed due to too long First Name.")
}
data.FirstName = ptrStr("Bob")
data.LastName = ptrStr(strings.Repeat("abcdefghij", 7))
if err := validateUserImportData(&data); err == nil {
t.Fatal("Validation should have failed due to too long Last name.")
}
data.LastName = ptrStr("Blob")
data.Position = ptrStr(strings.Repeat("abcdefghij", 7))
if err := validateUserImportData(&data); err == nil {
t.Fatal("Validation should have failed due to too long Position.")
}
data.Position = ptrStr("The Boss")
data.Roles = ptrStr("system_user wat")
if err := validateUserImportData(&data); err == nil {
t.Fatal("Validation should have failed due to too unrecognised role.")
}
data.Roles = nil
if err := validateUserImportData(&data); err != nil {
t.Fatal("Validation failed but should have been valid.")
}
data.Roles = ptrStr("")
if err := validateUserImportData(&data); err != nil {
t.Fatal("Validation failed but should have been valid.")
}
data.Roles = ptrStr("system_user")
}
func TestImportImportTeam(t *testing.T) {
_ = Setup()
@@ -505,6 +618,182 @@ func TestImportImportChannel(t *testing.T) {
}
func TestImportImportUser(t *testing.T) {
_ = Setup()
// Check how many users are in the database.
var userCount int64
if r := <-Srv.Store.User().GetTotalUsersCount(); r.Err == nil {
userCount = r.Data.(int64)
} else {
t.Fatalf("Failed to get user count.")
}
// Do an invalid user in dry-run mode.
data := UserImportData{
Username: ptrStr(model.NewId()),
}
if err := ImportUser(&data, true); err == nil {
t.Fatalf("Should have failed to import invalid user.")
}
// Check that no more users are in the DB.
if r := <-Srv.Store.User().GetTotalUsersCount(); r.Err == nil {
if r.Data.(int64) != userCount {
t.Fatalf("Unexpected number of users")
}
} else {
t.Fatalf("Failed to get user count.")
}
// Do a valid user in dry-run mode.
data = UserImportData{
Username: ptrStr(model.NewId()),
Email: ptrStr(model.NewId() + "@example.com"),
}
if err := ImportUser(&data, true); err != nil {
t.Fatalf("Should have succeeded to import valid user.")
}
// Check that no more users are in the DB.
if r := <-Srv.Store.User().GetTotalUsersCount(); r.Err == nil {
if r.Data.(int64) != userCount {
t.Fatalf("Unexpected number of users")
}
} else {
t.Fatalf("Failed to get user count.")
}
// Do an invalid user in apply mode.
data = UserImportData{
Username: ptrStr(model.NewId()),
}
if err := ImportUser(&data, false); err == nil {
t.Fatalf("Should have failed to import invalid user.")
}
// Check that no more users are in the DB.
if r := <-Srv.Store.User().GetTotalUsersCount(); r.Err == nil {
if r.Data.(int64) != userCount {
t.Fatalf("Unexpected number of users")
}
} else {
t.Fatalf("Failed to get user count.")
}
// Do a valid user in apply mode.
username := model.NewId()
data = UserImportData{
Username: &username,
Email: ptrStr(model.NewId() + "@example.com"),
Nickname: ptrStr(model.NewId()),
FirstName: ptrStr(model.NewId()),
LastName: ptrStr(model.NewId()),
Position: ptrStr(model.NewId()),
}
if err := ImportUser(&data, false); err != nil {
t.Fatalf("Should have succeeded to import valid user.")
}
// Check that one more user is in the DB.
if r := <-Srv.Store.User().GetTotalUsersCount(); r.Err == nil {
if r.Data.(int64) != userCount + 1 {
t.Fatalf("Unexpected number of users")
}
} else {
t.Fatalf("Failed to get user count.")
}
// Get the user and check all the fields are correct.
if user, err := GetUserByUsername(username); err != nil {
t.Fatalf("Failed to get user from database.")
} else {
if user.Email != *data.Email || user.Nickname != *data.Nickname || user.FirstName != *data.FirstName || user.LastName != *data.LastName || user.Position != *data.Position {
t.Fatalf("User properties do not match Import Data.")
}
// Check calculated properties.
if user.AuthService != "" {
t.Fatalf("Expected Auth Service to be empty.")
}
if ! (user.AuthData == nil || *user.AuthData == "") {
t.Fatalf("Expected AuthData to be empty.")
}
if len(user.Password) == 0 {
t.Fatalf("Expected password to be set.")
}
if !user.EmailVerified {
t.Fatalf("Expected EmailVerified to be true.")
}
if user.Locale != *utils.Cfg.LocalizationSettings.DefaultClientLocale {
t.Fatalf("Expected Locale to be the default.")
}
if user.Roles != "system_user" {
t.Fatalf("Expected roles to be system_user")
}
}
// Alter all the fields of that user.
data.Email = ptrStr(model.NewId() + "@example.com")
data.AuthService = ptrStr("ldap")
data.AuthData = &username
data.Nickname = ptrStr(model.NewId())
data.FirstName = ptrStr(model.NewId())
data.LastName = ptrStr(model.NewId())
data.Position = ptrStr(model.NewId())
data.Roles = ptrStr("system_admin system_user")
data.Locale = ptrStr("zh_CN")
if err := ImportUser(&data, false); err != nil {
t.Fatalf("Should have succeeded to update valid user %v", err)
}
// Check user count the same.
if r := <-Srv.Store.User().GetTotalUsersCount(); r.Err == nil {
if r.Data.(int64) != userCount + 1 {
t.Fatalf("Unexpected number of users")
}
} else {
t.Fatalf("Failed to get user count.")
}
// Get the user and check all the fields are correct.
if user, err := GetUserByUsername(username); err != nil {
t.Fatalf("Failed to get user from database.")
} else {
if user.Email != *data.Email || user.Nickname != *data.Nickname || user.FirstName != *data.FirstName || user.LastName != *data.LastName || user.Position != *data.Position {
t.Fatalf("Updated User properties do not match Import Data.")
}
// Check calculated properties.
if user.AuthService != "ldap" {
t.Fatalf("Expected Auth Service to be ldap \"%v\"", user.AuthService)
}
if ! (user.AuthData == data.AuthData || *user.AuthData == *data.AuthData) {
t.Fatalf("Expected AuthData to be set.")
}
if len(user.Password) != 0 {
t.Fatalf("Expected password to be empty.")
}
if !user.EmailVerified {
t.Fatalf("Expected EmailVerified to be true.")
}
if user.Locale != *data.Locale {
t.Fatalf("Expected Locale to be the set.")
}
if user.Roles != *data.Roles {
t.Fatalf("Expected roles to be set: %v", user.Roles)
}
}
}
func TestImportImportLine(t *testing.T) {
_ = Setup()
@@ -528,6 +817,12 @@ func TestImportImportLine(t *testing.T) {
if err := ImportLine(line, false); err == nil {
t.Fatalf("Expected an error when importing a line with type channel with a nil channel.")
}
// Try import line with user type but nil user.
line.Type = "user"
if err := ImportLine(line, false); err == nil {
t.Fatalf("Expected an error when importing a line with type uesr with a nil user.")
}
}
func TestImportBulkImport(t *testing.T) {
@@ -538,7 +833,8 @@ func TestImportBulkImport(t *testing.T) {
// Run bulk import with a valid 1 of everything.
data1 := `{"type": "team", "team": {"type": "O", "display_name": "lskmw2d7a5ao7ppwqh5ljchvr4", "name": "` + teamName + `"}}
{"type": "channel", "channel": {"type": "O", "display_name": "xr6m6udffngark2uekvr3hoeny", "team": "` + teamName + `", "name": "` + channelName + `"}}`
{"type": "channel", "channel": {"type": "O", "display_name": "xr6m6udffngark2uekvr3hoeny", "team": "` + teamName + `", "name": "` + channelName + `"}}
{"type": "user", "user": {"username": "kufjgnkxkrhhfgbrip6qxkfsaa", "email": "kufjgnkxkrhhfgbrip6qxkfsaa@example.com"}}`
if err, line := BulkImport(strings.NewReader(data1), false); err != nil || line != 0 {
t.Fatalf("BulkImport should have succeeded: %v, %v", err.Error(), line)