42 lines
1.4 KiB
Go
42 lines
1.4 KiB
Go
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)
|
|
}
|
|
}
|