From c5be9605a214a74fe05d18cf708c607a6764d36f Mon Sep 17 00:00:00 2001 From: Misi Date: Fri, 9 Sep 2022 18:43:14 +0200 Subject: [PATCH] Chore: Use TimeNow instead of time.Now in user sql store to make it testable (#54983) --- pkg/services/sqlstore/org_users_test.go | 16 +++------------- pkg/services/sqlstore/time.go | 16 ++++++++++++++++ pkg/services/sqlstore/user.go | 18 +++++++++--------- 3 files changed, 28 insertions(+), 22 deletions(-) create mode 100644 pkg/services/sqlstore/time.go diff --git a/pkg/services/sqlstore/org_users_test.go b/pkg/services/sqlstore/org_users_test.go index 76c31e0667d..b85fb0eea2d 100644 --- a/pkg/services/sqlstore/org_users_test.go +++ b/pkg/services/sqlstore/org_users_test.go @@ -86,8 +86,9 @@ func TestSQLStore_GetOrgUsers(t *testing.T) { func TestSQLStore_GetOrgUsers_PopulatesCorrectly(t *testing.T) { // The millisecond part is not stored in the DB - constNow := time.Now().UTC().Truncate(time.Second) - defer mockTimeNow(constNow)() + constNow := time.Date(2022, 8, 17, 20, 34, 58, 0, time.UTC) + MockTimeNow(constNow) + defer ResetTimeNow() store := InitTestDB(t, InitTestDBOpt{}) _, err := store.CreateUser(context.Background(), user.CreateUserCommand{ @@ -334,14 +335,3 @@ func hasWildcardScope(user *user.SignedInUser, action string) bool { } return false } - -func mockTimeNow(constTime time.Time) func() { - timeNow = func() time.Time { - return constTime.Truncate(time.Second) - } - return resetTimeNow -} - -func resetTimeNow() { - timeNow = time.Now -} diff --git a/pkg/services/sqlstore/time.go b/pkg/services/sqlstore/time.go new file mode 100644 index 00000000000..32cf2cf737d --- /dev/null +++ b/pkg/services/sqlstore/time.go @@ -0,0 +1,16 @@ +package sqlstore + +import "time" + +// TimeNow makes it possible to test usage of time +var TimeNow = time.Now + +func MockTimeNow(constTime time.Time) { + TimeNow = func() time.Time { + return constTime + } +} + +func ResetTimeNow() { + TimeNow = time.Now +} diff --git a/pkg/services/sqlstore/user.go b/pkg/services/sqlstore/user.go index c89a79ea71b..a1707d21fbd 100644 --- a/pkg/services/sqlstore/user.go +++ b/pkg/services/sqlstore/user.go @@ -114,9 +114,9 @@ func (ss *SQLStore) createUser(ctx context.Context, sess *DBSession, args user.C IsDisabled: args.IsDisabled, OrgID: orgID, EmailVerified: args.EmailVerified, - Created: time.Now(), - Updated: time.Now(), - LastSeenAt: time.Now().AddDate(-10, 0, 0), + Created: TimeNow(), + Updated: TimeNow(), + LastSeenAt: TimeNow().AddDate(-10, 0, 0), IsServiceAccount: args.IsServiceAccount, } @@ -159,8 +159,8 @@ func (ss *SQLStore) createUser(ctx context.Context, sess *DBSession, args user.C OrgId: orgID, UserId: usr.ID, Role: org.RoleAdmin, - Created: time.Now(), - Updated: time.Now(), + Created: TimeNow(), + Updated: TimeNow(), } if ss.Cfg.AutoAssignOrg && !usr.IsAdmin { @@ -314,7 +314,7 @@ func (ss *SQLStore) UpdateUser(ctx context.Context, cmd *models.UpdateUserComman Email: cmd.Email, Login: cmd.Login, Theme: cmd.Theme, - Updated: time.Now(), + Updated: TimeNow(), } if _, err := sess.ID(cmd.UserId).Where(notServiceAccountFilter(ss)).Update(&user); err != nil { @@ -343,7 +343,7 @@ func (ss *SQLStore) ChangeUserPassword(ctx context.Context, cmd *models.ChangeUs return ss.WithTransactionalDbSession(ctx, func(sess *DBSession) error { user := user.User{ Password: cmd.NewPassword, - Updated: time.Now(), + Updated: TimeNow(), } _, err := sess.ID(cmd.UserId).Where(notServiceAccountFilter(ss)).Update(&user) @@ -355,7 +355,7 @@ func (ss *SQLStore) UpdateUserLastSeenAt(ctx context.Context, cmd *models.Update return ss.WithTransactionalDbSession(ctx, func(sess *DBSession) error { user := user.User{ ID: cmd.UserId, - LastSeenAt: time.Now(), + LastSeenAt: TimeNow(), } _, err := sess.ID(cmd.UserId).Update(&user) @@ -849,7 +849,7 @@ func (ss *SQLStore) SetUserHelpFlag(ctx context.Context, cmd *models.SetUserHelp user := user.User{ ID: cmd.UserId, HelpFlags1: cmd.HelpFlags1, - Updated: time.Now(), + Updated: TimeNow(), } _, err := sess.ID(cmd.UserId).Cols("help_flags1").Update(&user)