github.com/pluswing/datasync@v1.1.1-0.20240218052257-9077f6fc4ae3/file/file_test.go (about)

     1  package file
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  
     9  	"github.com/pluswing/datasync/data"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func setup(t *testing.T) string {
    14  	dir, err := os.MkdirTemp("", ".datasync_for_test")
    15  	assert.NoError(t, err)
    16  	os.Chdir(dir)
    17  	cwd, err := os.Getwd()
    18  	assert.NoError(t, err)
    19  	return cwd
    20  }
    21  
    22  func teardown(dir string) {
    23  	os.RemoveAll(dir)
    24  }
    25  
    26  func createFile(home string, file string, content string) {
    27  	os.WriteFile(filepath.Join(home, file), []byte(content), os.ModePerm)
    28  }
    29  
    30  func TestFindCurrentDir(t *testing.T) {
    31  	home := setup(t)
    32  	defer teardown(home)
    33  
    34  	dir, err := FindCurrentDir()
    35  	assert.Error(t, err)
    36  	assert.Equal(t, fmt.Errorf("config file not found"), err)
    37  	assert.Equal(t, "", dir)
    38  
    39  	createFile(home, "datasync.yaml", "")
    40  	dir, err = FindCurrentDir()
    41  	assert.NoError(t, err)
    42  	assert.Equal(t, home, dir)
    43  }
    44  
    45  func TestReadVersionFile(t *testing.T) {
    46  	home := setup(t)
    47  	defer teardown(home)
    48  
    49  	assert.Equal(t, "", ReadVersionFile())
    50  
    51  	createFile(home, ".datasync_version", "")
    52  	assert.Equal(t, "", ReadVersionFile())
    53  
    54  	createFile(home, "datasync.yaml", "")
    55  	assert.Equal(t, "", ReadVersionFile())
    56  
    57  	createFile(home, ".datasync_version", "123")
    58  	assert.Equal(t, "123", ReadVersionFile())
    59  
    60  	createFile(home, ".datasync_version", "456\n")
    61  	assert.Equal(t, "456", ReadVersionFile())
    62  }
    63  
    64  func TestVersionFile(t *testing.T) {
    65  	home := setup(t)
    66  	defer teardown(home)
    67  
    68  	createFile(home, "datasync.yaml", "")
    69  
    70  	err := UpdateVersionFile("345")
    71  	assert.NoError(t, err)
    72  	assert.Equal(t, "345", ReadVersionFile())
    73  
    74  	err = UpdateVersionFile("456")
    75  	assert.NoError(t, err)
    76  	assert.Equal(t, "456", ReadVersionFile())
    77  }
    78  
    79  func TestDataDir(t *testing.T) {
    80  	home := setup(t)
    81  	defer teardown(home)
    82  
    83  	dir, err := DataDir()
    84  	assert.Error(t, err)
    85  	assert.Equal(t, fmt.Errorf("config file not found"), err)
    86  	assert.Equal(t, "", dir)
    87  
    88  	createFile(home, "datasync.yaml", "")
    89  	dir, err = DataDir()
    90  	assert.NoError(t, err)
    91  	assert.Equal(t, filepath.Join(home, ".datasync"), dir)
    92  }
    93  
    94  func TestDataSyncFile(t *testing.T) {
    95  	home := setup(t)
    96  	defer teardown(home)
    97  
    98  	empty := data.DataSyncType{
    99  		Version:   "1",
   100  		Histories: []data.VersionType{},
   101  	}
   102  
   103  	createFile(home, "datasync.yaml", "")
   104  
   105  	r := ReadRemoteDataSyncFile()
   106  	assert.Equal(t, empty, r)
   107  
   108  	r = ReadLocalDataSyncFile()
   109  	assert.Equal(t, empty, r)
   110  
   111  	localData := data.DataSyncType{
   112  		Version: "1",
   113  		Histories: []data.VersionType{
   114  			{
   115  				Id:      "1",
   116  				Time:    1,
   117  				Message: "a",
   118  			}, {
   119  				Id:      "2",
   120  				Time:    2,
   121  				Message: "b",
   122  			},
   123  		},
   124  	}
   125  
   126  	WriteLocalDataSyncFile(localData)
   127  
   128  	r = ReadLocalDataSyncFile()
   129  	assert.Equal(t, localData, r)
   130  
   131  	moveData := localData.Histories[0]
   132  	restData := localData.Histories[1:]
   133  	MoveVersionToRemote(moveData)
   134  
   135  	r = ReadRemoteDataSyncFile()
   136  	assert.Equal(t, data.DataSyncType{
   137  		Version:   "1",
   138  		Histories: []data.VersionType{moveData},
   139  	}, r)
   140  
   141  	r = ReadLocalDataSyncFile()
   142  	assert.Equal(t, data.DataSyncType{
   143  		Version:   "1",
   144  		Histories: restData,
   145  	}, r)
   146  }
   147  
   148  func TestGetCurrentVersion(t *testing.T) {
   149  	home := setup(t)
   150  	defer teardown(home)
   151  
   152  	createFile(home, "datasync.yaml", "")
   153  
   154  	v, err := GetCurrentVersion([]string{})
   155  	assert.Error(t, err)
   156  	assert.Equal(t, fmt.Errorf("version not found."), err)
   157  	assert.Equal(t, data.VersionType{}, v)
   158  
   159  	UpdateVersionFile("123")
   160  
   161  	v, err = GetCurrentVersion([]string{})
   162  	assert.Error(t, err)
   163  	assert.Equal(t, fmt.Errorf("version not found."), err)
   164  	assert.Equal(t, data.VersionType{}, v)
   165  
   166  	localData := data.DataSyncType{
   167  		Version: "1",
   168  		Histories: []data.VersionType{
   169  			{
   170  				Id:      "123",
   171  				Time:    1,
   172  				Message: "a",
   173  			},
   174  			{
   175  				Id:      "456",
   176  				Time:    2,
   177  				Message: "b",
   178  			},
   179  		},
   180  	}
   181  
   182  	WriteLocalDataSyncFile(localData)
   183  
   184  	v, err = GetCurrentVersion([]string{})
   185  	assert.NoError(t, err)
   186  	assert.Equal(t, localData.Histories[0], v)
   187  
   188  	v, err = GetCurrentVersion([]string{"456"})
   189  	assert.NoError(t, err)
   190  	assert.Equal(t, localData.Histories[1], v)
   191  
   192  	v, err = GetCurrentVersion([]string{"789"})
   193  	assert.Error(t, err)
   194  	assert.Equal(t, fmt.Errorf("version not found."), err)
   195  	assert.Equal(t, data.VersionType{}, v)
   196  
   197  	MoveVersionToRemote(localData.Histories[0])
   198  
   199  	v, err = GetCurrentVersion([]string{})
   200  	assert.NoError(t, err)
   201  	assert.Equal(t, localData.Histories[0], v)
   202  
   203  	v, err = GetCurrentVersion([]string{"456"})
   204  	assert.NoError(t, err)
   205  	assert.Equal(t, localData.Histories[1], v)
   206  
   207  	v, err = GetCurrentVersion([]string{"789"})
   208  	assert.Error(t, err)
   209  	assert.Equal(t, fmt.Errorf("version not found."), err)
   210  	assert.Equal(t, data.VersionType{}, v)
   211  
   212  	MoveVersionToRemote(localData.Histories[1])
   213  
   214  	v, err = GetCurrentVersion([]string{})
   215  	assert.NoError(t, err)
   216  	assert.Equal(t, localData.Histories[0], v)
   217  
   218  	v, err = GetCurrentVersion([]string{"456"})
   219  	assert.NoError(t, err)
   220  	assert.Equal(t, localData.Histories[1], v)
   221  
   222  	v, err = GetCurrentVersion([]string{"789"})
   223  	assert.Error(t, err)
   224  	assert.Equal(t, fmt.Errorf("version not found."), err)
   225  	assert.Equal(t, data.VersionType{}, v)
   226  }
   227  
   228  func TestNewUUID(t *testing.T) {
   229  	uuid, err := NewUUID()
   230  	assert.NoError(t, err)
   231  	assert.Equal(t, 32, len(uuid))
   232  
   233  	uuid2, err := NewUUID()
   234  	assert.NoError(t, err)
   235  	assert.Equal(t, 32, len(uuid2))
   236  
   237  	assert.NotEqual(t, uuid, uuid2)
   238  }