97 lines
3.4 KiB
Go
97 lines
3.4 KiB
Go
package apigen
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestWorkspaceRejectsRemovedMappingWithoutWrites(t *testing.T) {
|
|
root := t.TempDir()
|
|
for _, name := range []string{"one", "two"} {
|
|
if _, err := New(Options{Dir: filepath.Join(root, name), Module: "example.com/" + name, FrameworkDir: frameworkRoot(t)}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
firstAPI := filepath.Join(root, "one/api/service.api")
|
|
writeFile(t, firstAPI, strings.Replace(readFile(t, firstAPI), "Greet a visitor", "Changed description", 1))
|
|
writeFile(t, filepath.Join(root, "two", generatorConfigFile), `{"mappingFiles":["../../private.json"]}`)
|
|
workspace := filepath.Join(root, "omni.workspace.json")
|
|
writeFile(t, workspace, `{"services":[{"dir":"one"},{"dir":"two"}]}`)
|
|
before := snapshot(t, root)
|
|
for _, operation := range []string{"generate", "check"} {
|
|
if err := Workspace(workspace, operation, io.Discard); err == nil || !strings.Contains(err.Error(), "mapping generation was removed") {
|
|
t.Fatal(operation, err)
|
|
}
|
|
if !sameFiles(before, snapshot(t, root)) {
|
|
t.Fatal("workspace migration failure wrote files")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestRemovedMappingConfiguration(t *testing.T) {
|
|
dir := filepath.Join(t.TempDir(), "project")
|
|
if _, err := New(Options{Dir: dir, Module: "example.com/removed", FrameworkDir: frameworkRoot(t)}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, raw := range []string{`{"mappings":[]}`, `{"mappingFiles":[]}`, `{"mappings":null}`, `{"mappingFiles":["../../private.json"]}`} {
|
|
writeFile(t, filepath.Join(dir, generatorConfigFile), raw)
|
|
before := snapshot(t, dir)
|
|
for _, o := range []Options{{Dir: dir}, {Dir: dir, Check: true}, {Dir: dir, DryRun: true}} {
|
|
o.API = filepath.Join(dir, "api/service.api")
|
|
if _, err := Generate(o); err == nil || !strings.Contains(err.Error(), "mapping generation was removed") {
|
|
t.Fatal(err)
|
|
}
|
|
if !sameFiles(before, snapshot(t, dir)) {
|
|
t.Fatal("rejected config wrote project")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
func TestOldMappingFileRequiresExplicitMigration(t *testing.T) {
|
|
dir := filepath.Join(t.TempDir(), "project")
|
|
if _, err := New(Options{Dir: dir, Module: "example.com/removed", FrameworkDir: frameworkRoot(t)}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
name := "internal/mapping/mappingsGen.go"
|
|
body := generatedHeader + "package mapping\n"
|
|
writeFile(t, filepath.Join(dir, name), body)
|
|
var m manifest
|
|
if err := json.Unmarshal([]byte(readFile(t, filepath.Join(dir, manifestPath))), &m); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
m.Generated[name] = digest([]byte(body))
|
|
raw, _ := json.Marshal(m)
|
|
writeFile(t, filepath.Join(dir, manifestPath), string(raw))
|
|
before := snapshot(t, dir)
|
|
o := Options{Dir: dir, API: filepath.Join(dir, "api/service.api")}
|
|
for _, mode := range []string{"generate", "check", "dry-run"} {
|
|
o.Check = mode == "check"
|
|
o.DryRun = mode == "dry-run"
|
|
if _, err := Generate(o); err == nil || !strings.Contains(err.Error(), "mapping generation was removed") {
|
|
t.Fatal(err)
|
|
}
|
|
if !sameFiles(before, snapshot(t, dir)) {
|
|
t.Fatal("legacy file deleted or project changed")
|
|
}
|
|
}
|
|
if err := os.Remove(filepath.Join(dir, name)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
o.Check = false
|
|
o.DryRun = false
|
|
if _, err := Generate(o); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
o.Check = true
|
|
if _, err := Generate(o); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if strings.Contains(readFile(t, filepath.Join(dir, manifestPath)), name) {
|
|
t.Fatal("old ownership retained")
|
|
}
|
|
}
|