package batchresult import ( "context" "os" "path/filepath" "strings" "testing" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gcfg" ) func TestCreateWritesToMountedUploadAndKeepsLogicalPath(t *testing.T) { wd := t.TempDir() oldWd, err := os.Getwd() if err != nil { t.Fatalf("get working directory: %v", err) } if err = os.Chdir(wd); err != nil { t.Fatalf("change working directory: %v", err) } defer func() { _ = os.Chdir(oldWd) }() if err = os.MkdirAll(filepath.Join(wd, "upload"), 0o755); err != nil { t.Fatalf("create mounted upload root: %v", err) } oldAdapter := g.Cfg().GetAdapter() adapter, err := gcfg.NewAdapterContent(` system: upload: local: path: "resource/upload" `) if err != nil { t.Fatalf("create config adapter: %v", err) } g.Cfg().SetAdapter(adapter) defer g.Cfg().SetAdapter(oldAdapter) artifact, err := New().Create(context.Background(), Request{ BatchNo: "INB202608140001001", BatchType: 1, TenantID: "000000", Rows: []Row{{RowNo: 1, ICCID: "89860401780000567308", Success: true}}, }) if err != nil { t.Fatalf("Create() error = %v", err) } defer RemoveLocalFile(artifact) logicalPath := filepath.ToSlash(artifact.Path) if !strings.HasPrefix(logicalPath, "resource/upload/000000/user/file/") { t.Fatalf("logical path = %q, want resource/upload path", artifact.Path) } localPath := filepath.ToSlash(artifact.LocalPath) if !strings.HasPrefix(localPath, "upload/000000/user/file/") { t.Fatalf("local path = %q, want mounted upload path", artifact.LocalPath) } if _, err = os.Stat(artifact.LocalPath); err != nil { t.Fatalf("result file was not written at local path %q: %v", artifact.LocalPath, err) } if _, err = os.Stat(artifact.Path); !os.IsNotExist(err) { t.Fatalf("result file should not be written to logical-only path %q, stat error=%v", artifact.Path, err) } if !strings.HasPrefix(artifact.URL, "/upload/000000/user/file/") { t.Fatalf("url = %q, want /upload URL", artifact.URL) } }