Skip to main content

ag_session/
question.rs

1//! Frontend-neutral clarification question models and selection helpers.
2
3pub use ag_protocol::QuestionItem;
4
5/// Returns the initial highlighted option for a clarification question.
6///
7/// Questions with predefined options begin on the first option; free-text
8/// questions begin with no highlighted option.
9#[must_use]
10pub fn default_option_index(questions: &[QuestionItem], question_index: usize) -> Option<usize> {
11    questions
12        .get(question_index)
13        .filter(|item| !item.options.is_empty())
14        .map(|_| 0)
15}
16
17#[cfg(test)]
18mod tests {
19    use super::*;
20
21    #[test]
22    fn default_option_index_selects_only_predefined_options() {
23        // Arrange
24        let questions = [
25            QuestionItem::with_options("Continue?", vec!["Yes".to_string()]),
26            QuestionItem::new("Why?"),
27        ];
28
29        // Act
30        let predefined = default_option_index(&questions, 0);
31        let free_text = default_option_index(&questions, 1);
32        let missing = default_option_index(&questions, 2);
33
34        // Assert
35        assert_eq!(predefined, Some(0));
36        assert_eq!(free_text, None);
37        assert_eq!(missing, None);
38    }
39}