github.com/jfrog/jfrog-cli-go@v1.22.1-0.20200318093948-4826ef344ffd/artifactory/utils/nuget/solution/solution_test.go (about)

     1  package solution
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"github.com/jfrog/jfrog-client-go/artifactory/buildinfo"
     7  	"os"
     8  	"path/filepath"
     9  	"reflect"
    10  	"runtime"
    11  	"strings"
    12  	"testing"
    13  )
    14  
    15  func TestEmptySolution(t *testing.T) {
    16  	solution, err := Load(".", "")
    17  	if err != nil {
    18  		t.Error(err)
    19  	}
    20  
    21  	expected := &buildinfo.BuildInfo{}
    22  	buildInfo, err := solution.BuildInfo("")
    23  	if err != nil {
    24  		t.Error("An error occurred while creating the build info object", err.Error())
    25  	}
    26  	if !reflect.DeepEqual(buildInfo, expected) {
    27  		expectedString, _ := json.Marshal(expected)
    28  		buildInfoString, _ := json.Marshal(buildInfo)
    29  		t.Errorf("Expecting: \n%s \nGot: \n%s", expectedString, buildInfoString)
    30  	}
    31  }
    32  
    33  func TestParseSln(t *testing.T) {
    34  	pwd, err := os.Getwd()
    35  	if err != nil {
    36  		t.Error(err)
    37  	}
    38  
    39  	testsDataDir := filepath.Join(pwd, "testsdata")
    40  
    41  	tests := []struct {
    42  		name     string
    43  		slnPath  string
    44  		expected []string
    45  	}{
    46  		{"oneproject", filepath.Join(testsDataDir, "oneproject.sln"), []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
    47  EndProject`}},
    48  		{"multiProjects", filepath.Join(testsDataDir, "multiprojects.sln"), []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfigmulti", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
    49  EndProject`, `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfiganothermulti", "test\packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
    50  EndProject`}},
    51  	}
    52  	for _, test := range tests {
    53  		t.Run(test.name, func(t *testing.T) {
    54  			results, err := parseSlnFile(test.slnPath)
    55  			if err != nil {
    56  				t.Error(err)
    57  			}
    58  
    59  			replaceCarriageSign(results)
    60  
    61  			if !reflect.DeepEqual(test.expected, results) {
    62  				t.Error(fmt.Sprintf("Expected %s, got %s", test.expected, results))
    63  			}
    64  		})
    65  	}
    66  }
    67  
    68  func TestParseProject(t *testing.T) {
    69  	tests := []struct {
    70  		name                string
    71  		projectLine         string
    72  		expectedCsprojPath  string
    73  		expectedProjectName string
    74  	}{
    75  		{"packagename", `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagename", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
    76  EndProject`, filepath.Join("jfrog", "path", "test", "packagesconfig.csproj"), "packagename"},
    77  		{"withpath", `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagename", "packagesconfig/packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
    78  EndProject`, filepath.Join("jfrog", "path", "test", "packagesconfig", "packagesconfig.csproj"), "packagename"},
    79  		{"sameprojectname", `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig/packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
    80  EndProject`, filepath.Join("jfrog", "path", "test", "packagesconfig", "packagesconfig.csproj"), "packagesconfig"},
    81  	}
    82  
    83  	path := filepath.Join("jfrog", "path", "test")
    84  	for _, test := range tests {
    85  		t.Run(test.name, func(t *testing.T) {
    86  			projectName, csprojPath, err := parseProject(test.projectLine, path)
    87  			if err != nil {
    88  				t.Error(err)
    89  			}
    90  			if csprojPath != test.expectedCsprojPath {
    91  				t.Error(fmt.Sprintf("Expected %s, got %s", test.expectedCsprojPath, csprojPath))
    92  			}
    93  			if projectName != test.expectedProjectName {
    94  				t.Error(fmt.Sprintf("Expected %s, got %s", test.expectedProjectName, projectName))
    95  			}
    96  		})
    97  	}
    98  }
    99  
   100  func TestGetProjectsFromSlns(t *testing.T) {
   101  	pwd, err := os.Getwd()
   102  	if err != nil {
   103  		t.Error(err)
   104  	}
   105  
   106  	testsDataDir := filepath.Join(pwd, "testsdata")
   107  	tests := []struct {
   108  		name             string
   109  		solution         solution
   110  		expectedProjects []string
   111  	}{
   112  		{"withoutSlnFile", solution{path: testsDataDir, slnFile: "", projects: nil}, []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfigmulti", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
   113  EndProject`, `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfiganothermulti", "test\packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
   114  EndProject`, `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
   115  EndProject`},
   116  		},
   117  		{"withSlnFile", solution{path: testsDataDir, slnFile: "oneproject.sln", projects: nil}, []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
   118  EndProject`},
   119  		},
   120  	}
   121  
   122  	for _, test := range tests {
   123  		t.Run(test.name, func(t *testing.T) {
   124  			results, err := test.solution.getProjectsFromSlns()
   125  			if err != nil {
   126  				t.Error(err)
   127  			}
   128  			replaceCarriageSign(results)
   129  
   130  			if !reflect.DeepEqual(test.expectedProjects, results) {
   131  				t.Error(fmt.Sprintf("Expected %s, got %s", test.expectedProjects, results))
   132  			}
   133  		})
   134  	}
   135  }
   136  
   137  // If running on Windows, replace \r\n with \n.
   138  func replaceCarriageSign(results []string) {
   139  	if runtime.GOOS == "windows" {
   140  		for i, result := range results {
   141  			results[i] = strings.Replace(result, "\r\n", "\n", -1)
   142  		}
   143  	}
   144  }