code.gitea.io/gitea@v1.21.7/models/migrations/v1_15/v182_test.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package v1_15 //nolint 5 6 import ( 7 "testing" 8 9 "code.gitea.io/gitea/models/migrations/base" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func Test_AddIssueResourceIndexTable(t *testing.T) { 15 // Create the models used in the migration 16 type Issue struct { 17 ID int64 `xorm:"pk autoincr"` 18 RepoID int64 `xorm:"UNIQUE(s)"` 19 Index int64 `xorm:"UNIQUE(s)"` 20 } 21 22 // Prepare and load the testing database 23 x, deferable := base.PrepareTestEnv(t, 0, new(Issue)) 24 if x == nil || t.Failed() { 25 defer deferable() 26 return 27 } 28 defer deferable() 29 30 // Run the migration 31 if err := AddIssueResourceIndexTable(x); err != nil { 32 assert.NoError(t, err) 33 return 34 } 35 36 type ResourceIndex struct { 37 GroupID int64 `xorm:"pk"` 38 MaxIndex int64 `xorm:"index"` 39 } 40 41 start := 0 42 const batchSize = 1000 43 for { 44 indexes := make([]ResourceIndex, 0, batchSize) 45 err := x.Table("issue_index").Limit(batchSize, start).Find(&indexes) 46 assert.NoError(t, err) 47 48 for _, idx := range indexes { 49 var maxIndex int 50 has, err := x.SQL("SELECT max(`index`) FROM issue WHERE repo_id = ?", idx.GroupID).Get(&maxIndex) 51 assert.NoError(t, err) 52 assert.True(t, has) 53 assert.EqualValues(t, maxIndex, idx.MaxIndex) 54 } 55 if len(indexes) < batchSize { 56 break 57 } 58 start += len(indexes) 59 } 60 }