Files
go-omni/cmd/go-omni/apigen/workspace_test.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")
}
}
}