mirror of https://github.com/databricks/cli.git
moved tests
This commit is contained in:
parent
ea0bc1705c
commit
0d0e45cc2c
|
@ -5,7 +5,6 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"slices"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/databricks/cli/cmd/root"
|
"github.com/databricks/cli/cmd/root"
|
||||||
|
@ -19,119 +18,6 @@ import (
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
var gitUrlPrefixes = []string{
|
|
||||||
"https://",
|
|
||||||
"git@",
|
|
||||||
}
|
|
||||||
|
|
||||||
type nativeTemplate struct {
|
|
||||||
name string
|
|
||||||
gitUrl string
|
|
||||||
description string
|
|
||||||
aliases []string
|
|
||||||
hidden bool
|
|
||||||
}
|
|
||||||
|
|
||||||
const customTemplate = "custom..."
|
|
||||||
|
|
||||||
var nativeTemplates = []nativeTemplate{
|
|
||||||
{
|
|
||||||
name: "default-python",
|
|
||||||
description: "The default Python template for Notebooks / Delta Live Tables / Workflows",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "default-sql",
|
|
||||||
description: "The default SQL template for .sql files that run with Databricks SQL",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "dbt-sql",
|
|
||||||
description: "The dbt SQL template (databricks.com/blog/delivering-cost-effective-data-real-time-dbt-and-databricks)",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "mlops-stacks",
|
|
||||||
gitUrl: "https://github.com/databricks/mlops-stacks",
|
|
||||||
description: "The Databricks MLOps Stacks template (github.com/databricks/mlops-stacks)",
|
|
||||||
aliases: []string{"mlops-stack"},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "default-pydabs",
|
|
||||||
gitUrl: "https://databricks.github.io/workflows-authoring-toolkit/pydabs-template.git",
|
|
||||||
hidden: true,
|
|
||||||
description: "The default PyDABs template",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: customTemplate,
|
|
||||||
description: "Bring your own template",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return template descriptions for command-line help
|
|
||||||
func nativeTemplateHelpDescriptions() string {
|
|
||||||
var lines []string
|
|
||||||
for _, template := range nativeTemplates {
|
|
||||||
if template.name != customTemplate && !template.hidden {
|
|
||||||
lines = append(lines, fmt.Sprintf("- %s: %s", template.name, template.description))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return strings.Join(lines, "\n")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return template options for an interactive prompt
|
|
||||||
func nativeTemplateOptions() []cmdio.Tuple {
|
|
||||||
names := make([]cmdio.Tuple, 0, len(nativeTemplates))
|
|
||||||
for _, template := range nativeTemplates {
|
|
||||||
if template.hidden {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
tuple := cmdio.Tuple{
|
|
||||||
Name: template.name,
|
|
||||||
Id: template.description,
|
|
||||||
}
|
|
||||||
names = append(names, tuple)
|
|
||||||
}
|
|
||||||
return names
|
|
||||||
}
|
|
||||||
|
|
||||||
func getNativeTemplateByDescription(description string) string {
|
|
||||||
for _, template := range nativeTemplates {
|
|
||||||
if template.description == description {
|
|
||||||
return template.name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func getNativeTemplateByName(name string) *nativeTemplate {
|
|
||||||
for _, template := range nativeTemplates {
|
|
||||||
if template.name == name {
|
|
||||||
return &template
|
|
||||||
}
|
|
||||||
if slices.Contains(template.aliases, name) {
|
|
||||||
return &template
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func isRepoUrl(url string) bool {
|
|
||||||
result := false
|
|
||||||
for _, prefix := range gitUrlPrefixes {
|
|
||||||
if strings.HasPrefix(url, prefix) {
|
|
||||||
result = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// Computes the repo name from the repo URL. Treats the last non empty word
|
|
||||||
// when splitting at '/' as the repo name. For example: for url git@github.com:databricks/cli.git
|
|
||||||
// the name would be "cli.git"
|
|
||||||
func repoName(url string) string {
|
|
||||||
parts := strings.Split(strings.TrimRight(url, "/"), "/")
|
|
||||||
return parts[len(parts)-1]
|
|
||||||
}
|
|
||||||
|
|
||||||
func constructOutputFiler(ctx context.Context, outputDir string) (filer.Filer, error) {
|
func constructOutputFiler(ctx context.Context, outputDir string) (filer.Filer, error) {
|
||||||
outputDir, err := filepath.Abs(outputDir)
|
outputDir, err := filepath.Abs(outputDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
package bundle
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/databricks/cli/libs/cmdio"
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestBundleInitIsRepoUrl(t *testing.T) {
|
|
||||||
assert.True(t, isRepoUrl("git@github.com:databricks/cli.git"))
|
|
||||||
assert.True(t, isRepoUrl("https://github.com/databricks/cli.git"))
|
|
||||||
|
|
||||||
assert.False(t, isRepoUrl("./local"))
|
|
||||||
assert.False(t, isRepoUrl("foo"))
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestBundleInitRepoName(t *testing.T) {
|
|
||||||
// Test valid URLs
|
|
||||||
assert.Equal(t, "cli.git", repoName("git@github.com:databricks/cli.git"))
|
|
||||||
assert.Equal(t, "cli", repoName("https://github.com/databricks/cli/"))
|
|
||||||
|
|
||||||
// test invalid URLs. In these cases the error would be floated when the
|
|
||||||
// git clone operation fails.
|
|
||||||
assert.Equal(t, "git@github.com:databricks", repoName("git@github.com:databricks"))
|
|
||||||
assert.Equal(t, "invalid-url", repoName("invalid-url"))
|
|
||||||
assert.Equal(t, "www.github.com", repoName("https://www.github.com"))
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNativeTemplateOptions(t *testing.T) {
|
|
||||||
expected := []cmdio.Tuple{
|
|
||||||
{Name: "default-python", Id: "The default Python template for Notebooks / Delta Live Tables / Workflows"},
|
|
||||||
{Name: "default-sql", Id: "The default SQL template for .sql files that run with Databricks SQL"},
|
|
||||||
{Name: "dbt-sql", Id: "The dbt SQL template (databricks.com/blog/delivering-cost-effective-data-real-time-dbt-and-databricks)"},
|
|
||||||
{Name: "mlops-stacks", Id: "The Databricks MLOps Stacks template (github.com/databricks/mlops-stacks)"},
|
|
||||||
{Name: "custom...", Id: "Bring your own template"},
|
|
||||||
}
|
|
||||||
assert.Equal(t, expected, nativeTemplateOptions())
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestGetNativeTemplateByName(t *testing.T) {
|
|
||||||
assert.Equal(t, "https://github.com/databricks/mlops-stacks", getNativeTemplateByName("mlops-stacks").gitUrl)
|
|
||||||
assert.Equal(t, "https://github.com/databricks/mlops-stacks", getNativeTemplateByName("mlops-stack").gitUrl)
|
|
||||||
|
|
||||||
assert.Equal(t, "default-python", getNativeTemplateByName("default-python").name)
|
|
||||||
assert.Equal(t, "The default Python template for Notebooks / Delta Live Tables / Workflows", getNativeTemplateByName("default-python").description)
|
|
||||||
assert.Equal(t, "", getNativeTemplateByName("default-python").gitUrl)
|
|
||||||
|
|
||||||
assert.Nil(t, getNativeTemplateByName("invalid"))
|
|
||||||
}
|
|
|
@ -3,6 +3,7 @@ package template
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/databricks/cli/libs/cmdio"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -13,3 +14,34 @@ func TestTemplateHelpDescriptions(t *testing.T) {
|
||||||
- mlops-stacks: The Databricks MLOps Stacks template (github.com/databricks/mlops-stacks)`
|
- mlops-stacks: The Databricks MLOps Stacks template (github.com/databricks/mlops-stacks)`
|
||||||
assert.Equal(t, expected, HelpDescriptions())
|
assert.Equal(t, expected, HelpDescriptions())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTemplateOptions(t *testing.T) {
|
||||||
|
expected := []cmdio.Tuple{
|
||||||
|
{Name: "default-python", Id: "The default Python template for Notebooks / Delta Live Tables / Workflows"},
|
||||||
|
{Name: "default-sql", Id: "The default SQL template for .sql files that run with Databricks SQL"},
|
||||||
|
{Name: "dbt-sql", Id: "The dbt SQL template (databricks.com/blog/delivering-cost-effective-data-real-time-dbt-and-databricks)"},
|
||||||
|
{Name: "mlops-stacks", Id: "The Databricks MLOps Stacks template (github.com/databricks/mlops-stacks)"},
|
||||||
|
{Name: "custom", Id: "Bring your own template"},
|
||||||
|
}
|
||||||
|
assert.Equal(t, expected, options())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBundleInitIsRepoUrl(t *testing.T) {
|
||||||
|
assert.True(t, IsGitRepoUrl("git@github.com:databricks/cli.git"))
|
||||||
|
assert.True(t, IsGitRepoUrl("https://github.com/databricks/cli.git"))
|
||||||
|
|
||||||
|
assert.False(t, IsGitRepoUrl("./local"))
|
||||||
|
assert.False(t, IsGitRepoUrl("foo"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBundleInitRepoName(t *testing.T) {
|
||||||
|
// Test valid URLs
|
||||||
|
assert.Equal(t, "cli.git", repoName("git@github.com:databricks/cli.git"))
|
||||||
|
assert.Equal(t, "cli", repoName("https://github.com/databricks/cli/"))
|
||||||
|
|
||||||
|
// test invalid URLs. In these cases the error would be floated when the
|
||||||
|
// git clone operation fails.
|
||||||
|
assert.Equal(t, "git@github.com:databricks", repoName("git@github.com:databricks"))
|
||||||
|
assert.Equal(t, "invalid-url", repoName("invalid-url"))
|
||||||
|
assert.Equal(t, "www.github.com", repoName("https://www.github.com"))
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue