github.com/fsmiamoto/ck@v0.0.2-0.20200603013204-6b305c3a6c30/git/git_test.go (about)

     1  package git
     2  
     3  import (
     4  	"log"
     5  	"os"
     6  	"reflect"
     7  	"sort"
     8  	"testing"
     9  	"time"
    10  
    11  	gogit "github.com/go-git/go-git/v5"
    12  	"github.com/go-git/go-git/v5/plumbing"
    13  	"github.com/go-git/go-git/v5/plumbing/object"
    14  )
    15  
    16  const testingDirectory = ".tests"
    17  
    18  var testBranches = []string{"development", "staging", "feat/abc", "master"}
    19  
    20  var repo *gogit.Repository
    21  
    22  func TestMain(m *testing.M) {
    23  	check(setup())
    24  	os.Exit(m.Run())
    25  }
    26  
    27  func TestBranchNames(t *testing.T) {
    28  	branches, err := branchNamesFromRepo(repo)
    29  
    30  	assertNoError(t, err)
    31  
    32  	sort.Strings(testBranches)
    33  	sort.Strings(branches)
    34  
    35  	if !reflect.DeepEqual(branches, testBranches) {
    36  		t.Errorf("Expected %v but got %v", testBranches, branches)
    37  	}
    38  }
    39  
    40  func TestCheckout(t *testing.T) {
    41  	tests := []struct {
    42  		name        string
    43  		branch      string
    44  		expectError bool
    45  	}{
    46  		{"existing branch", "feat/abc", false},
    47  		{"non-existing branch", "nani", true},
    48  	}
    49  
    50  	for _, tt := range tests {
    51  		err := checkoutInRepo(repo, tt.branch)
    52  
    53  		if tt.expectError {
    54  			if err == nil {
    55  				t.Errorf("Expected an error but got none")
    56  			}
    57  			continue
    58  		}
    59  
    60  		assertNoError(t, err)
    61  
    62  		ref, err := repo.Head()
    63  		assertNoError(t, err)
    64  
    65  		if ref.Name().Short() != tt.branch {
    66  			t.Errorf("Expected HEAD to be at %v but is at %v", tt.branch, ref.Name().Short())
    67  		}
    68  	}
    69  
    70  }
    71  
    72  func assertNoError(t *testing.T, err error) {
    73  	if err != nil {
    74  		t.Errorf("Expected no error but got one: %v", err)
    75  	}
    76  }
    77  
    78  func check(err error) {
    79  	if err != nil {
    80  		log.Fatal(err)
    81  	}
    82  }
    83  
    84  func setup() error {
    85  	os.RemoveAll(testingDirectory)
    86  
    87  	err := os.Mkdir(testingDirectory, 0700)
    88  	if err != nil {
    89  		return err
    90  	}
    91  
    92  	os.Chdir(testingDirectory)
    93  
    94  	err = os.RemoveAll(".git")
    95  	if err != nil {
    96  		return err
    97  	}
    98  
    99  	r, err := gogit.PlainInit(".", false)
   100  	if err != nil {
   101  		return err
   102  	}
   103  
   104  	file, err := os.Create("test.txt")
   105  	if err != nil {
   106  		return err
   107  	}
   108  
   109  	file.WriteString("Hello World!")
   110  	err = file.Close()
   111  	if err != nil {
   112  		return err
   113  	}
   114  
   115  	w, err := r.Worktree()
   116  	if err != nil {
   117  		return err
   118  	}
   119  
   120  	w.Add(".")
   121  
   122  	_, err = w.Commit("initial commit", &gogit.CommitOptions{
   123  		Author: &object.Signature{
   124  			Name:  "Levi Ackermann",
   125  			Email: "lackermann@email.com",
   126  			When:  time.Now(),
   127  		},
   128  	})
   129  
   130  	if err != nil {
   131  		return err
   132  	}
   133  
   134  	for _, b := range testBranches {
   135  		headRef, err := r.Head()
   136  		if err != nil {
   137  			return err
   138  		}
   139  
   140  		ref := plumbing.NewReferenceFromStrings("refs/heads/"+b, headRef.Hash().String())
   141  		err = r.Storer.SetReference(ref)
   142  		if err != nil {
   143  			return err
   144  		}
   145  	}
   146  	repo = r
   147  	return nil
   148  }