github.com/git-hooks/git-hooks@v1.3.1/util_test.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/stretchr/testify/assert"
     6  	"github.com/urfave/cli"
     7  	"io/ioutil"
     8  	"net/http"
     9  	"net/http/httptest"
    10  	"os"
    11  	"path/filepath"
    12  	"testing"
    13  )
    14  
    15  func TestGetGitRoot(t *testing.T) {
    16  	root, err := getGitRepoRoot()
    17  	assert.Nil(t, err)
    18  	assert.Equal(t, "git-hooks", filepath.Base(root))
    19  }
    20  
    21  func TestGetDirPath(t *testing.T) {
    22  	path, err := getGitDirPath()
    23  	assert.Nil(t, err)
    24  	assert.Equal(t, ".git", filepath.Base(path))
    25  }
    26  
    27  func TestGitExec(t *testing.T) {
    28  	identity, err := gitExec(GIT["FirstCommit"])
    29  	assert.Nil(t, err)
    30  	assert.Equal(t, "553ec650fd4f90003774e2ff00b10bc9aa9ec802", identity)
    31  }
    32  
    33  func TestGitExecWithDir(t *testing.T) {
    34  	wd, err := os.Getwd()
    35  	assert.Nil(t, err)
    36  
    37  	identity, err := gitExecWithDir(wd, GIT["FirstCommit"])
    38  	assert.Nil(t, err)
    39  	assert.Equal(t, "553ec650fd4f90003774e2ff00b10bc9aa9ec802", identity)
    40  }
    41  
    42  func TestBind(t *testing.T) {
    43  	sum := 0
    44  	f := bind(func(a, b int) {
    45  		sum = a + b
    46  	}, 1, 2)
    47  	f(&cli.Context{})
    48  	assert.Equal(t, 3, sum)
    49  }
    50  
    51  func TestExists(t *testing.T) {
    52  	isExist, err := exists("notExistFileName")
    53  	assert.Nil(t, err)
    54  	assert.False(t, isExist)
    55  }
    56  
    57  func TestDownloadFromUrl(t *testing.T) {
    58  	content := "Hello, client"
    59  	// start test server
    60  	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    61  		fmt.Fprint(w, content)
    62  	}))
    63  	defer ts.Close()
    64  
    65  	fileName, err := downloadFromUrl(ts.URL)
    66  	assert.Nil(t, err)
    67  
    68  	file, err := os.Open(fileName)
    69  	assert.Nil(t, err)
    70  
    71  	fileinfo, err := file.Stat()
    72  	assert.Nil(t, err)
    73  
    74  	b := make([]byte, fileinfo.Size())
    75  	_, err = file.Read(b)
    76  	assert.Nil(t, err)
    77  	assert.Equal(t, string(b), content)
    78  }
    79  
    80  func TestExtract(t *testing.T) {
    81  	fileName, err := extract("./fixtures/test.tar.gz")
    82  	assert.Nil(t, err)
    83  
    84  	file, err := os.Open(fileName)
    85  	assert.Nil(t, err)
    86  
    87  	fileinfo, err := file.Stat()
    88  	assert.Nil(t, err)
    89  
    90  	bytes := make([]byte, fileinfo.Size())
    91  	_, err = file.Read(bytes)
    92  	assert.Nil(t, err)
    93  	// vim store the file with extra newline at the EOF
    94  	assert.Equal(t, "test\n", string(bytes))
    95  }
    96  
    97  func TestAbsExePath(t *testing.T) {
    98  	path, err := absExePath("ls")
    99  	assert.Nil(t, err)
   100  	assert.Equal(t, "/bin/ls", path)
   101  
   102  	// should follow symlic
   103  	temp, err := ioutil.TempDir(os.TempDir(), "git-hooks-test")
   104  	assert.Nil(t, err)
   105  	os.Setenv("PATH", temp+":$PATH")
   106  	err = os.Symlink("/bin/ls", filepath.Join(temp, "ls"))
   107  	assert.Nil(t, err)
   108  	path, err = absExePath("ls")
   109  	assert.Nil(t, err)
   110  	assert.Equal(t, "/bin/ls", path)
   111  }
   112  
   113  func TestIsExecutable(t *testing.T) {
   114  	fileinfo, err := os.Stat("/bin/ls")
   115  	assert.Nil(t, err)
   116  	assert.True(t, isExecutable(fileinfo))
   117  }