]> source.dussan.org Git - gitea.git/commitdiff
Fix GetInactiveUsers (#32540) main
authorLunny Xiao <xiaolunwen@gmail.com>
Thu, 21 Nov 2024 04:55:32 +0000 (20:55 -0800)
committerGitHub <noreply@github.com>
Thu, 21 Nov 2024 04:55:32 +0000 (04:55 +0000)
Fix #31480

models/fixtures/user.yml
models/user/user.go
models/user/user_test.go

index d7316e9b388c5ac9bd39de3b44380e69b5470042..b3bece5589c9b0f52c1e91e6da9e9f2c9fbb0028 100644 (file)
   repo_admin_change_team_access: false
   theme: ""
   keep_activity_private: false
+  created_unix: 1730468968
 
 -
   id: 10
index c1cb988e43dc9ed269fa19aea15d98d1de25795b..a2d9166291909dfd2e44d6b1ccca86b6096262de 100644 (file)
@@ -48,19 +48,19 @@ const (
        UserTypeIndividual UserType = iota // Historic reason to make it starts at 0.
 
        // UserTypeOrganization defines an organization
-       UserTypeOrganization
+       UserTypeOrganization // 1
 
        // UserTypeUserReserved reserves a (non-existing) user, i.e. to prevent a spam user from re-registering after being deleted, or to reserve the name until the user is actually created later on
-       UserTypeUserReserved
+       UserTypeUserReserved // 2
 
        // UserTypeOrganizationReserved reserves a (non-existing) organization, to be used in combination with UserTypeUserReserved
-       UserTypeOrganizationReserved
+       UserTypeOrganizationReserved // 3
 
        // UserTypeBot defines a bot user
-       UserTypeBot
+       UserTypeBot // 4
 
        // UserTypeRemoteUser defines a remote user for federated users
-       UserTypeRemoteUser
+       UserTypeRemoteUser // 5
 )
 
 const (
@@ -884,7 +884,13 @@ func UpdateUserCols(ctx context.Context, u *User, cols ...string) error {
 
 // GetInactiveUsers gets all inactive users
 func GetInactiveUsers(ctx context.Context, olderThan time.Duration) ([]*User, error) {
-       var cond builder.Cond = builder.Eq{"is_active": false}
+       cond := builder.And(
+               builder.Eq{"is_active": false},
+               builder.Or( // only plain user
+                       builder.Eq{"`type`": UserTypeIndividual},
+                       builder.Eq{"`type`": UserTypeUserReserved},
+               ),
+       )
 
        if olderThan > 0 {
                cond = cond.And(builder.Lt{"created_unix": time.Now().Add(-olderThan).Unix()})
index bc1abc64512c7e9929a6a40b1ff5cb75c2c6d2f5..6701be39a5536ccf2a6609e62b4d2db71a3643d0 100644 (file)
@@ -588,3 +588,17 @@ func TestDisabledUserFeatures(t *testing.T) {
                assert.True(t, user_model.IsFeatureDisabledWithLoginType(user, f))
        }
 }
+
+func TestGetInactiveUsers(t *testing.T) {
+       assert.NoError(t, unittest.PrepareTestDatabase())
+
+       // all inactive users
+       // user1's createdunix is 1730468968
+       users, err := user_model.GetInactiveUsers(db.DefaultContext, 0)
+       assert.NoError(t, err)
+       assert.Len(t, users, 1)
+       interval := time.Now().Unix() - 1730468968 + 3600*24
+       users, err = user_model.GetInactiveUsers(db.DefaultContext, time.Duration(interval*int64(time.Second)))
+       assert.NoError(t, err)
+       assert.Len(t, users, 0)
+}