package model import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // TestPresetModels_Count 驗證恰好 7 個系統預設模型。 func TestPresetModels_Count(t *testing.T) { got := PresetModels() require.Len(t, got, 7) } // TestPresetModels_AllSourcePresetNoOwner 驗證每筆 preset 都是公用(Source=preset、無 owner、有 StorageKey、無 FAAObjectKey)。 func TestPresetModels_AllSourcePresetNoOwner(t *testing.T) { for _, m := range PresetModels() { assert.Equal(t, SourcePreset, m.Source, "preset %s source", m.ID) assert.Empty(t, m.OwnerUserID, "preset %s should have no owner", m.ID) assert.Empty(t, m.FAAObjectKey, "preset %s should not have FAAObjectKey", m.ID) assert.Equal(t, "models/preset/"+m.ID+".nef", m.StorageKey, "preset %s storage key", m.ID) assert.NotEmpty(t, m.Name, "preset %s name", m.ID) assert.NotEmpty(t, m.TargetChip, "preset %s target chip", m.ID) assert.Greater(t, m.FileSize, int64(0), "preset %s file size", m.ID) } } // TestPresetModels_ExpectedIDs 驗證 7 個 id 與 models.json 對齊(順序固定)。 func TestPresetModels_ExpectedIDs(t *testing.T) { want := []string{ "kl520-yolov5-detection", "kl520-fcos-detection", "kl520-ssd-face-detection", "kl520-tiny-yolov3", "kl720-yolov5-detection", "kl720-resnet18-classification", "kl720-fcos-detection", } got := PresetModels() require.Len(t, got, len(want)) for i, id := range want { assert.Equal(t, id, got[i].ID, "preset[%d] id", i) } } // TestPresetByID_FoundAndNotFound 驗證查找。 func TestPresetByID_FoundAndNotFound(t *testing.T) { m, ok := PresetByID("kl720-resnet18-classification") require.True(t, ok) assert.Equal(t, "ImageNet Classification ResNet18 (KL720)", m.Name) assert.Equal(t, "KL720", m.TargetChip) assert.Equal(t, []int{1, 3, 224, 224}, m.InputShape) _, ok = PresetByID("not-a-preset") assert.False(t, ok) assert.True(t, IsPresetID("kl520-yolov5-detection")) assert.False(t, IsPresetID("random-uuid")) } // TestPresetModels_ReturnsDeepCopy 驗證回傳是深拷貝——改動回傳值不影響後續呼叫(保護共用常數)。 func TestPresetModels_ReturnsDeepCopy(t *testing.T) { a, ok := PresetByID("kl520-yolov5-detection") require.True(t, ok) origLen := len(a.Classes) a.Name = "MUTATED" a.Classes = append(a.Classes, "injected") a.InputShape[0] = 999 b, ok := PresetByID("kl520-yolov5-detection") require.True(t, ok) assert.NotEqual(t, "MUTATED", b.Name, "回傳值修改不應污染共用常數") assert.Len(t, b.Classes, origLen, "Classes slice 應為獨立拷貝") assert.Equal(t, 1, b.InputShape[0], "InputShape slice 應為獨立拷貝") }