2026-03-10 22:50:50 -05:00
|
|
|
package com.mindmachine.mvp
|
|
|
|
|
|
2026-03-10 23:24:49 -05:00
|
|
|
import com.mindmachine.mvp.domain.SessionConfig
|
2026-03-10 22:50:50 -05:00
|
|
|
import com.mindmachine.mvp.domain.SessionMode
|
|
|
|
|
import com.mindmachine.mvp.domain.VisualPattern
|
|
|
|
|
import com.mindmachine.mvp.session.SessionValidator
|
|
|
|
|
import org.junit.Assert.assertEquals
|
|
|
|
|
import org.junit.Assert.assertNull
|
|
|
|
|
import org.junit.Test
|
|
|
|
|
|
|
|
|
|
class SessionValidatorTest {
|
|
|
|
|
private val valid = SessionConfig(
|
|
|
|
|
presetId = "relax",
|
|
|
|
|
durationSec = 600,
|
|
|
|
|
mode = SessionMode.AUDIO_VISUAL,
|
|
|
|
|
visualPatternType = VisualPattern.PULSE,
|
2026-03-10 23:24:49 -05:00
|
|
|
flashIntervalMs = 167,
|
2026-03-10 22:50:50 -05:00
|
|
|
intensityPercent = 50,
|
|
|
|
|
carrierFrequencyHz = 200f,
|
|
|
|
|
binauralDifferenceHz = 6f,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun valid_with_headset_passes() {
|
|
|
|
|
assertNull(SessionValidator.validate(valid, headsetAvailable = true))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun audio_without_headset_is_blocked() {
|
|
|
|
|
val error = SessionValidator.validate(valid, headsetAvailable = false)
|
|
|
|
|
assertEquals("Stereo headphones are required for binaural audio. Connect headphones or switch to Visual-only.", error)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun visual_only_without_headset_passes() {
|
|
|
|
|
assertNull(SessionValidator.validate(valid.copy(mode = SessionMode.VISUAL_ONLY), headsetAvailable = false))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun out_of_range_values_are_blocked() {
|
|
|
|
|
assertEquals("Duration must be 1 to 30 minutes.", SessionValidator.validate(valid.copy(durationSec = 59), true))
|
2026-03-10 23:24:49 -05:00
|
|
|
assertEquals("Flash interval must be 50 to 2000 ms.", SessionValidator.validate(valid.copy(flashIntervalMs = 49), true))
|
2026-03-10 22:50:50 -05:00
|
|
|
assertEquals("Carrier frequency must be 80 to 400 Hz.", SessionValidator.validate(valid.copy(carrierFrequencyHz = 79f), true))
|
|
|
|
|
assertEquals("Binaural difference must be 0.5 to 20 Hz.", SessionValidator.validate(valid.copy(binauralDifferenceHz = 0.1f), true))
|
|
|
|
|
}
|
|
|
|
|
}
|