[MM-19355] Migrate tests from "store/storetest/user_store.go" (#12732)

* [MM-19355] Migrate tests from "store/storetest/user_store.go" to use testify

* fix error message

* make shadow happy!

* fix type casting in equal

* use assert instead of require to soft fail for email updates
Этот коммит содержится в:
Witold Konior
2019-11-04 14:50:17 +01:00
коммит произвёл Joram Wilander
родитель 1db045bce3
Коммит 159dec03a6

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

@@ -92,62 +92,57 @@ func testUserStoreSave(t *testing.T, ss store.Store) {
Username: model.NewId(), Username: model.NewId(),
} }
if _, err := ss.User().Save(&u1); err != nil { _, err := ss.User().Save(&u1)
t.Fatal("couldn't save user", err) require.Nil(t, err, "couldn't save user")
}
defer func() { require.Nil(t, ss.User().PermanentDelete(u1.Id)) }() defer func() { require.Nil(t, ss.User().PermanentDelete(u1.Id)) }()
_, err := ss.Team().SaveMember(&model.TeamMember{TeamId: teamId, UserId: u1.Id}, maxUsersPerTeam) _, err = ss.Team().SaveMember(&model.TeamMember{TeamId: teamId, UserId: u1.Id}, maxUsersPerTeam)
require.Nil(t, err) require.Nil(t, err)
if _, err := ss.User().Save(&u1); err == nil { _, err = ss.User().Save(&u1)
t.Fatal("shouldn't be able to update user from save") require.NotNil(t, err, "shouldn't be able to update user from save")
}
u2 := model.User{ u2 := model.User{
Email: u1.Email, Email: u1.Email,
Username: model.NewId(), Username: model.NewId(),
} }
if _, err := ss.User().Save(&u2); err == nil { _, err = ss.User().Save(&u2)
t.Fatal("should be unique email") require.NotNil(t, err, "should be unique email")
}
u2.Email = MakeEmail() u2.Email = MakeEmail()
u2.Username = u1.Username u2.Username = u1.Username
if _, err := ss.User().Save(&u1); err == nil { _, err = ss.User().Save(&u1)
t.Fatal("should be unique username") require.NotNil(t, err, "should be unique username")
}
u2.Username = "" u2.Username = ""
if _, err := ss.User().Save(&u1); err == nil { _, err = ss.User().Save(&u1)
t.Fatal("should be unique username") require.NotNil(t, err, "should be unique username")
}
for i := 0; i < 49; i++ { for i := 0; i < 49; i++ {
u := model.User{ u := model.User{
Email: MakeEmail(), Email: MakeEmail(),
Username: model.NewId(), Username: model.NewId(),
} }
if _, err := ss.User().Save(&u); err != nil { _, err = ss.User().Save(&u)
t.Fatal("couldn't save item", err) require.Nil(t, err, "couldn't save item")
}
defer func() { require.Nil(t, ss.User().PermanentDelete(u.Id)) }() defer func() { require.Nil(t, ss.User().PermanentDelete(u.Id)) }()
_, err := ss.Team().SaveMember(&model.TeamMember{TeamId: teamId, UserId: u.Id}, maxUsersPerTeam) _, err = ss.Team().SaveMember(&model.TeamMember{TeamId: teamId, UserId: u.Id}, maxUsersPerTeam)
require.Nil(t, err) require.Nil(t, err)
} }
u2.Id = "" u2.Id = ""
u2.Email = MakeEmail() u2.Email = MakeEmail()
u2.Username = model.NewId() u2.Username = model.NewId()
if _, err := ss.User().Save(&u2); err != nil { _, err = ss.User().Save(&u2)
t.Fatal("couldn't save item", err) require.Nil(t, err, "couldn't save item")
}
defer func() { require.Nil(t, ss.User().PermanentDelete(u2.Id)) }() defer func() { require.Nil(t, ss.User().PermanentDelete(u2.Id)) }()
if _, err := ss.Team().SaveMember(&model.TeamMember{TeamId: teamId, UserId: u1.Id}, maxUsersPerTeam); err == nil { _, err = ss.Team().SaveMember(&model.TeamMember{TeamId: teamId, UserId: u1.Id}, maxUsersPerTeam)
t.Fatal("should be the limit") require.NotNil(t, err, "should be the limit")
}
} }
func testUserStoreUpdate(t *testing.T, ss store.Store) { func testUserStoreUpdate(t *testing.T, ss store.Store) {
@@ -170,26 +165,22 @@ func testUserStoreUpdate(t *testing.T, ss store.Store) {
_, err = ss.Team().SaveMember(&model.TeamMember{TeamId: model.NewId(), UserId: u2.Id}, -1) _, err = ss.Team().SaveMember(&model.TeamMember{TeamId: model.NewId(), UserId: u2.Id}, -1)
require.Nil(t, err) require.Nil(t, err)
if _, err = ss.User().Update(u1, false); err != nil { _, err = ss.User().Update(u1, false)
t.Fatal(err) require.Nil(t, err)
}
missing := &model.User{} missing := &model.User{}
if _, err = ss.User().Update(missing, false); err == nil { _, err = ss.User().Update(missing, false)
t.Fatal("Update should have failed because of missing key") require.NotNil(t, err, "Update should have failed because of missing key")
}
newId := &model.User{ newId := &model.User{
Id: model.NewId(), Id: model.NewId(),
} }
if _, err = ss.User().Update(newId, false); err == nil { _, err = ss.User().Update(newId, false)
t.Fatal("Update should have failed because id change") require.NotNil(t, err, "Update should have failed because id change")
}
u2.Email = MakeEmail() u2.Email = MakeEmail()
if _, err = ss.User().Update(u2, false); err == nil { _, err = ss.User().Update(u2, false)
t.Fatal("Update should have failed because you can't modify AD/LDAP fields") require.NotNil(t, err, "Update should have failed because you can't modify AD/LDAP fields")
}
u3 := &model.User{ u3 := &model.User{
Email: MakeEmail(), Email: MakeEmail(),
@@ -203,28 +194,17 @@ func testUserStoreUpdate(t *testing.T, ss store.Store) {
require.Nil(t, err) require.Nil(t, err)
u3.Email = MakeEmail() u3.Email = MakeEmail()
if userUpdate, err := ss.User().Update(u3, false); err != nil { userUpdate, err := ss.User().Update(u3, false)
t.Fatal("Update should not have failed") require.Nil(t, err, "Update should not have failed")
} else { assert.Equal(t, oldEmail, userUpdate.New.Email, "Email should not have been updated as the update is not trusted")
newUser := userUpdate.New
if newUser.Email != oldEmail {
t.Fatal("Email should not have been updated as the update is not trusted")
}
}
u3.Email = MakeEmail() u3.Email = MakeEmail()
if userUpdate, err := ss.User().Update(u3, true); err != nil { userUpdate, err = ss.User().Update(u3, true)
t.Fatal("Update should not have failed") require.Nil(t, err, "Update should not have failed")
} else { assert.NotEqual(t, oldEmail, userUpdate.New.Email, "Email should have been updated as the update is trusted")
newUser := userUpdate.New
if newUser.Email == oldEmail {
t.Fatal("Email should have been updated as the update is trusted")
}
}
if err := ss.User().UpdateLastPictureUpdate(u1.Id); err != nil { err = ss.User().UpdateLastPictureUpdate(u1.Id)
t.Fatal("Update should not have failed") require.Nil(t, err, "Update should not have failed")
}
} }
func testUserStoreUpdateUpdateAt(t *testing.T, ss store.Store) { func testUserStoreUpdateUpdateAt(t *testing.T, ss store.Store) {
@@ -236,16 +216,12 @@ func testUserStoreUpdateUpdateAt(t *testing.T, ss store.Store) {
_, err = ss.Team().SaveMember(&model.TeamMember{TeamId: model.NewId(), UserId: u1.Id}, -1) _, err = ss.Team().SaveMember(&model.TeamMember{TeamId: model.NewId(), UserId: u1.Id}, -1)
require.Nil(t, err) require.Nil(t, err)
if _, err = ss.User().UpdateUpdateAt(u1.Id); err != nil { _, err = ss.User().UpdateUpdateAt(u1.Id)
t.Fatal(err) require.Nil(t, err)
}
user, err := ss.User().Get(u1.Id) user, err := ss.User().Get(u1.Id)
require.Nil(t, err) require.Nil(t, err)
if user.UpdateAt <= u1.UpdateAt { require.Less(t, u1.UpdateAt, user.UpdateAt, "UpdateAt not updated correctly")
t.Fatal("UpdateAt not updated correctly")
}
} }
func testUserStoreUpdateFailedPasswordAttempts(t *testing.T, ss store.Store) { func testUserStoreUpdateFailedPasswordAttempts(t *testing.T, ss store.Store) {
@@ -257,15 +233,12 @@ func testUserStoreUpdateFailedPasswordAttempts(t *testing.T, ss store.Store) {
_, err = ss.Team().SaveMember(&model.TeamMember{TeamId: model.NewId(), UserId: u1.Id}, -1) _, err = ss.Team().SaveMember(&model.TeamMember{TeamId: model.NewId(), UserId: u1.Id}, -1)
require.Nil(t, err) require.Nil(t, err)
if err = ss.User().UpdateFailedPasswordAttempts(u1.Id, 3); err != nil { err = ss.User().UpdateFailedPasswordAttempts(u1.Id, 3)
t.Fatal(err) require.Nil(t, err)
}
user, err := ss.User().Get(u1.Id) user, err := ss.User().Get(u1.Id)
require.Nil(t, err) require.Nil(t, err)
if user.FailedAttempts != 3 { require.Equal(t, 3, user.FailedAttempts, "FailedAttempts not updated correctly")
t.Fatal("FailedAttempts not updated correctly")
}
} }
func testUserStoreGet(t *testing.T, ss store.Store) { func testUserStoreGet(t *testing.T, ss store.Store) {
@@ -1448,7 +1421,7 @@ func testUserStoreGetProfileByGroupChannelIdsForUser(t *testing.T, ss store.Stor
users, ok := res[channelId] users, ok := res[channelId]
require.True(t, ok) require.True(t, ok)
userIds := []string{} var userIds []string
for _, user := range users { for _, user := range users {
userIds = append(userIds, user.Id) userIds = append(userIds, user.Id)
} }
@@ -1901,17 +1874,12 @@ func testUserStoreUpdatePassword(t *testing.T, ss store.Store) {
hashedPassword := model.HashPassword("newpwd") hashedPassword := model.HashPassword("newpwd")
if err := ss.User().UpdatePassword(u1.Id, hashedPassword); err != nil { err = ss.User().UpdatePassword(u1.Id, hashedPassword)
t.Fatal(err) require.Nil(t, err)
}
if user, err := ss.User().GetByEmail(u1.Email); err != nil { user, err := ss.User().GetByEmail(u1.Email)
t.Fatal(err) require.Nil(t, err)
} else { require.Equal(t, user.Password, hashedPassword, "Password was not updated correctly")
if user.Password != hashedPassword {
t.Fatal("Password was not updated correctly")
}
}
} }
func testUserStoreDelete(t *testing.T, ss store.Store) { func testUserStoreDelete(t *testing.T, ss store.Store) {
@@ -1923,9 +1891,8 @@ func testUserStoreDelete(t *testing.T, ss store.Store) {
_, err = ss.Team().SaveMember(&model.TeamMember{TeamId: model.NewId(), UserId: u1.Id}, -1) _, err = ss.Team().SaveMember(&model.TeamMember{TeamId: model.NewId(), UserId: u1.Id}, -1)
require.Nil(t, err) require.Nil(t, err)
if err := ss.User().PermanentDelete(u1.Id); err != nil { err = ss.User().PermanentDelete(u1.Id)
t.Fatal(err) require.Nil(t, err)
}
} }
func testUserStoreUpdateAuthData(t *testing.T, ss store.Store) { func testUserStoreUpdateAuthData(t *testing.T, ss store.Store) {
@@ -1945,19 +1912,11 @@ func testUserStoreUpdateAuthData(t *testing.T, ss store.Store) {
_, err = ss.User().UpdateAuthData(u1.Id, service, &authData, "", true) _, err = ss.User().UpdateAuthData(u1.Id, service, &authData, "", true)
require.Nil(t, err) require.Nil(t, err)
if user, err := ss.User().GetByEmail(u1.Email); err != nil { user, err := ss.User().GetByEmail(u1.Email)
t.Fatal(err) require.Nil(t, err)
} else { require.Equal(t, service, user.AuthService, "AuthService was not updated correctly")
if user.AuthService != service { require.Equal(t, authData, *user.AuthData, "AuthData was not updated correctly")
t.Fatal("AuthService was not updated correctly") require.Equal(t, "", user.Password, "Password was not cleared properly")
}
if *user.AuthData != authData {
t.Fatal("AuthData was not updated correctly")
}
if user.Password != "" {
t.Fatal("Password was not cleared properly")
}
}
} }
func testUserUnreadCount(t *testing.T, ss store.Store) { func testUserUnreadCount(t *testing.T, ss store.Store) {
@@ -1993,9 +1952,8 @@ func testUserUnreadCount(t *testing.T, ss store.Store) {
_, err = ss.Team().SaveMember(&model.TeamMember{TeamId: teamId, UserId: u2.Id}, -1) _, err = ss.Team().SaveMember(&model.TeamMember{TeamId: teamId, UserId: u2.Id}, -1)
require.Nil(t, err) require.Nil(t, err)
if _, channelErr := ss.Channel().Save(&c1, -1); err != nil { _, err = ss.Channel().Save(&c1, -1)
t.Fatal("couldn't save item", channelErr) require.Nil(t, err, "couldn't save item")
}
m1 := model.ChannelMember{} m1 := model.ChannelMember{}
m1.ChannelId = c1.Id m1.ChannelId = c1.Id
@@ -2013,9 +1971,8 @@ func testUserUnreadCount(t *testing.T, ss store.Store) {
m1.ChannelId = c2.Id m1.ChannelId = c2.Id
m2.ChannelId = c2.Id m2.ChannelId = c2.Id
if _, err = ss.Channel().SaveDirectChannel(&c2, &m1, &m2); err != nil { _, err = ss.Channel().SaveDirectChannel(&c2, &m1, &m2)
t.Fatal("couldn't save direct channel", err) require.Nil(t, err, "couldn't save direct channel")
}
p1 := model.Post{} p1 := model.Post{}
p1.ChannelId = c1.Id p1.ChannelId = c1.Id
@@ -2051,21 +2008,15 @@ func testUserUnreadCount(t *testing.T, ss store.Store) {
badge, unreadCountErr := ss.User().GetUnreadCount(u2.Id) badge, unreadCountErr := ss.User().GetUnreadCount(u2.Id)
require.Nil(t, unreadCountErr) require.Nil(t, unreadCountErr)
if badge != 3 { require.Equal(t, int64(3), badge, "should have 3 unread messages")
t.Fatal("should have 3 unread messages")
}
badge, unreadCountErr = ss.User().GetUnreadCountForChannel(u2.Id, c1.Id) badge, unreadCountErr = ss.User().GetUnreadCountForChannel(u2.Id, c1.Id)
require.Nil(t, unreadCountErr) require.Nil(t, unreadCountErr)
if badge != 1 { require.Equal(t, int64(1), badge, "should have 1 unread messages for that channel")
t.Fatal("should have 1 unread messages for that channel")
}
badge, unreadCountErr = ss.User().GetUnreadCountForChannel(u2.Id, c2.Id) badge, unreadCountErr = ss.User().GetUnreadCountForChannel(u2.Id, c2.Id)
require.Nil(t, unreadCountErr) require.Nil(t, unreadCountErr)
if badge != 2 { require.Equal(t, int64(2), badge, "should have 2 unread messages for that channel")
t.Fatal("should have 2 unread messages for that channel")
}
} }
func testUserStoreUpdateMfaSecret(t *testing.T, ss store.Store) { func testUserStoreUpdateMfaSecret(t *testing.T, ss store.Store) {
@@ -2075,14 +2026,12 @@ func testUserStoreUpdateMfaSecret(t *testing.T, ss store.Store) {
require.Nil(t, err) require.Nil(t, err)
defer func() { require.Nil(t, ss.User().PermanentDelete(u1.Id)) }() defer func() { require.Nil(t, ss.User().PermanentDelete(u1.Id)) }()
if err = ss.User().UpdateMfaSecret(u1.Id, "12345"); err != nil { err = ss.User().UpdateMfaSecret(u1.Id, "12345")
t.Fatal(err) require.Nil(t, err)
}
// should pass, no update will occur though // should pass, no update will occur though
if err = ss.User().UpdateMfaSecret("junk", "12345"); err != nil { err = ss.User().UpdateMfaSecret("junk", "12345")
t.Fatal(err) require.Nil(t, err)
}
} }
func testUserStoreUpdateMfaActive(t *testing.T, ss store.Store) { func testUserStoreUpdateMfaActive(t *testing.T, ss store.Store) {
@@ -2094,18 +2043,15 @@ func testUserStoreUpdateMfaActive(t *testing.T, ss store.Store) {
time.Sleep(100 * time.Millisecond) time.Sleep(100 * time.Millisecond)
if err = ss.User().UpdateMfaActive(u1.Id, true); err != nil { err = ss.User().UpdateMfaActive(u1.Id, true)
t.Fatal(err) require.Nil(t, err)
}
if err = ss.User().UpdateMfaActive(u1.Id, false); err != nil { err = ss.User().UpdateMfaActive(u1.Id, false)
t.Fatal(err) require.Nil(t, err)
}
// should pass, no update will occur though // should pass, no update will occur though
if err = ss.User().UpdateMfaActive("junk", true); err != nil { err = ss.User().UpdateMfaActive("junk", true)
t.Fatal(err) require.Nil(t, err)
}
} }
func testUserStoreGetRecentlyActiveUsersForTeam(t *testing.T, ss store.Store, s SqlSupplier) { func testUserStoreGetRecentlyActiveUsersForTeam(t *testing.T, ss store.Store, s SqlSupplier) {
@@ -3516,9 +3462,7 @@ func testUserStoreAnalyticsGetInactiveUsersCount(t *testing.T, ss store.Store) {
defer func() { require.Nil(t, ss.User().PermanentDelete(u1.Id)) }() defer func() { require.Nil(t, ss.User().PermanentDelete(u1.Id)) }()
count, err := ss.User().AnalyticsGetInactiveUsersCount() count, err := ss.User().AnalyticsGetInactiveUsersCount()
if err != nil { require.Nil(t, err)
t.Fatal(err)
}
u2 := &model.User{} u2 := &model.User{}
u2.Email = MakeEmail() u2.Email = MakeEmail()
@@ -3528,22 +3472,13 @@ func testUserStoreAnalyticsGetInactiveUsersCount(t *testing.T, ss store.Store) {
defer func() { require.Nil(t, ss.User().PermanentDelete(u2.Id)) }() defer func() { require.Nil(t, ss.User().PermanentDelete(u2.Id)) }()
newCount, err := ss.User().AnalyticsGetInactiveUsersCount() newCount, err := ss.User().AnalyticsGetInactiveUsersCount()
if err != nil { require.Nil(t, err)
t.Fatal(err) require.Equal(t, count, newCount-1, "Expected 1 more inactive users but found otherwise.")
}
if count != newCount-1 {
t.Fatal("Expected 1 more inactive users but found otherwise.", count, newCount)
}
} }
func testUserStoreAnalyticsGetSystemAdminCount(t *testing.T, ss store.Store) { func testUserStoreAnalyticsGetSystemAdminCount(t *testing.T, ss store.Store) {
var countBefore int64 countBefore, err := ss.User().AnalyticsGetSystemAdminCount()
if result, err := ss.User().AnalyticsGetSystemAdminCount(); err != nil { require.Nil(t, err)
t.Fatal(err)
} else {
countBefore = result
}
u1 := model.User{} u1 := model.User{}
u1.Email = MakeEmail() u1.Email = MakeEmail()
@@ -3554,24 +3489,19 @@ func testUserStoreAnalyticsGetSystemAdminCount(t *testing.T, ss store.Store) {
u2.Email = MakeEmail() u2.Email = MakeEmail()
u2.Username = model.NewId() u2.Username = model.NewId()
if _, err := ss.User().Save(&u1); err != nil { _, err = ss.User().Save(&u1)
t.Fatal("couldn't save user", err) require.Nil(t, err, "couldn't save user")
}
defer func() { require.Nil(t, ss.User().PermanentDelete(u1.Id)) }() defer func() { require.Nil(t, ss.User().PermanentDelete(u1.Id)) }()
if _, err := ss.User().Save(&u2); err != nil { _, err = ss.User().Save(&u2)
t.Fatal("couldn't save user", err) require.Nil(t, err, "couldn't save user")
}
defer func() { require.Nil(t, ss.User().PermanentDelete(u2.Id)) }() defer func() { require.Nil(t, ss.User().PermanentDelete(u2.Id)) }()
if result, err := ss.User().AnalyticsGetSystemAdminCount(); err != nil { result, err := ss.User().AnalyticsGetSystemAdminCount()
t.Fatal(err) require.Nil(t, err)
} else { require.Equal(t, countBefore+1, result, "Did not get the expected number of system admins.")
// We expect to find 1 more system admin than there was at the start of this test function.
if count := result; count != countBefore+1 {
t.Fatal("Did not get the expected number of system admins. Expected, got: ", countBefore+1, count)
}
}
} }
func testUserStoreGetProfilesNotInTeam(t *testing.T, ss store.Store) { func testUserStoreGetProfilesNotInTeam(t *testing.T, ss store.Store) {
@@ -4048,9 +3978,8 @@ func testUserStoreGetTeamGroupUsers(t *testing.T, ss store.Store) {
require.NotNil(t, user) require.NotNil(t, user)
testUsers = append(testUsers, user) testUsers = append(testUsers, user)
} }
userGroupA := testUsers[0] require.Len(t, testUsers, 3, "testUsers length doesn't meet required length")
userGroupB := testUsers[1] userGroupA, userGroupB, userNoGroup := testUsers[0], testUsers[1], testUsers[2]
userNoGroup := testUsers[2]
// add non-group-member to the team (to prove that the query isn't just returning all members) // add non-group-member to the team (to prove that the query isn't just returning all members)
_, err = ss.Team().SaveMember(&model.TeamMember{ _, err = ss.Team().SaveMember(&model.TeamMember{
@@ -4075,8 +4004,8 @@ func testUserStoreGetTeamGroupUsers(t *testing.T, ss store.Store) {
require.NotNil(t, group) require.NotNil(t, group)
testGroups = append(testGroups, group) testGroups = append(testGroups, group)
} }
groupA := testGroups[0] require.Len(t, testGroups, 2, "testGroups length doesn't meet required length")
groupB := testGroups[1] groupA, groupB := testGroups[0], testGroups[1]
// add members to groups // add members to groups
_, err = ss.Group().UpsertMember(groupA.Id, userGroupA.Id) _, err = ss.Group().UpsertMember(groupA.Id, userGroupA.Id)
@@ -4169,9 +4098,8 @@ func testUserStoreGetChannelGroupUsers(t *testing.T, ss store.Store) {
require.NotNil(t, user) require.NotNil(t, user)
testUsers = append(testUsers, user) testUsers = append(testUsers, user)
} }
userGroupA := testUsers[0] require.Len(t, testUsers, 3, "testUsers length doesn't meet required length")
userGroupB := testUsers[1] userGroupA, userGroupB, userNoGroup := testUsers[0], testUsers[1], testUsers[2]
userNoGroup := testUsers[2]
// add non-group-member to the channel (to prove that the query isn't just returning all members) // add non-group-member to the channel (to prove that the query isn't just returning all members)
_, err = ss.Channel().SaveMember(&model.ChannelMember{ _, err = ss.Channel().SaveMember(&model.ChannelMember{
@@ -4196,8 +4124,8 @@ func testUserStoreGetChannelGroupUsers(t *testing.T, ss store.Store) {
require.NotNil(t, group) require.NotNil(t, group)
testGroups = append(testGroups, group) testGroups = append(testGroups, group)
} }
groupA := testGroups[0] require.Len(t, testGroups, 2, "testGroups length doesn't meet required length")
groupB := testGroups[1] groupA, groupB := testGroups[0], testGroups[1]
// add members to groups // add members to groups
_, err = ss.Group().UpsertMember(groupA.Id, userGroupA.Id) _, err = ss.Group().UpsertMember(groupA.Id, userGroupA.Id)