github.com/jfrog/build-info-go@v1.9.26/utils/pythonutils/poetryutils_test.go (about)

     1  package pythonutils
     2  
     3  import (
     4  	"path/filepath"
     5  	"reflect"
     6  	"sort"
     7  	"testing"
     8  
     9  	"github.com/jfrog/build-info-go/tests"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestGetProjectNameFromPyproject(t *testing.T) {
    14  	testCases := []struct {
    15  		poetryProject       string
    16  		expectedProjectName string
    17  	}{
    18  		{"project", "my-poetry-project:1.1.0"},
    19  		{"nodevdeps", "my-poetry-project:1.1.17"},
    20  	}
    21  
    22  	for _, testCase := range testCases {
    23  		t.Run(testCase.poetryProject, func(t *testing.T) {
    24  			tmpProjectPath, cleanup := tests.CreateTestProject(t, filepath.Join("..", "testdata", "poetry", testCase.poetryProject))
    25  			defer cleanup()
    26  
    27  			actualValue, err := extractProjectFromPyproject(filepath.Join(tmpProjectPath, "pyproject.toml"))
    28  			assert.NoError(t, err)
    29  			if actualValue.Name != testCase.expectedProjectName {
    30  				t.Errorf("Expected value: %s, got: %s.", testCase.expectedProjectName, actualValue)
    31  			}
    32  		})
    33  	}
    34  }
    35  
    36  func TestGetProjectDependencies(t *testing.T) {
    37  	testCases := []struct {
    38  		poetryProject                  string
    39  		expectedDirectDependencies     []string
    40  		expectedTransitiveDependencies [][]string
    41  	}{
    42  		{"project", []string{"numpy:1.23.0", "pytest:5.4.3", "python:"}, [][]string{nil, {"atomicwrites:1.4.0", "attrs:21.4.0", "colorama:0.4.5", "more-itertools:8.13.0", "packaging:21.3", "pluggy:0.13.1", "py:1.11.0", "wcwidth:0.2.5"}, nil}},
    43  		{"nodevdeps", []string{"numpy:1.23.0", "python:"}, [][]string{nil, nil, nil}},
    44  	}
    45  
    46  	for _, testCase := range testCases {
    47  		t.Run(testCase.poetryProject, func(t *testing.T) {
    48  			tmpProjectPath, cleanup := tests.CreateTestProject(t, filepath.Join("..", "testdata", "poetry", testCase.poetryProject))
    49  			defer cleanup()
    50  
    51  			graph, directDependencies, err := getPoetryDependencies(tmpProjectPath)
    52  			assert.NoError(t, err)
    53  			sort.Strings(directDependencies)
    54  			if !reflect.DeepEqual(directDependencies, testCase.expectedDirectDependencies) {
    55  				t.Errorf("Expected value: %s, got: %s.", testCase.expectedDirectDependencies, directDependencies)
    56  			}
    57  			for i, directDependency := range directDependencies {
    58  				transitiveDependencies := graph[directDependency]
    59  				sort.Strings(transitiveDependencies)
    60  				if !reflect.DeepEqual(transitiveDependencies, testCase.expectedTransitiveDependencies[i]) {
    61  					t.Errorf("Expected value: %s, got: %s.", testCase.expectedTransitiveDependencies[i], graph[directDependency])
    62  				}
    63  			}
    64  		})
    65  	}
    66  }