Skip to content

Commit

Permalink
wip migration
Browse files Browse the repository at this point in the history
  • Loading branch information
meikpiep committed Feb 26, 2025
1 parent 6c81f16 commit 236caa2
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,32 @@ import org.piepmeyer.gauguin.Theme
class ApplicationPreferencesMigrations(
private val applicationPreferences: ApplicationPreferences,
) {
fun migrateDifficultySettingIfNecessary() {
if (applicationPreferences.getStringSet("difficulties", null) != null) {
return
}

val oldDifficultyValue = applicationPreferences.getString("difficulty", null)
/*
* Possible values:
* ANY
* VERY_EASY
* EASY
* MEDIUM
* HARD
* EXTREME
*/

if (oldDifficultyValue != null) {
applicationPreferences.difficultiesSetting =
if (oldDifficultyValue == "ANY") {
DifficultySetting.all()
} else {
setOf(DifficultySetting.valueOf(oldDifficultyValue))
}
}
}

fun migrateThemeToNightModeIfNecessary() {
if (applicationPreferences.getString("nightMode", null) != null) {
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import io.mockk.runs
import io.mockk.verify
import org.piepmeyer.gauguin.NightMode
import org.piepmeyer.gauguin.Theme
import org.piepmeyer.gauguin.options.DifficultySetting

class ApplicationPreferencesMigrationsTest :
FunSpec({
Expand Down Expand Up @@ -55,4 +56,55 @@ class ApplicationPreferencesMigrationsTest :
preferences.nightMode = testData.expectedNightMode
}
}

test("difficulty migration gets not triggered if difficulties are already in use") {
val preferences =
mockk<ApplicationPreferences> {
every { getStringSet("difficulties", null) } returns setOf(DifficultySetting.EASY.name)
// no setter of 'difficulties' allowed here
}

val migrations = ApplicationPreferencesMigrations(preferences)

migrations.migrateDifficultySettingIfNecessary()
}

test("difficulty migration gets not triggered if no difficulty preference is used yet") {
val preferences =
mockk<ApplicationPreferences> {
every { getStringSet("difficulties", null) } returns null
every { getString("difficulty", null) } returns null
// no setter of 'difficulties' allowed here
}

val migrations = ApplicationPreferencesMigrations(preferences)

migrations.migrateDifficultySettingIfNecessary()
}

data class DifficultyMigrationTestData(
val sharedPreferenceDifficultyValue: String?,
val expectedDifficultiesValue: Set<DifficultySetting>,
)

withData(
DifficultyMigrationTestData("EASY", setOf(DifficultySetting.EASY)),
DifficultyMigrationTestData("EXTREME", setOf(DifficultySetting.EXTREME)),
DifficultyMigrationTestData("ANY", DifficultySetting.all()),
) { testData ->
val preferences =
mockk<ApplicationPreferences> {
every { getStringSet("difficulties", null) } returns null
every { getString("difficulty", null) } returns testData.sharedPreferenceDifficultyValue
every { difficultiesSetting = testData.expectedDifficultiesValue } just runs
}

val migrations = ApplicationPreferencesMigrations(preferences)

migrations.migrateDifficultySettingIfNecessary()

verify {
preferences.difficultiesSetting = testData.expectedDifficultiesValue
}
}
})

0 comments on commit 236caa2

Please sign in to comment.