Auto commit Sat Mar 21 11:01:02 PM CDT 2026

This commit is contained in:
Tretzi
2026-03-21 23:01:02 -05:00
parent 5c48387dc2
commit 869c98a47c
11 changed files with 354 additions and 104 deletions

View File

@@ -1,6 +1,7 @@
package com.mindmachine.mvp
import com.mindmachine.mvp.domain.RuntimeState
import com.mindmachine.mvp.session.sessionProgressFraction
import com.mindmachine.mvp.session.shouldRevealSystemBarsOnTap
import com.mindmachine.mvp.session.shouldShowActiveControlsByDefault
import com.mindmachine.mvp.session.shouldUseImmersiveFullscreen
@@ -36,12 +37,20 @@ class ActiveSessionUiTest {
}
@Test
fun tap_to_reveal_system_bars_is_only_enabled_during_active_visual_stimulation() {
assertTrue(shouldRevealSystemBarsOnTap(isVisualMode = true, runtimeState = RuntimeState.COUNTDOWN))
assertTrue(shouldRevealSystemBarsOnTap(isVisualMode = true, runtimeState = RuntimeState.RUNNING))
fun tap_to_reveal_system_bars_is_disabled() {
assertFalse(shouldRevealSystemBarsOnTap(isVisualMode = true, runtimeState = RuntimeState.COUNTDOWN))
assertFalse(shouldRevealSystemBarsOnTap(isVisualMode = true, runtimeState = RuntimeState.RUNNING))
assertFalse(shouldRevealSystemBarsOnTap(isVisualMode = false, runtimeState = RuntimeState.RUNNING))
assertFalse(shouldRevealSystemBarsOnTap(isVisualMode = true, runtimeState = RuntimeState.PAUSED))
assertFalse(shouldRevealSystemBarsOnTap(isVisualMode = true, runtimeState = RuntimeState.COMPLETED))
}
@Test
fun session_progress_fraction_tracks_elapsed_time_and_clamps() {
assertTrue(sessionProgressFraction(durationSec = 600, remainingSec = 600) == 0f)
assertTrue(sessionProgressFraction(durationSec = 600, remainingSec = 300) == 0.5f)
assertTrue(sessionProgressFraction(durationSec = 600, remainingSec = 0) == 1f)
assertTrue(sessionProgressFraction(durationSec = 600, remainingSec = 800) == 0f)
assertTrue(sessionProgressFraction(durationSec = 600, remainingSec = -10) == 1f)
}
}

View File

@@ -7,22 +7,47 @@ import org.junit.Test
class PresetDefaultsTest {
@Test
fun mvp_has_exactly_three_presets_with_spec_defaults() {
assertEquals(3, Presets.builtIn.size)
val relax = Presets.builtIn.first { it.id == "relax" }
val focus = Presets.builtIn.first { it.id == "focus" }
val sleep = Presets.builtIn.first { it.id == "sleep" }
fun mvp_has_eight_preset_programs_with_expected_defaults() {
assertEquals(8, Presets.builtIn.size)
val deepRelease = Presets.builtIn.first { it.id == "deep_release" }
val laserFocus = Presets.builtIn.first { it.id == "laser_focus" }
val creativeDrift = Presets.builtIn.first { it.id == "creative_drift" }
val resetBreath = Presets.builtIn.first { it.id == "reset_breath" }
val nightRampdown = Presets.builtIn.first { it.id == "night_rampdown" }
val powerWarmup = Presets.builtIn.first { it.id == "power_warmup" }
val bodyScan = Presets.builtIn.first { it.id == "body_scan" }
val stormToStill = Presets.builtIn.first { it.id == "storm_to_still" }
assertEquals(10 * 60, relax.defaultDurationSec)
assertEquals(VisualPattern.PULSE, relax.visualPatternType)
assertEquals(167, relax.flashIntervalMs)
assertEquals(18 * 60, deepRelease.defaultDurationSec)
assertEquals(VisualPattern.PULSE, deepRelease.visualPatternType)
assertEquals(260, deepRelease.flashIntervalMs)
assertEquals(15 * 60, focus.defaultDurationSec)
assertEquals(VisualPattern.FLASH, focus.visualPatternType)
assertEquals(100, focus.flashIntervalMs)
assertEquals(16 * 60, laserFocus.defaultDurationSec)
assertEquals(VisualPattern.FLASH, laserFocus.visualPatternType)
assertEquals(120, laserFocus.flashIntervalMs)
assertEquals(20 * 60, sleep.defaultDurationSec)
assertEquals(VisualPattern.PULSE, sleep.visualPatternType)
assertEquals(333, sleep.flashIntervalMs)
assertEquals(22 * 60, creativeDrift.defaultDurationSec)
assertEquals(VisualPattern.PULSE, creativeDrift.visualPatternType)
assertEquals(190, creativeDrift.flashIntervalMs)
assertEquals(12 * 60, resetBreath.defaultDurationSec)
assertEquals(VisualPattern.PULSE, resetBreath.visualPatternType)
assertEquals(300, resetBreath.flashIntervalMs)
assertEquals(28 * 60, nightRampdown.defaultDurationSec)
assertEquals(VisualPattern.PULSE, nightRampdown.visualPatternType)
assertEquals(360, nightRampdown.flashIntervalMs)
assertEquals(9 * 60, powerWarmup.defaultDurationSec)
assertEquals(VisualPattern.FLASH, powerWarmup.visualPatternType)
assertEquals(95, powerWarmup.flashIntervalMs)
assertEquals(20 * 60, bodyScan.defaultDurationSec)
assertEquals(VisualPattern.PULSE, bodyScan.visualPatternType)
assertEquals(210, bodyScan.flashIntervalMs)
assertEquals(24 * 60, stormToStill.defaultDurationSec)
assertEquals(VisualPattern.FLASH, stormToStill.visualPatternType)
assertEquals(150, stormToStill.flashIntervalMs)
}
}