github.com/wrgl/wrgl@v0.14.0/pkg/local/repo_dir_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright © 2022 Wrangle Ltd
     3  
     4  package local
     5  
     6  import (
     7  	"os"
     8  	"path/filepath"
     9  	"testing"
    10  
    11  	"github.com/fsnotify/fsnotify"
    12  	"github.com/stretchr/testify/assert"
    13  	"github.com/stretchr/testify/require"
    14  	confhelpers "github.com/wrgl/wrgl/pkg/conf/helpers"
    15  	"github.com/wrgl/wrgl/pkg/testutils"
    16  )
    17  
    18  func TestRepoDirInit(t *testing.T) {
    19  	dir, err := testutils.TempDir("", "test_repo_dir")
    20  	require.NoError(t, err)
    21  	defer os.RemoveAll(dir)
    22  	wrglDir := filepath.Join(dir, ".wrgl")
    23  	rd, err := NewRepoDir(wrglDir, "")
    24  	require.NoError(t, err)
    25  	assert.Equal(t, wrglDir, rd.FullPath)
    26  	assert.False(t, rd.Exist())
    27  	err = rd.Init()
    28  	require.NoError(t, err)
    29  	assert.True(t, rd.Exist())
    30  
    31  	_, err = os.Stat(rd.KVPath())
    32  	require.NoError(t, err)
    33  	kvs, err := rd.OpenObjectsStore()
    34  	require.NoError(t, err)
    35  	defer kvs.Close()
    36  
    37  	rs := rd.OpenRefStore()
    38  	require.NoError(t, rs.Set("heads/my-branch", []byte("abc123")))
    39  	v, err := rs.Get("heads/my-branch")
    40  	require.NoError(t, err)
    41  	assert.Equal(t, []byte("abc123"), v)
    42  }
    43  
    44  func TestFindWrglDir(t *testing.T) {
    45  	dir, err := testutils.TempDir("", "test_find_wrgl_dir")
    46  	require.NoError(t, err)
    47  	defer os.RemoveAll(dir)
    48  	dir, err = filepath.EvalSymlinks(dir)
    49  	require.NoError(t, err)
    50  	home, cleanup := confhelpers.MockHomeDir(t, dir)
    51  	defer cleanup()
    52  
    53  	require.NoError(t, os.Chdir(dir))
    54  	p, err := FindWrglDir()
    55  	require.NoError(t, err)
    56  	assert.Empty(t, p)
    57  
    58  	wrglDir := filepath.Join(dir, ".wrgl")
    59  	require.NoError(t, os.Mkdir(wrglDir, 0755))
    60  	p, err = FindWrglDir()
    61  	require.NoError(t, err)
    62  	assert.Equal(t, wrglDir, p)
    63  
    64  	require.NoError(t, os.Mkdir(filepath.Join(dir, "abc"), 0755))
    65  	require.NoError(t, os.Chdir(filepath.Join(dir, "abc")))
    66  	p, err = FindWrglDir()
    67  	require.NoError(t, err)
    68  	assert.Equal(t, wrglDir, p)
    69  
    70  	require.NoError(t, os.Chdir(home))
    71  	p, err = FindWrglDir()
    72  	require.NoError(t, err)
    73  	assert.Empty(t, p)
    74  
    75  	require.NoError(t, os.Mkdir(filepath.Join(home, "tmp"), 0755))
    76  	require.NoError(t, os.Chdir(filepath.Join(home, "tmp")))
    77  	p, err = FindWrglDir()
    78  	require.NoError(t, err)
    79  	assert.Empty(t, p)
    80  
    81  	wrglDir = filepath.Join(home, ".wrgl")
    82  	require.NoError(t, os.Mkdir(wrglDir, 0755))
    83  	require.NoError(t, os.Chdir(home))
    84  	p, err = FindWrglDir()
    85  	require.NoError(t, err)
    86  	assert.Equal(t, wrglDir, p)
    87  	require.NoError(t, os.Chdir(filepath.Join(home, "tmp")))
    88  	p, err = FindWrglDir()
    89  	require.NoError(t, err)
    90  	assert.Equal(t, wrglDir, p)
    91  }
    92  
    93  func TestRepoDirWatcher(t *testing.T) {
    94  	dir, err := testutils.TempDir("", "test_repo_dir")
    95  	require.NoError(t, err)
    96  	defer os.RemoveAll(dir)
    97  	rd, err := NewRepoDir(dir, "")
    98  	require.NoError(t, err)
    99  	defer rd.Close()
   100  
   101  	w, err := rd.Watcher()
   102  	require.NoError(t, err)
   103  	fp := filepath.Join(dir, "abc.txt")
   104  	f, err := os.Create(fp)
   105  	require.NoError(t, err)
   106  	_, err = f.Write([]byte("def"))
   107  	require.NoError(t, err)
   108  	require.NoError(t, err)
   109  	event := <-w.Events
   110  	assert.Equal(t, fsnotify.Event{
   111  		Name: fp,
   112  		Op:   fsnotify.Create,
   113  	}, event)
   114  }