Files
fm_be/internal/repository/mysql/flight_repo_test.go
2026-07-16 22:16:45 +07:00

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")
}
}