Skip to content

Instantly share code, notes, and snippets.

@andizzle
Created April 3, 2018 01:06
Show Gist options
  • Save andizzle/d8273b8548b7f5c625194dcab5f2ec5e to your computer and use it in GitHub Desktop.
Save andizzle/d8273b8548b7f5c625194dcab5f2ec5e to your computer and use it in GitHub Desktop.
package testing
import (
"context"
"database/sql"
"log"
"os"
"sync"
txdb "github.com/DATA-DOG/go-txdb"
"github.com/DATA-DOG/godog"
"github.com/opensimsim/api-v3/pkg/foundation/kernel"
"github.com/opensimsim/utilities/testing"
)
var txdbRegisterOnce sync.Once
func init() {
kernel.ParseFlags()
}
func Boot() {
kernel.Config = kernel.LoadConfig()
appCfg := kernel.Config.Sub("app")
appCfg.Set("hide_banner", true)
kernel.App = kernel.InitApp(appCfg)
kernel.DB = kernel.InitDB(kernel.Config.Sub("database"), "testing")
var cfg kernel.DBCfg
err := kernel.Config.Sub("database.testing").Unmarshal(&cfg)
if err != nil {
log.Fatalf("unable to decode database configuration, %v", err)
}
txdbRegisterOnce.Do(func() {
txdb.Register("txdb", cfg.Driver, cfg.ConnectionOpenString()[0])
})
}
func Setup(fn ...func(featureCtx *testing.APIFeature)) int {
format := "progress"
for _, arg := range os.Args[1:] {
if arg == "-test.v=true" { // go test transforms -v option
format = "pretty"
break
}
}
Boot()
kernel.Boot()
kernel.LoadRoutes()
var featureContext *testing.APIFeature
status := godog.RunWithOptions("godog", func(s *godog.Suite) {
featureContext = testing.FeatureContext(s, kernel.App.ServeHTTP)
featureContext.Suite.Step("reload config", func() error {
kernel.Config = kernel.LoadConfig()
return nil
})
featureContext.Suite.BeforeScenario(func(interface{}) {
db, err := sql.Open("txdb", "standard connection")
if err != nil {
panic(err)
}
kernel.SetDB(db, "testing")
})
featureContext.Suite.AfterScenario(func(interface{}, error) {
err := kernel.DB(context.Background(), "testing").Close()
if err != nil {
log.Println(err)
}
})
if len(fn) > 0 {
fn[0](featureContext)
}
}, godog.Options{
Format: format,
Paths: []string{"features"},
})
return status
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment