code.gitea.io/gitea@v1.22.3/services/doctor/dbconsistency_test.go (about)

     1  // Copyright 2024 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package doctor
     5  
     6  import (
     7  	"slices"
     8  	"testing"
     9  
    10  	"code.gitea.io/gitea/models/auth"
    11  	"code.gitea.io/gitea/models/db"
    12  	"code.gitea.io/gitea/models/unittest"
    13  	"code.gitea.io/gitea/models/user"
    14  	"code.gitea.io/gitea/modules/log"
    15  
    16  	"github.com/stretchr/testify/assert"
    17  )
    18  
    19  func TestConsistencyCheck(t *testing.T) {
    20  	checks := prepareDBConsistencyChecks()
    21  	idx := slices.IndexFunc(checks, func(check consistencyCheck) bool {
    22  		return check.Name == "Orphaned OAuth2Application without existing User"
    23  	})
    24  	if !assert.NotEqual(t, -1, idx) {
    25  		return
    26  	}
    27  
    28  	_ = db.TruncateBeans(db.DefaultContext, &auth.OAuth2Application{}, &user.User{})
    29  	_ = db.TruncateBeans(db.DefaultContext, &auth.OAuth2Application{}, &auth.OAuth2Application{})
    30  
    31  	err := db.Insert(db.DefaultContext, &user.User{ID: 1})
    32  	assert.NoError(t, err)
    33  	err = db.Insert(db.DefaultContext, &auth.OAuth2Application{Name: "test-oauth2-app-1", ClientID: "client-id-1"})
    34  	assert.NoError(t, err)
    35  	err = db.Insert(db.DefaultContext, &auth.OAuth2Application{Name: "test-oauth2-app-2", ClientID: "client-id-2", UID: 1})
    36  	assert.NoError(t, err)
    37  	err = db.Insert(db.DefaultContext, &auth.OAuth2Application{Name: "test-oauth2-app-3", ClientID: "client-id-3", UID: 99999999})
    38  	assert.NoError(t, err)
    39  
    40  	unittest.AssertExistsAndLoadBean(t, &auth.OAuth2Application{ClientID: "client-id-1"})
    41  	unittest.AssertExistsAndLoadBean(t, &auth.OAuth2Application{ClientID: "client-id-2"})
    42  	unittest.AssertExistsAndLoadBean(t, &auth.OAuth2Application{ClientID: "client-id-3"})
    43  
    44  	oauth2AppCheck := checks[idx]
    45  	err = oauth2AppCheck.Run(db.DefaultContext, log.GetManager().GetLogger(log.DEFAULT), true)
    46  	assert.NoError(t, err)
    47  
    48  	unittest.AssertExistsAndLoadBean(t, &auth.OAuth2Application{ClientID: "client-id-1"})
    49  	unittest.AssertExistsAndLoadBean(t, &auth.OAuth2Application{ClientID: "client-id-2"})
    50  	unittest.AssertNotExistsBean(t, &auth.OAuth2Application{ClientID: "client-id-3"})
    51  }