diff --git a/internal/cmd/preview-test/composable-schema-invalid-root.zed b/internal/cmd/preview-test/composable-schema-invalid-root.zed new file mode 100644 index 00000000..bc5138dd --- /dev/null +++ b/internal/cmd/preview-test/composable-schema-invalid-root.zed @@ -0,0 +1,6 @@ +import "./composable-schema-user.zed" + +definition resource { + relation and: user + permission viewer = and +} \ No newline at end of file diff --git a/internal/cmd/preview-test/composable-schema-root.zed b/internal/cmd/preview-test/composable-schema-root.zed new file mode 100644 index 00000000..b58c62a3 --- /dev/null +++ b/internal/cmd/preview-test/composable-schema-root.zed @@ -0,0 +1,6 @@ +import "./composable-schema-user.zed" + +definition resource { + relation user: user + permission view = user +} \ No newline at end of file diff --git a/internal/cmd/preview-test/composable-schema-user.zed b/internal/cmd/preview-test/composable-schema-user.zed new file mode 100644 index 00000000..9c96cb45 --- /dev/null +++ b/internal/cmd/preview-test/composable-schema-user.zed @@ -0,0 +1 @@ +definition user {} \ No newline at end of file diff --git a/internal/cmd/preview.go b/internal/cmd/preview.go index 05fd1b12..90761734 100644 --- a/internal/cmd/preview.go +++ b/internal/cmd/preview.go @@ -47,7 +47,7 @@ var schemaCompileCmd = &cobra.Command{ Write to stdout: zed preview schema compile root.zed Write to an output file: - zed preview schema compile --out compiled.zed + zed preview schema compile root.zed --out compiled.zed `, ValidArgsFunction: commands.FileExtensionCompletions("zed"), RunE: schemaCompileCmdFunc, diff --git a/internal/cmd/preview_test.go b/internal/cmd/preview_test.go new file mode 100644 index 00000000..14ca30b7 --- /dev/null +++ b/internal/cmd/preview_test.go @@ -0,0 +1,69 @@ +package cmd + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + + zedtesting "github.com/authzed/zed/internal/testing" +) + +func TestPreview(t *testing.T) { + t.Parallel() + + testCases := map[string]struct { + files []string + out string + expectErr string + expectStr string + }{ + `file_not_found`: { + files: []string{ + filepath.Join("preview-test", "nonexistent.zed"), + }, + expectErr: `no such file or directory`, + }, + `happy_path`: { + files: []string{ + filepath.Join("preview-test", "composable-schema-root.zed"), + }, + expectStr: `definition user {} + +definition resource { + relation user: user + permission view = user +} +`, + }, + `cannot_be_compiled_because_using_reserved_keyword`: { + files: []string{ + filepath.Join("preview-test", "composable-schema-invalid-root.zed"), + }, + expectErr: "line 4, column 12: Expected identifier, found token TokenTypeKeyword", + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + t.Parallel() + require := require.New(t) + + tempOutFile := filepath.Join(t.TempDir(), "out.zed") + cmd := zedtesting.CreateTestCobraCommandWithFlagValue(t, + zedtesting.StringFlag{FlagName: "out", FlagValue: tempOutFile}) + + err := schemaCompileCmdFunc(cmd, tc.files) + if tc.expectErr == "" { + require.NoError(err) + tempOutString, err := os.ReadFile(tempOutFile) + require.NoError(err) + require.Equal(tc.expectStr, string(tempOutString)) + } else { + require.Error(err) + require.Contains(err.Error(), tc.expectErr) + } + }) + } +}