konnektoren_core/challenges/
challenge_config.rs

1use super::challenge_variant::ChallengeVariant;
2use crate::challenges::task_pattern::TaskPattern;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
6pub struct ChallengeConfig {
7    pub id: String,
8    pub name: String,
9    pub description: String,
10    pub challenge: String,
11    pub variant: Option<ChallengeVariant>,
12    pub tasks: TaskPattern,
13    pub unlock_points: usize,
14    pub position: Option<(i32, i32)>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub icon: Option<String>,
17}
18
19impl Default for ChallengeConfig {
20    fn default() -> Self {
21        ChallengeConfig {
22            id: "123".to_string(),
23            name: "Konnektoren #1".to_string(),
24            description: "Your first Konnektoren challenge!".to_string(),
25            challenge: "konnektoren".to_string(),
26            variant: None,
27            tasks: 10.into(),
28            unlock_points: 0,
29            position: Some((0, 0)),
30            icon: None,
31        }
32    }
33}
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38
39    #[test]
40    fn default_challenge_config() {
41        let challenge_config = ChallengeConfig::default();
42        assert_eq!(challenge_config.id, "123");
43        assert_eq!(challenge_config.name, "Konnektoren #1");
44        assert_eq!(
45            challenge_config.description,
46            "Your first Konnektoren challenge!"
47        );
48        assert_eq!(challenge_config.challenge, "konnektoren");
49        assert_eq!(challenge_config.tasks, 10.into());
50        assert_eq!(challenge_config.unlock_points, 0);
51        assert_eq!(challenge_config.icon, None);
52    }
53}