Added UnitTest for FetchData Service für das Abholen von den jeweiligen Warenhäusern
This commit is contained in:
parent
18e2d9a359
commit
ac37cbfacd
@ -10,6 +10,7 @@ import (
|
||||
"time"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/google/uuid"
|
||||
"gittea.marcokittel.de/elio/eliotools/eliofile"
|
||||
"gittea.marcokittel.de/elio/eliotools/logger"
|
||||
)
|
||||
@ -157,7 +158,7 @@ func (d *DatabaseWriter) UpdateOrInsertDelivery(fromcountry string, tocountry st
|
||||
}
|
||||
|
||||
type ProductDelivery struct {
|
||||
WhId int
|
||||
Id int //Warehouse Id
|
||||
Warehouse string
|
||||
Amount int
|
||||
DeliveryDays int
|
||||
@ -168,7 +169,7 @@ func (d *DatabaseReader) GetProductByProductIdDeliveryCountryAndState(prod_id, d
|
||||
stmt := `
|
||||
SELECT whp.id, warehouse, amount, d.delivery, d.id deliveryId
|
||||
FROM warehouseproducts whp
|
||||
join deliverytimes d
|
||||
left join deliverytimes d
|
||||
on whp.warehouse = d.fromcountry
|
||||
where productid = ?
|
||||
and d.tocountry = ?
|
||||
@ -184,7 +185,7 @@ func (d *DatabaseReader) GetProductByProductIdDeliveryCountryAndState(prod_id, d
|
||||
var products []ProductDelivery
|
||||
for rows.Next() {
|
||||
var pd ProductDelivery
|
||||
if err := rows.Scan(&pd.WhId, &pd.Warehouse, &pd.Amount, &pd.DeliveryDays, &pd.DeliveryId); err != nil {
|
||||
if err := rows.Scan(&pd.Id, &pd.Warehouse, &pd.Amount, &pd.DeliveryDays, &pd.DeliveryId); err != nil {
|
||||
return products, err
|
||||
}
|
||||
products = append(products, pd)
|
||||
@ -230,12 +231,13 @@ func (d *DatabaseWriter) ReleaseReservation(Id UUID) error {
|
||||
return d.updateReservationState(Id, "RELEASED")
|
||||
}
|
||||
|
||||
func (d *DatabaseWriter) ReserveReservation(deliveryId, warehouseId, amount int) error {
|
||||
_, err := d.db.Exec("INSERT INTO reservations (deliveryId, warehouseId, amount, status) VALUES (?,?,?,'RESERVED')")
|
||||
func (d *DatabaseWriter) ReserveReservation(deliveryId, warehouseId, amount int) (UUID, error) {
|
||||
newUUID := uuid.New().String()
|
||||
_, err := d.db.Exec("INSERT INTO reservations (id, deliveryId, warehouseId, amount, status) VALUES (?,?,?,?,'RESERVED')", newUUID, deliveryId, warehouseId, amount)
|
||||
if err != nil {
|
||||
return err
|
||||
return "", err
|
||||
}
|
||||
return nil
|
||||
return UUID(newUUID), nil
|
||||
}
|
||||
|
||||
func (db *DatabaseWriter) HandleData(ctx context.Context, data eliofile.CountryCsvData) error {
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"strings"
|
||||
"testing"
|
||||
@ -118,11 +118,152 @@ func TestSelectStatement(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestInsertStatement(t *testing.T) {
|
||||
|
||||
var dbr = NewDatabaseReader(connectionString)
|
||||
data, err := dbr.GetProductByProductIdDeliveryCountryAndState("A6053", "EU", "")
|
||||
if err != nil {
|
||||
t.Errorf("Es sollten Datensätze auffinbdar sein! %s", err)
|
||||
}
|
||||
log.Println(data)
|
||||
for _, item := range data {
|
||||
uuid, err := dbr.DatabaseWriter.ReserveReservation(item.DeliveryId, item.Id, item.Amount)
|
||||
if err != nil {
|
||||
t.Errorf("Das Einfügen einer neuen Reservierung darf nicht fehlschlagen! %s", err)
|
||||
}
|
||||
status, err := dbr.GetReservationStateById(uuid)
|
||||
if err != nil || status != "RESERVED" {
|
||||
t.Errorf("Der Status muss RESERVED sein. Stattdessen ist er: %s", status)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestAbortReservationStatement(t *testing.T) {
|
||||
var dbr = NewDatabaseReader(connectionString)
|
||||
data, err := dbr.GetProductByProductIdDeliveryCountryAndState("A6053", "EU", "")
|
||||
if err != nil {
|
||||
t.Errorf("Es sollten Datensätze auffinbdar sein! %s", err)
|
||||
}
|
||||
for _, item := range data {
|
||||
uuid, err := dbr.DatabaseWriter.ReserveReservation(item.DeliveryId, item.Id, item.Amount)
|
||||
if err != nil {
|
||||
t.Errorf("Das Einfügen einer neuen Reservierung darf nicht fehlschlagen! %s", err)
|
||||
}
|
||||
err = dbr.AbortReservation(uuid)
|
||||
if err != nil {
|
||||
t.Errorf("Das Abbrechen einer Reservierung darf nicht fehlschlagen! %s", err)
|
||||
}
|
||||
status, err := dbr.GetReservationStateById(uuid)
|
||||
if err != nil || status != "ABORTED" {
|
||||
t.Errorf("Der Status muss ABORTED sein. Stattdessen ist er: %s", status)
|
||||
}
|
||||
if err != nil || status != "ABORTED" {
|
||||
t.Errorf("Der Status muss ABORTED sein. Stattdessen ist er: %s", status)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestConfirmReservationStatement(t *testing.T) {
|
||||
var dbr = NewDatabaseReader(connectionString)
|
||||
data, err := dbr.GetProductByProductIdDeliveryCountryAndState("A6053", "EU", "")
|
||||
if err != nil {
|
||||
t.Errorf("Es sollten Datensätze auffinbdar sein! %s", err)
|
||||
}
|
||||
for _, item := range data {
|
||||
uuid, err := dbr.DatabaseWriter.ReserveReservation(item.DeliveryId, item.Id, item.Amount)
|
||||
if err != nil {
|
||||
t.Errorf("Das Einfügen einer neuen Reservierung darf nicht fehlschlagen! %s", err)
|
||||
}
|
||||
err = dbr.ConfirmReservation(uuid)
|
||||
if err != nil {
|
||||
t.Errorf("Das Abbrechen einer Reservierung darf nicht fehlschlagen! %s", err)
|
||||
}
|
||||
status, err := dbr.GetReservationStateById(uuid)
|
||||
if err != nil || status != "CONFIRMED" {
|
||||
t.Errorf("Der Status muss CONFIRMED sein. Stattdessen ist er: %s", status)
|
||||
}
|
||||
if err != nil || status != "CONFIRMED" {
|
||||
t.Errorf("Der Status muss CONFIRMED sein. Stattdessen ist er: %s", status)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestReleasedReservationStatement(t *testing.T) {
|
||||
var dbr = NewDatabaseReader(connectionString)
|
||||
data, err := dbr.GetProductByProductIdDeliveryCountryAndState("A6053", "EU", "")
|
||||
if err != nil {
|
||||
t.Errorf("Es sollten Datensätze auffinbdar sein! %s", err)
|
||||
}
|
||||
for _, item := range data {
|
||||
uuid, err := dbr.DatabaseWriter.ReserveReservation(item.DeliveryId, item.Id, item.Amount)
|
||||
if err != nil {
|
||||
t.Errorf("Das Einfügen einer neuen Reservierung darf nicht fehlschlagen! %s", err)
|
||||
}
|
||||
err = dbr.ReleaseReservation(uuid)
|
||||
if err != nil {
|
||||
t.Errorf("Das Abbrechen einer Reservierung darf nicht fehlschlagen! %s", err)
|
||||
}
|
||||
status, err := dbr.GetReservationStateById(uuid)
|
||||
if err != nil || status != "RELEASED" {
|
||||
t.Errorf("Der Status muss RELEASED sein. Stattdessen ist er: %s", status)
|
||||
}
|
||||
if err != nil || status != "RELEASED" {
|
||||
t.Errorf("Der Status muss RELEASED sein. Stattdessen ist er: %s", status)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestFetchDataReservation(t *testing.T) {
|
||||
payloadStr := `{ "products": { "A6053": 30 }, "context": { "country": "EU", "state": "" }}`
|
||||
|
||||
var payload Container
|
||||
err := json.Unmarshal([]byte(payloadStr), &payload)
|
||||
if err != nil {
|
||||
t.Errorf("Dieser Fehler beim Konvertieren der JSON Payload sollte nicht passieren! \n%s", err)
|
||||
return
|
||||
}
|
||||
ps := NewProductService(connectionString)
|
||||
op, err := ps.FetchData(&payload)
|
||||
if err != nil {
|
||||
t.Errorf("Das Datafetchen und umwandeln in eine Map muss sauber funktionieren! %s", err)
|
||||
}
|
||||
valTocompare := `[{map[A6053:[{DE 23 2} {EU 1 2} {AT 4 4}]]}]`
|
||||
if fmt.Sprint(op) != valTocompare {
|
||||
t.Errorf("Mist, sollte sein %s %s", valTocompare, fmt.Sprint(op))
|
||||
}
|
||||
}
|
||||
func TestFetchDataReservationVarition2(t *testing.T) {
|
||||
payloadStr := `{ "products": { "A6053": 24 }, "context": { "country": "EU", "state": "" }}`
|
||||
|
||||
var payload Container
|
||||
err := json.Unmarshal([]byte(payloadStr), &payload)
|
||||
if err != nil {
|
||||
t.Errorf("Dieser Fehler beim Konvertieren der JSON Payload sollte nicht passieren! \n%s", err)
|
||||
return
|
||||
}
|
||||
ps := NewProductService(connectionString)
|
||||
op, err := ps.FetchData(&payload)
|
||||
if err != nil {
|
||||
t.Errorf("Das Datafetchen und umwandeln in eine Map muss sauber funktionieren! %s", err)
|
||||
}
|
||||
valTocompare := `[{map[A6053:[{DE 23 2} {EU 1 2}]]}]`
|
||||
if fmt.Sprint(op) != valTocompare {
|
||||
t.Errorf("Mist, sollte sein %s %s", valTocompare, fmt.Sprint(op))
|
||||
}
|
||||
}
|
||||
func TestFetchDataReservationVarition3(t *testing.T) {
|
||||
payloadStr := `{ "products": { "A6053": 5 }, "context": { "country": "AT", "state": "" }}`
|
||||
|
||||
var payload Container
|
||||
err := json.Unmarshal([]byte(payloadStr), &payload)
|
||||
if err != nil {
|
||||
t.Errorf("Dieser Fehler beim Konvertieren der JSON Payload sollte nicht passieren! \n%s", err)
|
||||
return
|
||||
}
|
||||
ps := NewProductService(connectionString)
|
||||
op, err := ps.FetchData(&payload)
|
||||
if err != nil {
|
||||
t.Errorf("Das Datafetchen und umwandeln in eine Map muss sauber funktionieren! %s", err)
|
||||
}
|
||||
valTocompare := `[{map[A6053:[{AT 4 1} {DE 1 2}]]}]`
|
||||
if fmt.Sprint(op) != valTocompare {
|
||||
t.Errorf("Mist, sollte sein %s %s", valTocompare, fmt.Sprint(op))
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user