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  }