[TESTS] tests.AddFixtures helper loads additional per-test fixtures
(cherry picked from commit 93a844dd13904c0ba1b7fd4a0a233002194a504b) (cherry picked from commit 6d6d1a121ce3fc5cf7cd92ad1a38be3bdcbf7088) (cherry picked from commit 8b101f2860dfbdfd99de71d30740c9e72e1cd9d5) (cherry picked from commit 3e56212d6d1bca0aecdc1f224c7d78287ef9d35d) (cherry picked from commit 4f619bc58583892c197ee2588ead929342336217)
This commit is contained in:
parent
e9aa373db5
commit
3380217da1
3 changed files with 30 additions and 0 deletions
|
@ -7,6 +7,7 @@ package unittest
|
|||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"code.gitea.io/gitea/models/db"
|
||||
|
@ -28,6 +29,16 @@ func GetXORMEngine(engine ...*xorm.Engine) (x *xorm.Engine) {
|
|||
return db.DefaultContext.(*db.Context).Engine().(*xorm.Engine)
|
||||
}
|
||||
|
||||
func OverrideFixtures(opts FixturesOptions, engine ...*xorm.Engine) func() {
|
||||
old := fixturesLoader
|
||||
if err := InitFixtures(opts, engine...); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return func() {
|
||||
fixturesLoader = old
|
||||
}
|
||||
}
|
||||
|
||||
// InitFixtures initialize test fixtures for a test database
|
||||
func InitFixtures(opts FixturesOptions, engine ...*xorm.Engine) (err error) {
|
||||
e := GetXORMEngine(engine...)
|
||||
|
@ -37,6 +48,12 @@ func InitFixtures(opts FixturesOptions, engine ...*xorm.Engine) (err error) {
|
|||
} else {
|
||||
fixtureOptionFiles = testfixtures.Files(opts.Files...)
|
||||
}
|
||||
var fixtureOptionDirs []func(*testfixtures.Loader) error
|
||||
if opts.Dirs != nil {
|
||||
for _, dir := range opts.Dirs {
|
||||
fixtureOptionDirs = append(fixtureOptionDirs, testfixtures.Directory(filepath.Join(opts.Base, dir)))
|
||||
}
|
||||
}
|
||||
dialect := "unknown"
|
||||
switch e.Dialect().URI().DBType {
|
||||
case schemas.POSTGRES:
|
||||
|
@ -57,6 +74,7 @@ func InitFixtures(opts FixturesOptions, engine ...*xorm.Engine) (err error) {
|
|||
testfixtures.DangerousSkipTestDatabaseCheck(),
|
||||
fixtureOptionFiles,
|
||||
}
|
||||
loaderOptions = append(loaderOptions, fixtureOptionDirs...)
|
||||
|
||||
if e.Dialect().URI().DBType == schemas.POSTGRES {
|
||||
loaderOptions = append(loaderOptions, testfixtures.SkipResetSequences())
|
||||
|
|
|
@ -198,6 +198,8 @@ func MainTest(m *testing.M, testOpts *TestOptions) {
|
|||
type FixturesOptions struct {
|
||||
Dir string
|
||||
Files []string
|
||||
Dirs []string
|
||||
Base string
|
||||
}
|
||||
|
||||
// CreateTestEngine creates a memory database and loads the fixture data from fixturesDir
|
||||
|
|
|
@ -264,3 +264,13 @@ func PrintCurrentTest(t testing.TB, skip ...int) func() {
|
|||
func Printf(format string, args ...any) {
|
||||
testlogger.Printf(format, args...)
|
||||
}
|
||||
|
||||
func AddFixtures(dirs ...string) func() {
|
||||
return unittest.OverrideFixtures(
|
||||
unittest.FixturesOptions{
|
||||
Dir: filepath.Join(filepath.Dir(setting.AppPath), "models/fixtures/"),
|
||||
Base: filepath.Dir(setting.AppPath),
|
||||
Dirs: dirs,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue