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  }