package main

import (
	"context"
	"io/fs"
	"path/filepath"
	"testing"

	"github.com/databricks/cli/cmd"
	"github.com/spf13/cobra"
	"github.com/stretchr/testify/assert"
	"golang.org/x/mod/module"
)

func TestCommandsDontUseUnderscoreInName(t *testing.T) {
	// We use underscore as separator between commands in logs
	// so need to enforce that no command uses it in its name.
	//
	// This test lives in the main package because this is where
	// all commands are imported.
	//
	queue := []*cobra.Command{cmd.New(context.Background())}
	for len(queue) > 0 {
		cmd := queue[0]
		assert.NotContains(t, cmd.Name(), "_")
		queue = append(queue[1:], cmd.Commands()...)
	}
}

func TestFilePath(t *testing.T) {
	// To import this repository as a library, all files must match the
	// file path constraints made by Go. This test ensures that all files
	// in the repository have a valid file path.
	//
	// See https://github.com/databricks/cli/issues/1629
	//
	err := filepath.WalkDir(".", func(path string, _ fs.DirEntry, err error) error {
		switch path {
		case ".":
			return nil
		case ".git":
			return filepath.SkipDir
		}
		if assert.NoError(t, err) {
			assert.NoError(t, module.CheckFilePath(filepath.ToSlash(path)))
		}
		return nil
	})
	assert.NoError(t, err)
}