| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- // Copyright 2021 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package unittest
-
- import (
- "fmt"
-
- "code.gitea.io/gitea/models/db"
- "code.gitea.io/gitea/modules/auth/password/hash"
- "code.gitea.io/gitea/modules/setting"
- "code.gitea.io/gitea/modules/util"
-
- "xorm.io/xorm"
- "xorm.io/xorm/schemas"
- )
-
- type FixturesLoader interface {
- Load() error
- }
-
- var fixturesLoader FixturesLoader
-
- // GetXORMEngine gets the XORM engine
- func GetXORMEngine() (x *xorm.Engine) {
- return db.GetXORMEngineForTesting()
- }
-
- func loadFixtureResetSeqPgsql(e *xorm.Engine) error {
- results, err := e.QueryString(`SELECT 'SELECT SETVAL(' ||
- quote_literal(quote_ident(PGT.schemaname) || '.' || quote_ident(S.relname)) ||
- ', COALESCE(MAX(' ||quote_ident(C.attname)|| '), 1) ) FROM ' ||
- quote_ident(PGT.schemaname)|| '.'||quote_ident(T.relname)|| ';'
- FROM pg_class AS S,
- pg_depend AS D,
- pg_class AS T,
- pg_attribute AS C,
- pg_tables AS PGT
- WHERE S.relkind = 'S'
- AND S.oid = D.objid
- AND D.refobjid = T.oid
- AND D.refobjid = C.attrelid
- AND D.refobjsubid = C.attnum
- AND T.relname = PGT.tablename
- ORDER BY S.relname;`)
- if err != nil {
- return fmt.Errorf("failed to generate sequence update: %w", err)
- }
- for _, r := range results {
- for _, value := range r {
- _, err = e.Exec(value)
- if err != nil {
- return fmt.Errorf("failed to update sequence: %s, error: %w", value, err)
- }
- }
- }
- return nil
- }
-
- // InitFixtures initialize test fixtures for a test database
- func InitFixtures(opts FixturesOptions, engine ...*xorm.Engine) (err error) {
- xormEngine := util.IfZero(util.OptionalArg(engine), GetXORMEngine())
- fixturesLoader, err = NewFixturesLoader(xormEngine, opts)
- // fixturesLoader = NewFixturesLoaderVendor(xormEngine, opts)
-
- // register the dummy hash algorithm function used in the test fixtures
- _ = hash.Register("dummy", hash.NewDummyHasher)
- setting.PasswordHashAlgo, _ = hash.SetDefaultPasswordHashAlgorithm("dummy")
- return err
- }
-
- // LoadFixtures load fixtures for a test database
- func LoadFixtures() error {
- if err := fixturesLoader.Load(); err != nil {
- return err
- }
- // Now if we're running postgres we need to tell it to update the sequences
- if GetXORMEngine().Dialect().URI().DBType == schemas.POSTGRES {
- if err := loadFixtureResetSeqPgsql(GetXORMEngine()); err != nil {
- return err
- }
- }
- return nil
- }
|