2019-03-03 17:54:43 +01:00
package tests
import (
2019-03-05 18:55:47 +01:00
"database/sql"
2019-03-03 17:54:43 +01:00
"fmt"
"github.com/sub0Zero/go-sqlbuilder/generator"
2019-03-09 14:20:44 +01:00
"github.com/sub0Zero/go-sqlbuilder/sqlbuilder"
2019-03-05 18:55:47 +01:00
"github.com/sub0Zero/go-sqlbuilder/tests/.test_files/dvd_rental/dvds/model"
. "github.com/sub0Zero/go-sqlbuilder/tests/.test_files/dvd_rental/dvds/table"
2019-03-03 17:54:43 +01:00
"gotest.tools/assert"
2019-03-05 18:55:47 +01:00
"os"
2019-03-03 17:54:43 +01:00
"testing"
)
2019-03-05 18:55:47 +01:00
const (
2019-03-03 17:54:43 +01:00
folderPath = ".test_files/"
host = "localhost"
port = 5432
user = "postgres"
password = "postgres"
dbname = "dvd_rental"
2019-03-04 19:35:49 +01:00
schemaName = "dvds"
2019-03-03 17:54:43 +01:00
)
2019-03-05 18:55:47 +01:00
var connectString = fmt . Sprintf ( "host=%s port=%d user=%s " + "password=%s dbname=%s sslmode=disable" , host , port , user , password , dbname )
var db * sql . DB
2019-03-04 19:35:49 +01:00
//go:generate generator -db "host=localhost port=5432 user=postgres password=postgres dbname=dvd_rental sslmode=disable" -dbName dvd_rental -schema dvds -path .test_files
2019-03-03 17:54:43 +01:00
2019-03-05 18:55:47 +01:00
func TestMain ( m * testing . M ) {
fmt . Println ( "Begin" )
var err error
db , err = sql . Open ( "postgres" , connectString )
if err != nil {
panic ( "Failed to connect to test db" )
}
defer db . Close ( )
ret := m . Run ( )
db . Close ( )
fmt . Println ( "END" )
os . Exit ( ret )
}
2019-03-03 17:54:43 +01:00
func TestGenerateModel ( t * testing . T ) {
err := generator . Generate ( folderPath , connectString , dbname , schemaName )
assert . NilError ( t , err )
2019-03-04 19:35:49 +01:00
2019-03-05 18:55:47 +01:00
//err = generator.Generate(folderPath, connectString, dbname, "sport")
//
//assert.NilError(t, err)
2019-03-03 17:54:43 +01:00
}
func TestSelectQuery ( t * testing . T ) {
2019-03-05 18:55:47 +01:00
//query := Actor.InnerJoinOn(Store, Eq(Actor.ActorID, Store.StoreID)).
// Select(Store.StoreID, Store.AddressID, Actor.ActorID)
//
//queryStr, err := query.String(schemaName)
//
//assert.NilError(t, err)
//
//assert.Equal(t, queryStr, "SELECT store.store_id,store.address_id,actor.actor_id FROM dvds.actor JOIN dvds.store ON actor.actor_id=store.store_id")
//
//err = query.Execute(db, nil)
customers := [ ] model . Customer { }
query := Customer . Select ( Customer . All ... )
2019-03-09 09:52:03 +01:00
queryStr , err := query . String ( )
2019-03-05 18:55:47 +01:00
assert . NilError ( t , err )
2019-03-09 14:20:44 +01:00
assert . Equal ( t , queryStr , ` SELECT customer.customer_id AS "customer.customer_id",customer.store_id AS "customer.store_id",customer.first_name AS "customer.first_name",customer.last_name AS "customer.last_name",customer.email AS "customer.email",customer.address_id AS "customer.address_id",customer.activebool AS "customer.activebool",customer.create_date AS "customer.create_date",customer.last_update AS "customer.last_update",customer.active AS "customer.active" FROM dvds.customer ` )
2019-03-05 18:55:47 +01:00
//fmt.Println(queryStr)
err = query . Execute ( db , & customers )
//fmt.Println(customers)
//
//spew.Sdump(customers)
assert . NilError ( t , err )
assert . Equal ( t , len ( customers ) , 599 )
actor := model . Actor { }
err = Actor . Select ( Actor . All ... ) . Execute ( db , & actor )
2019-03-03 17:54:43 +01:00
assert . NilError ( t , err )
2019-03-09 14:20:44 +01:00
//spew.Dump(actor)
2019-03-05 18:55:47 +01:00
//time, _ := time.Parse("2006-01-02 15:04:05.00MST", "2013-05-26 14:47:57.62MST")
assert . Equal ( t , actor . ActorID , int32 ( 1 ) )
assert . Equal ( t , actor . FirstName , "Penelope" )
assert . Equal ( t , actor . LastName , "Guiness" )
2019-03-03 17:54:43 +01:00
}
2019-03-09 14:20:44 +01:00
func TestJoinQuery ( t * testing . T ) {
//filmActor := model.FilmActor{}
allFilmActorColumns := append ( append ( Actor . All , Film . All ... ) , Language . All ... )
query := FilmActor .
InnerJoinOn ( Actor , sqlbuilder . Eq ( FilmActor . ActorID , Actor . ActorID ) ) .
InnerJoinOn ( Film , sqlbuilder . Eq ( FilmActor . FilmID , Film . FilmID ) ) .
InnerJoinOn ( Language , sqlbuilder . Eq ( Film . LanguageID , Language . LanguageID ) ) .
Select ( allFilmActorColumns ... ) .
Where ( sqlbuilder . Eq ( FilmActor . ActorID , sqlbuilder . Literal ( 1 ) ) )
queryStr , err := query . String ( )
assert . NilError ( t , err )
fmt . Println ( queryStr )
filmActor := model . FilmActor { }
err = query . Execute ( db , & filmActor )
assert . NilError ( t , err )
//spew.Dump(filmActor)
}