package main import ( "os" "path/filepath" "testing" ) func TestRunMerge_FromListMutuallyExclusiveWithSourcePath(t *testing.T) { saved := saveMergeState() defer restoreMergeState(saved) dir := t.TempDir() file := filepath.Join(dir, "schema.json") writeTestJSON(t, file, []string{"users"}) mergeTargetType = "json" mergeTargetPath = file mergeTargetConn = "" mergeSourceType = "json" mergeSourcePath = file mergeSourceConn = "" mergeFromList = []string{file} mergeOutputType = "json" mergeOutputPath = filepath.Join(dir, "out.json") mergeOutputConn = "" mergeSkipTables = "" mergeReportPath = "" err := runMerge(nil, nil) if err == nil { t.Error("expected error when --source-path and --from-list are both set") } } func TestRunMerge_FromListSingleFile(t *testing.T) { saved := saveMergeState() defer restoreMergeState(saved) dir := t.TempDir() targetFile := filepath.Join(dir, "target.json") sourceFile := filepath.Join(dir, "source.json") outFile := filepath.Join(dir, "output.json") writeTestJSON(t, targetFile, []string{"users"}) writeTestJSON(t, sourceFile, []string{"posts"}) mergeTargetType = "json" mergeTargetPath = targetFile mergeTargetConn = "" mergeSourceType = "json" mergeSourcePath = "" mergeSourceConn = "" mergeFromList = []string{sourceFile} mergeOutputType = "json" mergeOutputPath = outFile mergeOutputConn = "" mergeSkipTables = "" mergeReportPath = "" if err := runMerge(nil, nil); err != nil { t.Fatalf("runMerge() error = %v", err) } if _, err := os.Stat(outFile); os.IsNotExist(err) { t.Error("expected output file to be created") } } func TestRunMerge_FromListMultipleFiles(t *testing.T) { saved := saveMergeState() defer restoreMergeState(saved) dir := t.TempDir() targetFile := filepath.Join(dir, "target.json") source1 := filepath.Join(dir, "source1.json") source2 := filepath.Join(dir, "source2.json") outFile := filepath.Join(dir, "output.json") writeTestJSON(t, targetFile, []string{"users"}) writeTestJSON(t, source1, []string{"posts"}) writeTestJSON(t, source2, []string{"comments"}) mergeTargetType = "json" mergeTargetPath = targetFile mergeTargetConn = "" mergeSourceType = "json" mergeSourcePath = "" mergeSourceConn = "" mergeFromList = []string{source1, source2} mergeOutputType = "json" mergeOutputPath = outFile mergeOutputConn = "" mergeSkipTables = "" mergeReportPath = "" if err := runMerge(nil, nil); err != nil { t.Fatalf("runMerge() error = %v", err) } if _, err := os.Stat(outFile); os.IsNotExist(err) { t.Error("expected output file to be created") } } func TestRunMerge_FromListPathWithSpaces(t *testing.T) { saved := saveMergeState() defer restoreMergeState(saved) spacedDir := filepath.Join(t.TempDir(), "my schema files") if err := os.MkdirAll(spacedDir, 0755); err != nil { t.Fatal(err) } targetFile := filepath.Join(spacedDir, "target schema.json") sourceFile := filepath.Join(spacedDir, "source schema.json") outFile := filepath.Join(spacedDir, "merged output.json") writeTestJSON(t, targetFile, []string{"users"}) writeTestJSON(t, sourceFile, []string{"comments"}) mergeTargetType = "json" mergeTargetPath = targetFile mergeTargetConn = "" mergeSourceType = "json" mergeSourcePath = "" mergeSourceConn = "" mergeFromList = []string{sourceFile} mergeOutputType = "json" mergeOutputPath = outFile mergeOutputConn = "" mergeSkipTables = "" mergeReportPath = "" if err := runMerge(nil, nil); err != nil { t.Fatalf("runMerge() with spaced paths error = %v", err) } if _, err := os.Stat(outFile); os.IsNotExist(err) { t.Error("expected output file to be created") } } func TestRunMerge_FromListMissingSourceType(t *testing.T) { saved := saveMergeState() defer restoreMergeState(saved) dir := t.TempDir() file := filepath.Join(dir, "schema.json") writeTestJSON(t, file, []string{"users"}) mergeTargetType = "json" mergeTargetPath = file mergeTargetConn = "" mergeSourceType = "json" mergeSourcePath = "" mergeSourceConn = "" mergeFromList = []string{} // empty list, no source-path either mergeOutputType = "json" mergeOutputPath = filepath.Join(dir, "out.json") mergeOutputConn = "" mergeSkipTables = "" mergeReportPath = "" err := runMerge(nil, nil) if err == nil { t.Error("expected error when neither --source-path nor --from-list is provided") } }