|
@@ -0,0 +1,151 @@
|
|
|
+package settings
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "os"
|
|
|
+ "testing"
|
|
|
+
|
|
|
+ "github.com/stretchr/testify/assert"
|
|
|
+ "github.com/stretchr/testify/require"
|
|
|
+)
|
|
|
+
|
|
|
+func TestMigrationNothingToDo(t *testing.T) {
|
|
|
+ t.Parallel()
|
|
|
+ // Create temporary file for config
|
|
|
+ configFile, err := os.CreateTemp("/tmp", "yay-*-config.json")
|
|
|
+ require.NoError(t, err)
|
|
|
+
|
|
|
+ testFilePath := configFile.Name()
|
|
|
+ defer os.Remove(testFilePath)
|
|
|
+ // Create config with configVersion
|
|
|
+ config := Configuration{
|
|
|
+ Version: "99.0.0",
|
|
|
+ // Create runtime with runtimeVersion
|
|
|
+ Runtime: &Runtime{Version: "20.0.0"},
|
|
|
+ }
|
|
|
+
|
|
|
+ // Run Migration
|
|
|
+ err = config.RunMigrations(DefaultMigrations(), testFilePath)
|
|
|
+ require.NoError(t, err)
|
|
|
+
|
|
|
+ // Check file contents if wantSave otherwise check file empty
|
|
|
+ cfile, err := os.Open(testFilePath)
|
|
|
+ require.NoError(t, err)
|
|
|
+ defer cfile.Close()
|
|
|
+
|
|
|
+ decoder := json.NewDecoder(cfile)
|
|
|
+ newConfig := Configuration{}
|
|
|
+ err = decoder.Decode(&newConfig)
|
|
|
+ require.Error(t, err)
|
|
|
+ assert.Empty(t, newConfig.Version)
|
|
|
+}
|
|
|
+
|
|
|
+func TestProvidesMigrationDo(t *testing.T) {
|
|
|
+ migration := &configProviderMigration{}
|
|
|
+ config := Configuration{Provides: true}
|
|
|
+
|
|
|
+ assert.True(t, migration.Do(&config))
|
|
|
+
|
|
|
+ falseConfig := Configuration{Provides: false}
|
|
|
+
|
|
|
+ assert.False(t, migration.Do(&falseConfig))
|
|
|
+}
|
|
|
+
|
|
|
+func TestProvidesMigration(t *testing.T) {
|
|
|
+ t.Parallel()
|
|
|
+ type testCase struct {
|
|
|
+ desc string
|
|
|
+ testConfig *Configuration
|
|
|
+ wantSave bool
|
|
|
+ }
|
|
|
+
|
|
|
+ testCases := []testCase{
|
|
|
+ {
|
|
|
+ desc: "to upgrade",
|
|
|
+ testConfig: &Configuration{
|
|
|
+ Version: "11.0.1",
|
|
|
+ Runtime: &Runtime{Version: "11.2.1"},
|
|
|
+ Provides: true,
|
|
|
+ },
|
|
|
+ wantSave: true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ desc: "to upgrade-git",
|
|
|
+ testConfig: &Configuration{
|
|
|
+ Version: "11.2.0.r7.g6f60892",
|
|
|
+ Runtime: &Runtime{Version: "11.2.1"},
|
|
|
+ Provides: true,
|
|
|
+ },
|
|
|
+ wantSave: true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ desc: "to not upgrade",
|
|
|
+ testConfig: &Configuration{
|
|
|
+ Version: "11.2.0",
|
|
|
+ Runtime: &Runtime{Version: "11.2.1"},
|
|
|
+ Provides: false,
|
|
|
+ },
|
|
|
+ wantSave: false,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ desc: "to not upgrade - target version",
|
|
|
+ testConfig: &Configuration{
|
|
|
+ Version: "11.2.1",
|
|
|
+ Runtime: &Runtime{Version: "11.2.1"},
|
|
|
+ Provides: true,
|
|
|
+ },
|
|
|
+ wantSave: false,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ desc: "to not upgrade - new version",
|
|
|
+ testConfig: &Configuration{
|
|
|
+ Version: "11.3.0",
|
|
|
+ Runtime: &Runtime{Version: "11.3.0"},
|
|
|
+ Provides: true,
|
|
|
+ },
|
|
|
+ wantSave: false,
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, tc := range testCases {
|
|
|
+ t.Run(tc.desc, func(t *testing.T) {
|
|
|
+ // Create temporary file for config
|
|
|
+ configFile, err := os.CreateTemp("/tmp", "yay-*-config.json")
|
|
|
+ require.NoError(t, err)
|
|
|
+
|
|
|
+ testFilePath := configFile.Name()
|
|
|
+ defer os.Remove(testFilePath)
|
|
|
+ // Create config with configVersion and provides
|
|
|
+ tcConfig := Configuration{
|
|
|
+ Version: tc.testConfig.Version,
|
|
|
+ Provides: tc.testConfig.Provides,
|
|
|
+ // Create runtime with runtimeVersion
|
|
|
+ Runtime: &Runtime{Version: tc.testConfig.Runtime.Version},
|
|
|
+ }
|
|
|
+
|
|
|
+ // Run Migration
|
|
|
+ err = tcConfig.RunMigrations(
|
|
|
+ []configMigration{&configProviderMigration{}},
|
|
|
+ testFilePath)
|
|
|
+
|
|
|
+ require.NoError(t, err)
|
|
|
+
|
|
|
+ // Check file contents if wantSave otherwise check file empty
|
|
|
+ cfile, err := os.Open(testFilePath)
|
|
|
+ require.NoError(t, err)
|
|
|
+ defer cfile.Close()
|
|
|
+
|
|
|
+ decoder := json.NewDecoder(cfile)
|
|
|
+ newConfig := Configuration{}
|
|
|
+ err = decoder.Decode(&newConfig)
|
|
|
+ if tc.wantSave {
|
|
|
+ require.NoError(t, err)
|
|
|
+ assert.Equal(t, tc.testConfig.Runtime.Version, newConfig.Version)
|
|
|
+ assert.Equal(t, false, newConfig.Provides)
|
|
|
+ } else {
|
|
|
+ require.Error(t, err)
|
|
|
+ assert.Empty(t, newConfig.Version)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|