github.com/please-build/puku@v1.7.3-0.20240516143641-f7d7f4941f57/generate/deps_test.go (about)

     1  package generate
     2  
     3  import (
     4  	"path/filepath"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/stretchr/testify/require"
     9  
    10  	"github.com/please-build/puku/config"
    11  	"github.com/please-build/puku/please"
    12  	"github.com/please-build/puku/proxy"
    13  	"github.com/please-build/puku/trie"
    14  )
    15  
    16  func TestDepTarget(t *testing.T) {
    17  	exampleModule := "github.com/example/module"
    18  	modules := []string{exampleModule, filepath.Join(exampleModule, "foo")}
    19  
    20  	t.Run("returns longest match", func(t *testing.T) {
    21  		label := depTarget(modules, filepath.Join(exampleModule, "foo", "bar"), "third_party/go")
    22  		assert.Equal(t, "///third_party/go/github.com_example_module_foo//bar", label)
    23  	})
    24  
    25  	t.Run("returns root package", func(t *testing.T) {
    26  		label := depTarget(modules, exampleModule, "third_party/go")
    27  		assert.Equal(t, "///third_party/go/github.com_example_module//:module", label)
    28  	})
    29  
    30  	t.Run("handles when module is prefixed but not a submodule", func(t *testing.T) {
    31  		label := depTarget(modules, exampleModule+"-foo", "third_party/go")
    32  		assert.Equal(t, "", label)
    33  	})
    34  }
    35  
    36  func TestLocalDeps(t *testing.T) {
    37  	conf := new(please.Config)
    38  	conf.Parse.BuildFileName = []string{"BUILD_FILE", "BUILD_FILE.plz"}
    39  	conf.Plugin.Go.ImportPath = []string{"github.com/some/module"}
    40  
    41  	u := newUpdater(conf)
    42  
    43  	trgt, err := u.localDep("test_project/foo")
    44  	require.NoError(t, err)
    45  	assert.Equal(t, "//test_project/foo:bar", trgt)
    46  
    47  	trgt, err = u.localDep("github.com/some/module/test_project/foo")
    48  	require.NoError(t, err)
    49  	assert.Equal(t, "//test_project/foo:bar", trgt)
    50  }
    51  
    52  func TestBuildTarget(t *testing.T) {
    53  	local := BuildTarget("foo", "", "")
    54  	assert.Equal(t, local, ":foo")
    55  
    56  	root := BuildTarget("foo", ".", "")
    57  	assert.Equal(t, "//:foo", root)
    58  
    59  	pkg := BuildTarget("foo", "pkg", "")
    60  	assert.Equal(t, "//pkg:foo", pkg)
    61  
    62  	pkgSameName := BuildTarget("foo", "foo", "")
    63  	assert.Equal(t, "//foo", pkgSameName)
    64  
    65  	subrepo := BuildTarget("foo", "pkg", "repo")
    66  	assert.Equal(t, "///repo//pkg:foo", subrepo)
    67  
    68  	subrepoRoot := BuildTarget("foo", ".", "repo")
    69  	assert.Equal(t, "///repo//:foo", subrepoRoot)
    70  
    71  	subrepoRootAlt := BuildTarget("foo", "", "repo")
    72  	assert.Equal(t, "///repo//:foo", subrepoRootAlt)
    73  }
    74  
    75  func TestResolveImport(t *testing.T) {
    76  	installs := trie.New()
    77  	installs.Add("installed", "//third_party/go:installed")
    78  
    79  	conf := &config.Config{
    80  		KnownTargets: map[string]string{
    81  			"knowntarget": "//third_party/go:known_target",
    82  		},
    83  	}
    84  
    85  	u := updater{
    86  		plzConf:  &please.Config{},
    87  		installs: installs,
    88  		resolvedImports: map[string]string{
    89  			"resolved": "//third_party/go:resolved",
    90  		},
    91  		modules: []string{"github.com/cached-module"},
    92  		proxy:   proxy.New(proxy.DefaultURL),
    93  	}
    94  
    95  	t.Run("resolve against a module in the puku.json", func(t *testing.T) {
    96  		ret, err := u.resolveImport(conf, "knowntarget")
    97  		require.NoError(t, err)
    98  		assert.Equal(t, "//third_party/go:known_target", ret)
    99  	})
   100  
   101  	t.Run("resolve against a module that we already know about", func(t *testing.T) {
   102  		ret, err := u.resolveImport(conf, "resolved")
   103  		require.NoError(t, err)
   104  		assert.Equal(t, "//third_party/go:resolved", ret)
   105  	})
   106  
   107  	t.Run("resolve against module install list", func(t *testing.T) {
   108  		ret, err := u.resolveImport(conf, "installed")
   109  		require.NoError(t, err)
   110  		assert.Equal(t, "//third_party/go:installed", ret)
   111  	})
   112  
   113  	t.Run("resolve against cached module name", func(t *testing.T) {
   114  		ret, err := u.resolveImport(conf, "github.com/cached-module/package")
   115  		require.NoError(t, err)
   116  		assert.Equal(t, "///third_party/go/github.com_cached-module//package", ret)
   117  	})
   118  
   119  	t.Run("resolve against the module proxy", func(t *testing.T) {
   120  		ret, err := u.resolveImport(conf, "github.com/please-build/puku/package")
   121  		require.NoError(t, err)
   122  		assert.Equal(t, "///third_party/go/github.com_please-build_puku//package", ret)
   123  	})
   124  }