github.com/emmahsax/go-git-helper@v0.0.8-0.20240519163017-907b9de0fa52/internal/gitlabMergeRequest/gitlabMergeRequest_test.go (about)

     1  package gitlabMergeRequest
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"sort"
     7  	"testing"
     8  
     9  	"github.com/emmahsax/go-git-helper/internal/commandline"
    10  )
    11  
    12  func Test_determineTitle(t *testing.T) {
    13  	tests := []struct {
    14  		name     string
    15  		title    string
    16  		draft    string
    17  		expected string
    18  	}{
    19  		{
    20  			name:     "draft",
    21  			title:    "hello world",
    22  			draft:    "true",
    23  			expected: "Draft: hello world",
    24  		},
    25  		{
    26  			name:     "no draft",
    27  			title:    "hello world",
    28  			draft:    "false",
    29  			expected: "hello world",
    30  		},
    31  	}
    32  
    33  	for _, test := range tests {
    34  		mr := NewGitLabMergeRequest(
    35  			map[string]string{
    36  				"baseBranch":   "master",
    37  				"localProject": "project",
    38  				"localBranch":  "feature",
    39  				"gitRootDir":   "/path/to/repo",
    40  				"newMrTitle":   test.title,
    41  				"draft":        test.draft,
    42  			},
    43  			false,
    44  		)
    45  		actual := mr.determineTitle()
    46  
    47  		if test.expected != actual {
    48  			t.Errorf("expected '%s', got '%s'", test.expected, actual)
    49  		}
    50  	}
    51  }
    52  
    53  func Test_newMrBody(t *testing.T) {
    54  	tempDir, err := os.MkdirTemp("", "gitlab")
    55  	if err != nil {
    56  		t.Fatal(err)
    57  	}
    58  	defer os.RemoveAll(tempDir)
    59  
    60  	err = os.MkdirAll(filepath.Join(tempDir, ".gitlab", "merge_request_templates"), 0755)
    61  	if err != nil {
    62  		t.Fatal(err)
    63  	}
    64  
    65  	files := []string{
    66  		".gitlab/merge_request_template.md",
    67  		".gitlab/merge_request_templates/template1.md",
    68  		".gitlab/merge_request_templates/template2.md",
    69  		"merge_request_template.md",
    70  	}
    71  	for _, file := range files {
    72  		err = os.WriteFile(filepath.Join(tempDir, file), []byte("content"), 0644)
    73  		if err != nil {
    74  			t.Fatal(err)
    75  		}
    76  	}
    77  
    78  	mr := &GitLabMergeRequest{
    79  		GitRootDir: tempDir,
    80  	}
    81  
    82  	originalAskYesNoQuestion := commandline.AskYesNoQuestion
    83  	t.Cleanup(func() {
    84  		commandline.AskYesNoQuestion = originalAskYesNoQuestion
    85  	})
    86  	commandline.AskYesNoQuestion = func(question string) bool {
    87  		return true
    88  	}
    89  
    90  	originalAskMultipleChoice := commandline.AskMultipleChoice
    91  	t.Cleanup(func() {
    92  		commandline.AskMultipleChoice = originalAskMultipleChoice
    93  	})
    94  	commandline.AskMultipleChoice = func(question string, choices []string) string {
    95  		return ""
    96  	}
    97  
    98  	expected := ""
    99  	actual := mr.newMrBody()
   100  
   101  	if expected != actual {
   102  		t.Errorf("expected '%s', got '%s'", expected, actual)
   103  	}
   104  }
   105  
   106  func Test_templateNameToApply(t *testing.T) {
   107  	tempDir, err := os.MkdirTemp("", "gitlab")
   108  	if err != nil {
   109  		t.Fatal(err)
   110  	}
   111  	defer os.RemoveAll(tempDir)
   112  
   113  	err = os.MkdirAll(filepath.Join(tempDir, ".gitlab", "merge_request_templates"), 0755)
   114  	if err != nil {
   115  		t.Fatal(err)
   116  	}
   117  
   118  	files := []string{
   119  		".gitlab/merge_request_template.md",
   120  		".gitlab/merge_request_templates/template1.md",
   121  		".gitlab/merge_request_templates/template2.md",
   122  		"merge_request_template.md",
   123  	}
   124  	for _, file := range files {
   125  		err = os.WriteFile(filepath.Join(tempDir, file), []byte("content"), 0644)
   126  		if err != nil {
   127  			t.Fatal(err)
   128  		}
   129  	}
   130  
   131  	mr := &GitLabMergeRequest{
   132  		GitRootDir: tempDir,
   133  	}
   134  
   135  	originalAskYesNoQuestion := commandline.AskYesNoQuestion
   136  	t.Cleanup(func() {
   137  		commandline.AskYesNoQuestion = originalAskYesNoQuestion
   138  	})
   139  	commandline.AskYesNoQuestion = func(question string) bool {
   140  		return true
   141  	}
   142  
   143  	originalAskMultipleChoice := commandline.AskMultipleChoice
   144  	t.Cleanup(func() {
   145  		commandline.AskMultipleChoice = originalAskMultipleChoice
   146  	})
   147  	commandline.AskMultipleChoice = func(question string, choices []string) string {
   148  		return "/path/to/repo/.gitlab/merge_request_template.md"
   149  	}
   150  
   151  	expected := "/path/to/repo/.gitlab/merge_request_template.md"
   152  	actual := mr.templateNameToApply()
   153  
   154  	if expected != actual {
   155  		t.Errorf("expected '%s', got '%s'", expected, actual)
   156  	}
   157  }
   158  
   159  func Test_determineTemplate(t *testing.T) {
   160  	mr := &GitLabMergeRequest{
   161  		GitRootDir: "/path/to/repo",
   162  	}
   163  
   164  	originalAskYesNoQuestion := commandline.AskYesNoQuestion
   165  	t.Cleanup(func() {
   166  		commandline.AskYesNoQuestion = originalAskYesNoQuestion
   167  	})
   168  	commandline.AskYesNoQuestion = func(question string) bool {
   169  		return true
   170  	}
   171  
   172  	originalAskMultipleChoice := commandline.AskMultipleChoice
   173  	t.Cleanup(func() {
   174  		commandline.AskMultipleChoice = originalAskMultipleChoice
   175  	})
   176  	commandline.AskMultipleChoice = func(question string, choices []string) string {
   177  		return "/path/to/repo/.gitlab/merge_request_template.md"
   178  	}
   179  
   180  	expected := "/path/to/repo/.gitlab/merge_request_template.md"
   181  	actual := mr.determineTemplate()
   182  
   183  	if expected != actual {
   184  		t.Errorf("expected '%s', got '%s'", expected, actual)
   185  	}
   186  }
   187  
   188  func Test_mrTemplateOptions(t *testing.T) {
   189  	tempDir, err := os.MkdirTemp("", "gitlab")
   190  	if err != nil {
   191  		t.Fatal(err)
   192  	}
   193  	defer os.RemoveAll(tempDir)
   194  
   195  	err = os.MkdirAll(filepath.Join(tempDir, ".gitlab", "merge_request_templates"), 0755)
   196  	if err != nil {
   197  		t.Fatal(err)
   198  	}
   199  
   200  	files := []string{
   201  		".gitlab/merge_request_template.md",
   202  		".gitlab/merge_request_templates/template1.md",
   203  		".gitlab/merge_request_templates/template2.md",
   204  		"merge_request_template.md",
   205  	}
   206  	for _, file := range files {
   207  		err = os.WriteFile(filepath.Join(tempDir, file), []byte("content"), 0644)
   208  		if err != nil {
   209  			t.Fatal(err)
   210  		}
   211  	}
   212  
   213  	mr := &GitLabMergeRequest{
   214  		GitRootDir: tempDir,
   215  	}
   216  
   217  	expected := []string{
   218  		filepath.Join(tempDir, ".gitlab/merge_request_template.md"),
   219  		filepath.Join(tempDir, ".gitlab/merge_request_templates/template1.md"),
   220  		filepath.Join(tempDir, ".gitlab/merge_request_templates/template2.md"),
   221  		filepath.Join(tempDir, "merge_request_template.md"),
   222  	}
   223  	actual := mr.mrTemplateOptions()
   224  
   225  	if len(expected) != len(actual) {
   226  		t.Fatalf("Expected and actual slices have different lengths: expected %v, got %v", len(expected), len(actual))
   227  	}
   228  
   229  	sort.Strings(expected)
   230  	sort.Strings(actual)
   231  
   232  	for i := range expected {
   233  		if expected[i] != actual[i] {
   234  			t.Fatalf("Expected and actual slices do not match: expected %v, got %v", expected, actual)
   235  		}
   236  	}
   237  }