github.com/wrgl/wrgl@v0.14.0/pkg/conf/fs/store_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright © 2022 Wrangle Ltd 3 4 package conffs 5 6 import ( 7 "os" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 "github.com/wrgl/wrgl/pkg/conf" 13 confhelpers "github.com/wrgl/wrgl/pkg/conf/helpers" 14 "github.com/wrgl/wrgl/pkg/testutils" 15 ) 16 17 func randomConfig() *conf.Config { 18 return &conf.Config{ 19 User: &conf.User{ 20 Name: testutils.BrokenRandomAlphaNumericString(8), 21 Email: testutils.BrokenRandomAlphaNumericString(10), 22 }, 23 } 24 } 25 26 func TestOpenSystemConfig(t *testing.T) { 27 cleanup := confhelpers.MockSystemConf(t) 28 defer cleanup() 29 30 s := NewStore("", SystemSource, "") 31 c1 := randomConfig() 32 require.NoError(t, s.Save(c1)) 33 34 c2, err := s.Open() 35 require.NoError(t, err) 36 assert.Equal(t, c1, c2) 37 } 38 39 func TestOpenGlobalConfig(t *testing.T) { 40 for _, b := range []bool{true, false} { 41 cleanup := confhelpers.MockGlobalConf(t, b) 42 defer cleanup() 43 44 s := NewStore("", GlobalSource, "") 45 c1, err := s.Open() 46 require.NoError(t, err) 47 c1.User = &conf.User{ 48 Name: "John Doe", 49 Email: "john@domain.com", 50 } 51 require.NoError(t, s.Save(c1)) 52 53 c2, err := s.Open() 54 require.NoError(t, err) 55 assert.Equal(t, c1, c2) 56 } 57 } 58 59 func TestOpenLocalConfig(t *testing.T) { 60 rd, err := testutils.TempDir("", "test_wrgl_config") 61 require.NoError(t, err) 62 defer os.RemoveAll(rd) 63 64 s := NewStore(rd, LocalSource, "") 65 c1, err := s.Open() 66 require.NoError(t, err) 67 c1.User = &conf.User{ 68 Name: "John Doe", 69 Email: "john@domain.com", 70 } 71 require.NoError(t, s.Save(c1)) 72 73 c2, err := s.Open() 74 require.NoError(t, err) 75 assert.Equal(t, c1, c2) 76 } 77 78 func TestOpenFileConfig(t *testing.T) { 79 f, err := testutils.TempFile("", "test_wrgl_config*.yaml") 80 require.NoError(t, err) 81 require.NoError(t, f.Close()) 82 defer os.Remove(f.Name()) 83 84 s := NewStore("", FileSource, f.Name()) 85 c1 := randomConfig() 86 require.NoError(t, s.Save(c1)) 87 88 c2, err := s.Open() 89 require.NoError(t, err) 90 assert.Equal(t, c1, c2) 91 } 92 93 func TestAggregateConfig(t *testing.T) { 94 cleanup := confhelpers.MockSystemConf(t) 95 defer cleanup() 96 cleanup = confhelpers.MockGlobalConf(t, true) 97 defer cleanup() 98 rd, err := testutils.TempDir("", "test_wrgl_config") 99 require.NoError(t, err) 100 defer os.RemoveAll(rd) 101 102 // write system config 103 s := NewStore(rd, SystemSource, "") 104 c, err := s.Open() 105 require.NoError(t, err) 106 yes := true 107 no := false 108 c.Receive = &conf.Receive{ 109 DenyNonFastForwards: &yes, 110 DenyDeletes: &yes, 111 } 112 require.NoError(t, s.Save(c)) 113 114 // write global config 115 s = NewStore(rd, GlobalSource, "") 116 c, err = s.Open() 117 require.NoError(t, err) 118 c.User = &conf.User{ 119 Name: "Jane Lane", 120 Email: "jane@domain.com", 121 } 122 require.NoError(t, s.Save(c)) 123 124 // write local config 125 s = NewStore(rd, LocalSource, "") 126 require.NoError(t, err) 127 c.Remote = map[string]*conf.Remote{ 128 "origin": { 129 Fetch: []*conf.Refspec{ 130 conf.MustParseRefspec("+refs/heads/*:refs/remotes/origin/*"), 131 }, 132 Push: []*conf.Refspec{ 133 conf.MustParseRefspec("refs/heads/main:refs/heads/main"), 134 }, 135 }, 136 } 137 c.Receive = &conf.Receive{ 138 DenyDeletes: &no, 139 } 140 require.NoError(t, s.Save(c)) 141 142 // aggregate 143 s = NewStore(rd, AggregateSource, "") 144 c, err = s.Open() 145 require.NoError(t, err) 146 assert.Equal(t, &conf.Config{ 147 User: &conf.User{ 148 Name: "Jane Lane", 149 Email: "jane@domain.com", 150 }, 151 Remote: map[string]*conf.Remote{ 152 "origin": { 153 Fetch: []*conf.Refspec{ 154 conf.MustParseRefspec("+refs/heads/*:refs/remotes/origin/*"), 155 }, 156 Push: []*conf.Refspec{ 157 conf.MustParseRefspec("refs/heads/main:refs/heads/main"), 158 }, 159 }, 160 }, 161 Receive: &conf.Receive{ 162 DenyNonFastForwards: &yes, 163 DenyDeletes: &no, 164 }, 165 }, c) 166 assert.Error(t, s.Save(c)) 167 }