github.com/condensat/bank-core@v0.1.0/database/query/tests/db.go (about) 1 // Copyright 2020 Condensat Tech. All rights reserved. 2 // Use of this source code is governed by a MIT 3 // license that can be found in the LICENSE file. 4 5 package tests 6 7 import ( 8 "fmt" 9 "math/rand" 10 "reflect" 11 "sort" 12 13 "github.com/condensat/bank-core/database" 14 15 "github.com/jinzhu/gorm" 16 ) 17 18 func Setup(databaseName string, models []database.Model) database.Context { 19 options := database.Options{ 20 HostName: "mariadb", 21 Port: 3306, 22 User: "condensat", 23 Password: "condensat", 24 Database: "condensat", 25 EnableLogging: false, 26 } 27 if databaseName == options.Database { 28 panic("Wrong databaseName") 29 } 30 31 db := database.New(options) 32 gdb := db.DB().(*gorm.DB) 33 34 createDatabase := fmt.Sprintf("create database if not exists %s; use %s;", databaseName, databaseName) 35 gdb.Exec(createDatabase) 36 37 err := gdb.Exec(createDatabase).Error 38 if err != nil { 39 panic(err) 40 } 41 42 MigrateDatabase(db, models) 43 44 return db 45 } 46 47 func Teardown(db database.Context, databaseName string) { 48 gdb := db.DB().(*gorm.DB) 49 50 dropDatabase := fmt.Sprintf("drop database if exists %s", databaseName) 51 err := gdb.Exec(dropDatabase).Error 52 if err != nil { 53 panic(err) 54 } 55 } 56 57 func MigrateDatabase(db database.Context, models []database.Model) { 58 err := db.Migrate(models) 59 if err != nil { 60 panic(err) 61 } 62 } 63 64 func GetSortedTypeFileds(t reflect.Type) []string { 65 count := t.NumField() 66 result := make([]string, 0, count) 67 68 for i := 0; i < count; i++ { 69 field := gorm.TheNamingStrategy.Column(t.Field(i).Name) 70 result = append(result, field) 71 } 72 73 for i, field := range result { 74 result[i] = gorm.TheNamingStrategy.Column(field) 75 } 76 sort.Strings(result) 77 78 return result 79 } 80 81 var ( 82 letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") 83 ) 84 85 func RandSeq(n int) string { 86 b := make([]rune, n) 87 for i := range b { 88 b[i] = letters[rand.Intn(len(letters))] 89 } 90 return string(b) 91 }