Files
fm_be/internal/domain/file_manager/model_file_test.go
2026-07-16 22:16:45 +07:00

124 lines
3.2 KiB
Go

package filemanager
import (
"testing"
"gorm.io/gorm"
)
func TestFileTableName(t *testing.T) {
var m File
if got := m.TableName(); got != "file_files" {
t.Fatalf("table name mismatch: got %s", got)
}
}
func TestFileBeforeCreate(t *testing.T) {
t.Run("assigns uuid when missing", func(t *testing.T) {
m := &File{}
if err := m.BeforeCreate(&gorm.DB{}); err != nil {
t.Fatalf("before create error: %v", err)
}
if len(m.ID) != 16 {
t.Fatalf("expected 16-byte id, got %d", len(m.ID))
}
})
t.Run("keeps existing id", func(t *testing.T) {
id := make([]byte, 16)
for i := range id {
id[i] = byte(i + 1)
}
m := &File{ID: append([]byte(nil), id...)}
if err := m.BeforeCreate(&gorm.DB{}); err != nil {
t.Fatalf("before create error: %v", err)
}
for i := range id {
if m.ID[i] != id[i] {
t.Fatalf("id changed at %d: got %d want %d", i, m.ID[i], id[i])
}
}
})
}
func TestNormalizeFileStatus(t *testing.T) {
cases := map[string]string{
"uploaded": FileStatusUploaded,
"processing": FileStatusProcessing,
"validated": FileStatusValidated,
"failed": FileStatusFailed,
"ready": FileStatusReady,
"trashed": FileStatusTrashed,
" pending ": FileStatusUploaded,
"UPLOADING": FileStatusProcessing,
"": "",
}
for in, want := range cases {
if got := NormalizeFileStatus(in); got != want {
t.Fatalf("NormalizeFileStatus(%q) = %q, want %q", in, got, want)
}
}
}
func TestCanTransitionFileStatus(t *testing.T) {
valid := [][2]string{
{FileStatusUploaded, FileStatusProcessing},
{FileStatusUploaded, FileStatusFailed},
{FileStatusProcessing, FileStatusValidated},
{FileStatusProcessing, FileStatusFailed},
{FileStatusValidated, FileStatusReady},
{FileStatusValidated, FileStatusFailed},
{FileStatusReady, FileStatusTrashed},
}
for i := range valid {
if !CanTransitionFileStatus(valid[i][0], valid[i][1]) {
t.Fatalf("expected valid transition %s -> %s", valid[i][0], valid[i][1])
}
}
invalid := [][2]string{
{FileStatusUploaded, FileStatusReady},
{FileStatusFailed, FileStatusReady},
{FileStatusTrashed, FileStatusProcessing},
{FileStatusReady, FileStatusValidated},
}
for i := range invalid {
if CanTransitionFileStatus(invalid[i][0], invalid[i][1]) {
t.Fatalf("expected invalid transition %s -> %s", invalid[i][0], invalid[i][1])
}
}
}
func TestNormalizeFileLifecycleStatus(t *testing.T) {
cases := map[string]string{
"": FileLifecycleStatusTemp,
" temp ": FileLifecycleStatusTemp,
"ACTIVE": FileLifecycleStatusActive,
"orphan_pending": FileLifecycleStatusOrphanPending,
"deleted": FileLifecycleStatusDeleted,
}
for in, want := range cases {
if got := NormalizeFileLifecycleStatus(in); got != want {
t.Fatalf("NormalizeFileLifecycleStatus(%q) = %q, want %q", in, got, want)
}
}
}
func TestIsKnownFileLifecycleStatus(t *testing.T) {
known := []string{
FileLifecycleStatusTemp,
FileLifecycleStatusActive,
FileLifecycleStatusOrphanPending,
FileLifecycleStatusDeleted,
}
for i := range known {
if !IsKnownFileLifecycleStatus(known[i]) {
t.Fatalf("expected known lifecycle status %q", known[i])
}
}
if IsKnownFileLifecycleStatus("unknown") {
t.Fatalf("expected unknown lifecycle status to be false")
}
}