migrations_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package settings
  2. import (
  3. "encoding/json"
  4. "os"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/stretchr/testify/require"
  8. )
  9. func TestMigrationNothingToDo(t *testing.T) {
  10. t.Parallel()
  11. // Create temporary file for config
  12. configFile, err := os.CreateTemp("/tmp", "yay-*-config.json")
  13. require.NoError(t, err)
  14. testFilePath := configFile.Name()
  15. defer os.Remove(testFilePath)
  16. // Create config with configVersion
  17. config := Configuration{
  18. Version: "99.0.0",
  19. // Create runtime with runtimeVersion
  20. Runtime: &Runtime{Version: "20.0.0"},
  21. }
  22. // Run Migration
  23. err = config.RunMigrations(DefaultMigrations(), testFilePath)
  24. require.NoError(t, err)
  25. // Check file contents if wantSave otherwise check file empty
  26. cfile, err := os.Open(testFilePath)
  27. require.NoError(t, err)
  28. defer cfile.Close()
  29. decoder := json.NewDecoder(cfile)
  30. newConfig := Configuration{}
  31. err = decoder.Decode(&newConfig)
  32. require.Error(t, err)
  33. assert.Empty(t, newConfig.Version)
  34. }
  35. func TestProvidesMigrationDo(t *testing.T) {
  36. migration := &configProviderMigration{}
  37. config := Configuration{Provides: true}
  38. assert.True(t, migration.Do(&config))
  39. falseConfig := Configuration{Provides: false}
  40. assert.False(t, migration.Do(&falseConfig))
  41. }
  42. func TestProvidesMigration(t *testing.T) {
  43. t.Parallel()
  44. type testCase struct {
  45. desc string
  46. testConfig *Configuration
  47. wantSave bool
  48. }
  49. testCases := []testCase{
  50. {
  51. desc: "to upgrade",
  52. testConfig: &Configuration{
  53. Version: "11.0.1",
  54. Runtime: &Runtime{Version: "11.2.1"},
  55. Provides: true,
  56. },
  57. wantSave: true,
  58. },
  59. {
  60. desc: "to upgrade-git",
  61. testConfig: &Configuration{
  62. Version: "11.2.0.r7.g6f60892",
  63. Runtime: &Runtime{Version: "11.2.1"},
  64. Provides: true,
  65. },
  66. wantSave: true,
  67. },
  68. {
  69. desc: "to not upgrade",
  70. testConfig: &Configuration{
  71. Version: "11.2.0",
  72. Runtime: &Runtime{Version: "11.2.1"},
  73. Provides: false,
  74. },
  75. wantSave: false,
  76. },
  77. {
  78. desc: "to not upgrade - target version",
  79. testConfig: &Configuration{
  80. Version: "11.2.1",
  81. Runtime: &Runtime{Version: "11.2.1"},
  82. Provides: true,
  83. },
  84. wantSave: false,
  85. },
  86. {
  87. desc: "to not upgrade - new version",
  88. testConfig: &Configuration{
  89. Version: "11.3.0",
  90. Runtime: &Runtime{Version: "11.3.0"},
  91. Provides: true,
  92. },
  93. wantSave: false,
  94. },
  95. }
  96. for _, tc := range testCases {
  97. t.Run(tc.desc, func(t *testing.T) {
  98. // Create temporary file for config
  99. configFile, err := os.CreateTemp("/tmp", "yay-*-config.json")
  100. require.NoError(t, err)
  101. testFilePath := configFile.Name()
  102. defer os.Remove(testFilePath)
  103. // Create config with configVersion and provides
  104. tcConfig := Configuration{
  105. Version: tc.testConfig.Version,
  106. Provides: tc.testConfig.Provides,
  107. // Create runtime with runtimeVersion
  108. Runtime: &Runtime{Version: tc.testConfig.Runtime.Version},
  109. }
  110. // Run Migration
  111. err = tcConfig.RunMigrations(
  112. []configMigration{&configProviderMigration{}},
  113. testFilePath)
  114. require.NoError(t, err)
  115. // Check file contents if wantSave otherwise check file empty
  116. cfile, err := os.Open(testFilePath)
  117. require.NoError(t, err)
  118. defer cfile.Close()
  119. decoder := json.NewDecoder(cfile)
  120. newConfig := Configuration{}
  121. err = decoder.Decode(&newConfig)
  122. if tc.wantSave {
  123. require.NoError(t, err)
  124. assert.Equal(t, tc.testConfig.Runtime.Version, newConfig.Version)
  125. assert.Equal(t, false, newConfig.Provides)
  126. } else {
  127. require.Error(t, err)
  128. assert.Empty(t, newConfig.Version)
  129. }
  130. })
  131. }
  132. }