44 lines
1.6 KiB
Go
44 lines
1.6 KiB
Go
package apigen
|
|
|
|
import (
|
|
"io"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestWorkspaceIndependentModules(t *testing.T) {
|
|
root := t.TempDir()
|
|
for _, name := range []string{"api", "id"} {
|
|
dir := filepath.Join(root, "services", name)
|
|
if _, err := New(Options{Dir: dir, Module: "example.com/" + name, FrameworkDir: frameworkRoot(t)}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
config := filepath.Join(root, "omni.workspace.json")
|
|
writeFile(t, config, `{"services":[{"dir":"services/api"},{"dir":"services/id"}]}`)
|
|
for _, op := range []string{"format", "generate", "check", "generate", "check"} {
|
|
if err := Workspace(config, op, io.Discard); err != nil {
|
|
t.Fatal(op, err)
|
|
}
|
|
}
|
|
// A bad second service must not leave the first service partially regenerated.
|
|
first := filepath.Join(root, "services/api/api/service.api")
|
|
writeFile(t, first, strings.Replace(readFile(t, first), "Greet a visitor", "Greet", 1))
|
|
second := filepath.Join(root, "services/id/api/service.api")
|
|
writeFile(t, second, "invalid source")
|
|
before := snapshot(t, root)
|
|
if err := Workspace(config, "generate", io.Discard); err == nil {
|
|
t.Fatal("invalid workspace accepted")
|
|
}
|
|
if !sameFiles(before, snapshot(t, root)) {
|
|
t.Fatal("preflight failure changed project")
|
|
}
|
|
for _, bad := range []string{`{"services":[{"dir":"../outside"}]}`, `{"services":[{"dir":"services/api"},{"dir":"services/api/nested"}]}`, `{"services":[{"dir":"services/api","dir":"services/id"}]}`} {
|
|
writeFile(t, config, bad)
|
|
if err := Workspace(config, "check", io.Discard); err == nil {
|
|
t.Fatal("invalid workspace accepted")
|
|
}
|
|
}
|
|
}
|