127 lines
3.8 KiB
Go
127 lines
3.8 KiB
Go
package mysql
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"wucher/internal/domain/base"
|
|
"wucher/internal/domain/flight"
|
|
flightinspection "wucher/internal/domain/flight_inspection"
|
|
"wucher/internal/domain/helicopter"
|
|
reserveac "wucher/internal/domain/reserve_ac"
|
|
takeoverdomain "wucher/internal/domain/takeover"
|
|
"wucher/internal/shared/pkg/uuidv7"
|
|
)
|
|
|
|
func TestFlightRepository_ListByCreatedBy_PreloadsTakeoverCompletionRelations(t *testing.T) {
|
|
db := openDBTestSQLite(t)
|
|
if err := db.AutoMigrate(
|
|
&base.Base{},
|
|
&helicopter.Helicopter{},
|
|
&flightinspection.FlightInspection{},
|
|
&reserveac.ReserveAc{},
|
|
&takeoverdomain.TakeoverAc{},
|
|
&takeoverdomain.TakeoverRosterCrew{},
|
|
&takeoverdomain.TakeoverOtherPerson{},
|
|
&flight.Flight{},
|
|
); err != nil {
|
|
t.Fatalf("auto migrate: %v", err)
|
|
}
|
|
if err := db.Exec(`CREATE TABLE users (
|
|
id BLOB PRIMARY KEY,
|
|
first_name TEXT,
|
|
last_name TEXT
|
|
)`).Error; err != nil {
|
|
t.Fatalf("create users table: %v", err)
|
|
}
|
|
if err := db.Exec(`CREATE TABLE duty_rosters (
|
|
id BLOB PRIMARY KEY,
|
|
flight_id BLOB,
|
|
deleted_at DATETIME NULL
|
|
)`).Error; err != nil {
|
|
t.Fatalf("create duty_rosters table: %v", err)
|
|
}
|
|
|
|
now := time.Now().UTC()
|
|
baseID := uuidv7.MustBytes()
|
|
heliID := uuidv7.MustBytes()
|
|
inspectionID := uuidv7.MustBytes()
|
|
reserveID := uuidv7.MustBytes()
|
|
takeoverID := uuidv7.MustBytes()
|
|
flightID := uuidv7.MustBytes()
|
|
creatorID := uuidv7.MustBytes()
|
|
|
|
if err := db.Create(&base.Base{ID: baseID, BaseName: "Base A", CreatedAt: now, UpdatedAt: now}).Error; err != nil {
|
|
t.Fatalf("create base: %v", err)
|
|
}
|
|
if err := db.Create(&helicopter.Helicopter{ID: heliID, Designation: "H145", Identifier: "D-TEST", Type: "H145", CreatedAt: now, UpdatedAt: now}).Error; err != nil {
|
|
t.Fatalf("create helicopter: %v", err)
|
|
}
|
|
if err := db.Create(&flightinspection.FlightInspection{ID: inspectionID, InspectionDate: now, Status: flightinspection.StatusDraft, CreatedAt: now, UpdatedAt: now}).Error; err != nil {
|
|
t.Fatalf("create flight inspection: %v", err)
|
|
}
|
|
if err := db.Create(&reserveac.ReserveAc{
|
|
ID: reserveID,
|
|
BaseID: baseID,
|
|
AircraftID: heliID,
|
|
InspectionID: inspectionID,
|
|
Status: reserveac.StatusApproved,
|
|
CreatedAt: now,
|
|
UpdatedAt: now,
|
|
}).Error; err != nil {
|
|
t.Fatalf("create reserve ac: %v", err)
|
|
}
|
|
if err := db.Create(&takeoverdomain.TakeoverAc{
|
|
ID: takeoverID,
|
|
BaseID: baseID,
|
|
ReserveAcID: reserveID,
|
|
CreatedAt: now,
|
|
UpdatedAt: now,
|
|
CreatedBy: creatorID,
|
|
UpdatedBy: creatorID,
|
|
}).Error; err != nil {
|
|
t.Fatalf("create takeover: %v", err)
|
|
}
|
|
if err := db.Create(&takeoverdomain.TakeoverRosterCrew{
|
|
ID: uuidv7.MustBytes(),
|
|
TakeoverID: takeoverID,
|
|
RoleCode: "pilot",
|
|
CrewType: "main",
|
|
UserID: uuidv7.MustBytes(),
|
|
NameLabel: "Pilot A",
|
|
CreatedAt: now,
|
|
UpdatedAt: now,
|
|
}).Error; err != nil {
|
|
t.Fatalf("create takeover crew: %v", err)
|
|
}
|
|
if err := db.Create(&flight.Flight{
|
|
ID: flightID,
|
|
TakeoverAcID: takeoverID,
|
|
Status: "draft",
|
|
Date: now,
|
|
CreatedAt: now,
|
|
CreatedBy: creatorID,
|
|
UpdatedAt: now,
|
|
UpdatedBy: creatorID,
|
|
}).Error; err != nil {
|
|
t.Fatalf("create flight: %v", err)
|
|
}
|
|
|
|
repo := NewFlightRepository(db)
|
|
rows, total, err := repo.ListByCreatedBy(context.Background(), creatorID, "", "", "", 10, 0)
|
|
if err != nil {
|
|
t.Fatalf("list by created by: %v", err)
|
|
}
|
|
if total != 1 || len(rows) != 1 {
|
|
t.Fatalf("unexpected result size total=%d len=%d", total, len(rows))
|
|
}
|
|
row := rows[0]
|
|
if row.Takeover == nil || row.Takeover.Base == nil || row.Takeover.ReserveAc == nil || row.Takeover.ReserveAc.Aircraft == nil || row.Takeover.ReserveAc.Inspection == nil {
|
|
t.Fatalf("expected takeover relations to be preloaded: %#v", row.Takeover)
|
|
}
|
|
if len(row.Takeover.RosterCrews) == 0 {
|
|
t.Fatalf("expected takeover roster crews to be preloaded")
|
|
}
|
|
}
|