package main import ( "io" "os" "path/filepath" "strings" "testing" "git.warky.dev/wdevs/relspecgo/pkg/jobs" "git.warky.dev/wdevs/relspecgo/pkg/models" ) func TestStrictConversionOptionAndDryRun(t *testing.T) { prior := strictConversion strictConversion = true t.Cleanup(func() { strictConversion = prior }) if flag := rootCmd.PersistentFlags().Lookup("strict-conversion"); flag == nil { t.Fatal("missing --strict-conversion") } db := models.InitDatabase("shop") s := models.InitSchema("shop") table := models.InitTable("users", "shop") col := models.InitColumn("value", "users", "shop") col.Type = "unknown_type" table.Columns[col.Name] = col s.Tables = append(s.Tables, table) db.Schemas = append(db.Schemas, s) if err := validateWriteTarget(db, "mysql", "", "", ""); err == nil || !strings.Contains(err.Error(), "lossy MySQL") { t.Fatalf("dry run bypassed strict validation: %v", err) } strictConversion = false out := filepath.Join(t.TempDir(), "out.sql") rj := &resolvedJob{job: &jobs.Job{Output: &jobs.Output{Format: "mysql"}, Options: jobs.Options{StrictConversion: true}}, outputPath: out} if err := writeJobOutput(rj, db, &jobLogger{file: io.Discard}); err == nil || !strings.Contains(err.Error(), "lossy MySQL") { t.Fatalf("job option bypassed strict validation: %v", err) } if _, err := os.Stat(out); !os.IsNotExist(err) { t.Fatalf("strict job created output: %v", err) } }