github.com/osievert/jfrog-cli-core@v1.2.7/artifactory/utils/dotnet/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  	testdataDir := filepath.Join(pwd, "testdata")
    40  
    41  	tests := []struct {
    42  		name     string
    43  		slnPath  string
    44  		expected []string
    45  	}{
    46  		{"oneproject", filepath.Join(testdataDir, "oneproject.sln"), []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
    47  EndProject`}},
    48  		{"multiProjects", filepath.Join(testdataDir, "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 TestParseProjectLine(t *testing.T) {
    69  	tests := []struct {
    70  		name                 string
    71  		projectLine          string
    72  		expectedProjFilePath 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  		{"vbproj", `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig/packagesconfig.vbproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
    82  EndProject`, filepath.Join("jfrog", "path", "test", "packagesconfig", "packagesconfig.vbproj"), "packagesconfig"},
    83  	}
    84  
    85  	path := filepath.Join("jfrog", "path", "test")
    86  	for _, test := range tests {
    87  		t.Run(test.name, func(t *testing.T) {
    88  			projectName, projFilePath, err := parseProjectLine(test.projectLine, path)
    89  			if err != nil {
    90  				t.Error(err)
    91  			}
    92  			if projFilePath != test.expectedProjFilePath {
    93  				t.Error(fmt.Sprintf("Expected %s, got %s", test.expectedProjFilePath, projFilePath))
    94  			}
    95  			if projectName != test.expectedProjectName {
    96  				t.Error(fmt.Sprintf("Expected %s, got %s", test.expectedProjectName, projectName))
    97  			}
    98  		})
    99  	}
   100  }
   101  
   102  func TestGetProjectsFromSlns(t *testing.T) {
   103  	pwd, err := os.Getwd()
   104  	if err != nil {
   105  		t.Error(err)
   106  	}
   107  
   108  	testdataDir := filepath.Join(pwd, "testdata")
   109  	tests := []struct {
   110  		name             string
   111  		solution         solution
   112  		expectedProjects []string
   113  	}{
   114  		{"withoutSlnFile", solution{path: testdataDir, slnFile: "", projects: nil}, []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfigmulti", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
   115  EndProject`, `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfiganothermulti", "test\packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
   116  EndProject`, `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
   117  EndProject`},
   118  		},
   119  		{"withSlnFile", solution{path: testdataDir, slnFile: "oneproject.sln", projects: nil}, []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}"
   120  EndProject`},
   121  		},
   122  	}
   123  
   124  	for _, test := range tests {
   125  		t.Run(test.name, func(t *testing.T) {
   126  			results, err := test.solution.getProjectsFromSlns()
   127  			if err != nil {
   128  				t.Error(err)
   129  			}
   130  			replaceCarriageSign(results)
   131  
   132  			if !reflect.DeepEqual(test.expectedProjects, results) {
   133  				t.Error(fmt.Sprintf("Expected %s, got %s", test.expectedProjects, results))
   134  			}
   135  		})
   136  	}
   137  }
   138  
   139  // If running on Windows, replace \r\n with \n.
   140  func replaceCarriageSign(results []string) {
   141  	if runtime.GOOS == "windows" {
   142  		for i, result := range results {
   143  			results[i] = strings.Replace(result, "\r\n", "\n", -1)
   144  		}
   145  	}
   146  }