datawriter/internal/database/database_test.go

110 lines
2.6 KiB
Go

package database
import (
"fmt"
"strings"
"testing"
)
// Unit Tests sollten niemals auf der Produktivdatenbank stattfinden.
// Sie sollten nicht wie Unit Tests betrachtet werden.
const (
connectionString = "root:eliogeheim@tcp(127.0.0.1:3306)/elio_test?parseTime=true"
)
func Setup(dbr *DatabaseReader) error {
_, err := dbr.DatabaseWriter.db.Exec("drop table if exists elio_test.warehouseproducts")
if err != nil {
return err
}
_, err = dbr.DatabaseWriter.db.Exec("drop table if exists elio_test.deliverytimes")
if err != nil {
return err
}
err = dbr.DatabaseWriter.createDeliveryTableIfNotExist()
if err != nil {
return err
}
err = dbr.DatabaseWriter.createWarehouseTableIfNotExist()
if err != nil {
return err
}
statements := strings.Split(CreateInserts, ";")
statementsDlvry := strings.Split(CreateDeliveryInserts, ";")
statements = append(statements, statementsDlvry...)
tx, err := dbr.db.Begin()
defer func() error {
if r := recover(); r != nil {
tx.Rollback()
return fmt.Errorf("Scheiße passiert!")
} else if err != nil {
_:
tx.Rollback()
return fmt.Errorf("Scheiße passiert!")
} else {
err = tx.Commit()
if err != nil {
return fmt.Errorf("Scheiße passiert!")
}
}
return nil
}()
if err != nil {
return err
}
for _, stmt := range statements {
_, err := tx.Exec(stmt)
if err != nil {
return err
}
}
if err != nil {
return err
}
return nil
}
func TestDatabaseConnection(t *testing.T) {
var dbr = NewDatabaseReader(connectionString)
err := dbr.db.Ping()
if err != nil {
t.Errorf("Datenbankverbindung fehlgeschlagen! %s", err)
}
}
func TestSelectStatementNoDatasetsAvailable(t *testing.T) {
var dbr = NewDatabaseReader(connectionString)
err := Setup(dbr)
if err != nil {
t.Errorf("Setup failed! %s", err)
}
_, err = dbr.GetProductByProductIdDeliveryCountryAndState("X9299", "EU", "")
if err != nil {
t.Errorf("Es dürfen keine Datensätze gefunden werden! %s", err)
}
}
func TestSelectStatement(t *testing.T) {
var dbr = NewDatabaseReader(connectionString)
data, err := dbr.GetProductByProductIdDeliveryCountryAndState("A6053", "EU", "")
if err != nil {
t.Errorf("Es sollten keine Datensätze auffinbdar sein! %s", err)
}
if len(data) != 3 {
t.Errorf("Es müssen drei Datensätze vorhanden sein. Stattdessen sind es %d", len(data))
}
compareStr := "[{7507 DE 23 2} {500 EU 1 2} {8508 AT 4 4}]"
dbResultStr := fmt.Sprintln(data)
dbResultStr = strings.Trim(dbResultStr, "\n")
if strings.Compare(compareStr, dbResultStr) != 0 {
t.Errorf("Error: die Datensätze sind ungleich. \nSoll sein :\n%s\n ist aber: \n%s", compareStr, dbResultStr)
}
}