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 }