github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/test/scripts/cmd/dependencies/files_test.go (about) 1 package dependencies 2 3 import ( 4 "testing" 5 6 "github.com/0xPolygon/supernets2-node/test/testutils" 7 "github.com/spf13/afero" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func Test_updateFiles(t *testing.T) { 12 const ( 13 defaultTargetDir = "/a/b/src" 14 defaultSourceDir = "/tmp/src" 15 ) 16 17 var appFs = afero.NewMemMapFs() 18 19 tcs := []struct { 20 description string 21 initialSourceFiles map[string]string 22 initialTargetFiles map[string]string 23 expectedTargetFiles map[string]string 24 }{ 25 { 26 description: "single file matching file", 27 initialSourceFiles: map[string]string{ 28 "/tmp/src/a": "new-a-content", 29 }, 30 initialTargetFiles: map[string]string{ 31 "/a/b/src/a": "old-a-content", 32 }, 33 expectedTargetFiles: map[string]string{ 34 "/a/b/src/a": "new-a-content", 35 }, 36 }, 37 { 38 description: "single file matching file with non-matching files", 39 initialSourceFiles: map[string]string{ 40 "/tmp/src/a": "new-a-content", 41 "/tmp/src/b": "new-b-content", 42 }, 43 initialTargetFiles: map[string]string{ 44 "/a/b/src/a": "old-a-content", 45 }, 46 expectedTargetFiles: map[string]string{ 47 "/a/b/src/a": "new-a-content", 48 }, 49 }, 50 { 51 description: "multiple matching files", 52 initialSourceFiles: map[string]string{ 53 "/tmp/src/a.json": "new-a-content", 54 "/tmp/src/subdir1/subdir2/b.json": "new-b-content", 55 }, 56 initialTargetFiles: map[string]string{ 57 "/a/b/src/a.json": "old-a-content", 58 "/a/b/src/subdir1/subdir2/b.json": "old-b-content", 59 }, 60 expectedTargetFiles: map[string]string{ 61 "/a/b/src/a.json": "new-a-content", 62 "/a/b/src/subdir1/subdir2/b.json": "new-b-content", 63 }, 64 }, 65 { 66 description: "multiple matching files with non matching files", 67 initialSourceFiles: map[string]string{ 68 "/tmp/src/subdira1/a.json": "new-a-content", 69 "/tmp/src/subdirb1/subdirb2/b.json": "new-b-content", 70 "/tmp/src/c.json": "new-c-content", 71 }, 72 initialTargetFiles: map[string]string{ 73 "/a/b/src/subdira1/a.json": "old-a-content", 74 "/a/b/src/subdirb1/subdirb2/b.json": "old-b-content", 75 }, 76 expectedTargetFiles: map[string]string{ 77 "/a/b/src/subdira1/a.json": "new-a-content", 78 "/a/b/src/subdirb1/subdirb2/b.json": "new-b-content", 79 }, 80 }, 81 { 82 description: "unexisting target file does not give error", 83 initialSourceFiles: map[string]string{ 84 "/tmp/src/subdira1/a.json": "new-a-content", 85 "/tmp/src/subdirb1/subdirb2/b.json": "new-b-content", 86 "/tmp/src/c.json": "new-c-content", 87 }, 88 initialTargetFiles: map[string]string{ 89 "/a/b/src/subdira1/a.json": "old-a-content", 90 "/a/b/src/subdir1/subdir2/d.json": "old-d-content", 91 }, 92 expectedTargetFiles: map[string]string{ 93 "/a/b/src/subdira1/a.json": "new-a-content", 94 "/a/b/src/subdir1/subdir2/d.json": "old-d-content", 95 }, 96 }, 97 } 98 99 for _, tc := range tcs { 100 tc := tc 101 t.Run(tc.description, func(t *testing.T) { 102 require.NoError(t, testutils.CreateTestFiles(appFs, tc.initialSourceFiles)) 103 require.NoError(t, testutils.CreateTestFiles(appFs, tc.initialTargetFiles)) 104 105 require.NoError(t, updateFiles(appFs, defaultSourceDir, defaultTargetDir)) 106 a := afero.Afero{Fs: appFs} 107 for path, expectedContent := range tc.expectedTargetFiles { 108 actualContent, err := a.ReadFile(path) 109 require.NoError(t, err) 110 require.Equal(t, expectedContent, string(actualContent)) 111 } 112 require.NoError(t, appFs.RemoveAll(defaultSourceDir)) 113 require.NoError(t, appFs.RemoveAll(defaultTargetDir)) 114 }) 115 } 116 }