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  }