github.com/joey-fossa/fossa-cli@v0.7.34-0.20190708193710-569f1e8679f0/buildtools/paket/paket_test.go (about)

     1  package paket_test
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/fossas/fossa-cli/buildtools/paket"
     8  	"github.com/fossas/fossa-cli/pkg"
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func TestPaketDependencyGraph(t *testing.T) {
    13  	graph, err := paket.DependencyGraph("testdata/paket.lock")
    14  	assert.NoError(t, err)
    15  	assert.NotEmpty(t, graph)
    16  	assertImport(t, graph.Direct, "Dep.One", "1.0.0", pkg.NuGet)
    17  	assertImport(t, graph.Direct, "Dep.Two", "2.0.0", pkg.NuGet)
    18  	assertImport(t, graph.Direct, "Dep.Three", "3.0.0", pkg.NuGet)
    19  	assertImport(t, graph.Direct, "Dep.Four", "4.0.0", pkg.NuGet)
    20  	assertImport(t, graph.Direct, "Dep.Five", "5.0.0", pkg.NuGet)
    21  	assertImport(t, graph.Direct, "Dep.Six", "6.0.0", pkg.NuGet)
    22  	assertImport(t, graph.Direct, "user/repo/src/app/file", "0987654321", pkg.Git)
    23  	assertImport(t, graph.Direct, "www/website/src/file", "123456789", pkg.Git)
    24  	assertImport(t, graph.Direct, "user/otherrepo/src/secondfile", "5678901234", pkg.Git)
    25  
    26  	dependencyOne, err := findPackage(graph.Transitive, "Dep.One")
    27  	assert.NoError(t, err)
    28  	assert.Empty(t, dependencyOne.Imports)
    29  
    30  	dependencyTwo, err := findPackage(graph.Transitive, "Dep.Two")
    31  	assert.NoError(t, err)
    32  	assertImport(t, dependencyTwo.Imports, "Dep.Three", "3.0.0", pkg.NuGet)
    33  
    34  	dependencyThree, err := findPackage(graph.Transitive, "Dep.Three")
    35  	assert.NoError(t, err)
    36  	assertImport(t, dependencyThree.Imports, "Dep.Four", "4.0.0", pkg.NuGet)
    37  
    38  	dependencyFour, err := findPackage(graph.Transitive, "Dep.Four")
    39  	assert.NoError(t, err)
    40  	assert.Empty(t, dependencyFour.Imports)
    41  
    42  	dependencyFive, err := findPackage(graph.Transitive, "Dep.Five")
    43  	assert.NoError(t, err)
    44  	assertImport(t, dependencyFive.Imports, "Dep.Six", "6.0.0", pkg.NuGet)
    45  
    46  	dependencySix, err := findPackage(graph.Transitive, "Dep.Six")
    47  	assert.NoError(t, err)
    48  	assert.Empty(t, dependencySix.Imports)
    49  
    50  	dependencyGitHub, err := findPackage(graph.Transitive, "user/repo/src/app/file")
    51  	assert.NoError(t, err)
    52  	assert.Empty(t, dependencyGitHub.Imports)
    53  
    54  	dependencyHTTP, err := findPackage(graph.Transitive, "www/website/src/file")
    55  	assert.NoError(t, err)
    56  	assert.Empty(t, dependencyHTTP.Imports)
    57  
    58  	dependencyGit, err := findPackage(graph.Transitive, "user/otherrepo/src/secondfile")
    59  	assert.NoError(t, err)
    60  	assert.Empty(t, dependencyGit.Imports)
    61  }
    62  
    63  func findPackage(packages map[pkg.ID]pkg.Package, name string) (pkg.Package, error) {
    64  	for id := range packages {
    65  		if id.Name == name {
    66  			return packages[id], nil
    67  		}
    68  	}
    69  	return pkg.Package{}, fmt.Errorf("Package %s not found", name)
    70  }
    71  
    72  func assertImport(t *testing.T, imports pkg.Imports, name, revision string, packageType pkg.Type) {
    73  	for _, importedProj := range imports {
    74  		if importedProj.Resolved.Name == name {
    75  			if importedProj.Resolved.Revision == revision {
    76  				if importedProj.Resolved.Type == packageType {
    77  					return
    78  				}
    79  			}
    80  		}
    81  	}
    82  	assert.Fail(t, "missing "+name)
    83  }