diff --git a/app_save.go b/app_save.go index c8b569e..324a92e 100644 --- a/app_save.go +++ b/app_save.go @@ -112,6 +112,12 @@ func (a *App) SaveAutoImage(isPng bool, savePath string) SaveResult { if isPng { expectedMime = "image/png" } + + savePath, err = ensureValidExtension(savePath, isPng) + if err != nil { + return SaveResult{Error: err.Error()} + } + if a.handler == nil { return SaveResult{Error: "Internal error: image handler not initialized"} } diff --git a/app_save_test.go b/app_save_test.go index c987584..218ee2a 100644 --- a/app_save_test.go +++ b/app_save_test.go @@ -1,6 +1,7 @@ package main import ( + "path/filepath" "runtime" "testing" ) @@ -115,3 +116,54 @@ func TestSaveBatchImage_Validation(t *testing.T) { }) } } + +// SaveAutoImage Validation +// --------------------------------------------------------------------------- + +func TestSaveAutoImage_Validation(t *testing.T) { + app := &App{ + handler: newTestHandler(), + } + + exportDir := t.TempDir() + + settingsMu.Lock() + oldSettings := currentSettings + currentSettings.ExportFolder = exportDir + settingsMu.Unlock() + defer func() { + settingsMu.Lock() + currentSettings = oldSettings + settingsMu.Unlock() + }() + + type testCase struct { + name string + savePath string + isPng bool + wantError string + } + + tests := []testCase{ + {"valid path", filepath.Join(exportDir, "image.jpg"), false, ""}, + {"valid path png", filepath.Join(exportDir, "photo.png"), true, ""}, + {"no extension jpeg", filepath.Join(exportDir, "image"), false, ""}, + {"no extension png", filepath.Join(exportDir, "photo"), true, ""}, + {"valid path but wrong ext png", filepath.Join(exportDir, "image.jpg"), true, "Invalid extension. Please save as .png"}, + {"valid path but wrong ext jpeg", filepath.Join(exportDir, "photo.png"), false, "Invalid extension. Please save as .jpg or .jpeg"}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + res := app.SaveAutoImage(tt.isPng, tt.savePath) + + if res.Error != tt.wantError { + t.Errorf("expected error %q, got: %q", tt.wantError, res.Error) + } + + if tt.wantError == "" && res.SaveToken == "" { + t.Errorf("expected valid SaveToken, got empty string") + } + }) + } +}