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  }