init push

This commit is contained in:
2026-07-16 22:16:45 +07:00
commit 8b068bdb10
1021 changed files with 332816 additions and 0 deletions

View File

@@ -0,0 +1,91 @@
package mysql
import (
"context"
"fmt"
"testing"
"time"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
filemanager "wucher/internal/domain/file_manager"
fleetstatus "wucher/internal/domain/fleet_status"
"wucher/internal/domain/helicopter"
)
func openFleetStatusTestDB(t *testing.T) *gorm.DB {
t.Helper()
dsn := fmt.Sprintf("file:fleet_status_test_%d?mode=memory&cache=shared", time.Now().UnixNano())
db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{
NowFunc: func() time.Time { return time.Now().UTC() },
})
if err != nil {
t.Fatalf("open sqlite: %v", err)
}
if err := db.AutoMigrate(
&filemanager.Folder{}, &filemanager.File{}, &filemanager.Attachment{},
&helicopter.Helicopter{},
&fleetstatus.FleetStatus{}, &fleetstatus.MaintenanceSchedule{}, &fleetstatus.FleetStatusFile{},
); err != nil {
t.Fatalf("auto migrate: %v", err)
}
return db
}
func TestFleetStatusRepositoryLatestByHelicopterIDs(t *testing.T) {
db := openFleetStatusTestDB(t)
repo := NewFleetStatusRepository(db)
ctx := context.Background()
heliRepo := NewHelicopterRepository(db)
h1 := &helicopter.Helicopter{Designation: "H1", Identifier: "PK-H1", Type: "Twin"}
h2 := &helicopter.Helicopter{Designation: "H2", Identifier: "PK-H2", Type: "Twin"}
h3 := &helicopter.Helicopter{Designation: "H3", Identifier: "PK-H3", Type: "Twin"} // no fleet status
for _, h := range []*helicopter.Helicopter{h1, h2, h3} {
if err := heliRepo.Create(ctx, h); err != nil {
t.Fatalf("create helicopter: %v", err)
}
}
// h1: older then newer (newer = created last = latest). Plus a deleted row
// created last, which must be ignored.
if err := repo.Create(ctx, &fleetstatus.FleetStatus{HelicopterID: h1.ID, Status: fleetstatus.StatusActive}); err != nil {
t.Fatalf("create fs1a: %v", err)
}
fs1bNewer := &fleetstatus.FleetStatus{HelicopterID: h1.ID, Status: fleetstatus.StatusServiced}
if err := repo.Create(ctx, fs1bNewer); err != nil {
t.Fatalf("create fs1b: %v", err)
}
deleted := &fleetstatus.FleetStatus{HelicopterID: h1.ID, Status: fleetstatus.StatusActive}
if err := repo.Create(ctx, deleted); err != nil {
t.Fatalf("create deleted: %v", err)
}
if err := repo.Delete(ctx, deleted.ID, nil); err != nil {
t.Fatalf("delete fs: %v", err)
}
// h2: single record.
fs2 := &fleetstatus.FleetStatus{HelicopterID: h2.ID, Status: fleetstatus.StatusActive}
if err := repo.Create(ctx, fs2); err != nil {
t.Fatalf("create fs2: %v", err)
}
out, err := repo.LatestByHelicopterIDs(ctx, [][]byte{h1.ID, h2.ID, h3.ID})
if err != nil {
t.Fatalf("LatestByHelicopterIDs: %v", err)
}
if got := out[string(h1.ID)]; got == nil || string(got.ID) != string(fs1bNewer.ID) {
t.Fatalf("h1 latest mismatch: got %+v, want fs1b (status served, not deleted)", got)
}
if got := out[string(h1.ID)]; got != nil && got.Status != fleetstatus.StatusServiced {
t.Fatalf("h1 latest should be the serviced row, got status %q", got.Status)
}
if got := out[string(h2.ID)]; got == nil || string(got.ID) != string(fs2.ID) {
t.Fatalf("h2 latest mismatch: got %+v", got)
}
if _, ok := out[string(h3.ID)]; ok {
t.Fatalf("h3 has no fleet status and must be absent from the map")
}
}