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 }