moodle-xml 0.2.0

A library for generating Moodle quizzes in XML format.
Documentation
#[cfg(test)]
mod tests {
    use moodle_xml::prelude::*;
    use std::fs::File;
    use std::io::BufReader;
    use xml::reader::EventReader;

    #[test]
    fn test_file_creation() {
        let mut question =
            ShortAnswerQuestion::new("Easy question".into(), "Kenella on S rinnassa".into(), None);

        let answer = Answer::new(100, "Superman".into(), Some("Oikein".into()));
        question.add_answers(answer.into()).unwrap();

        let mut quiz = Quiz::new(question.into());
        let categories = vec!["testi_categoria".into()];
        quiz.set_categories(categories);

        let tmp_file = tempfile::NamedTempFile::new().unwrap();
        assert!(quiz.to_xml(tmp_file.path().to_str().unwrap()).is_ok());

        let file = File::open(tmp_file.path().to_str().unwrap()).expect("Cannot open file");
        let file = BufReader::new(file);

        let parser = EventReader::new(file);

        for e in parser {
            assert!(e.is_ok())
        }
    }

    #[test]
    fn pointlimit_test() {
        let mut question =
            ShortAnswerQuestion::new("Easy question".into(), "Kenella on S rinnassa".into(), None);
        let answer = Answer::new(125, "Superman".into(), Some("Oikein".into()));
        question.add_answers(answer.into()).unwrap();

        let mut quiz = Quiz::new(question.into());
        let category = vec!["testi_categoria".into()];
        quiz.set_categories(category);

        let tmp_file = tempfile::NamedTempFile::new().unwrap();
        assert!(quiz.to_xml(tmp_file.path().to_str().unwrap()).is_err());
    }

    #[test]
    fn no_answer_in_question() {
        let question =
            ShortAnswerQuestion::new("Easy question".into(), "Kenella on S rinnassa".into(), None);

        let category = vec!["testi_categoria".into()];
        let mut quiz = Quiz::new(question.into());
        quiz.set_categories(category);

        let tmp_file = tempfile::NamedTempFile::new().unwrap();
        assert!(quiz.to_xml(tmp_file.path().to_str().unwrap()).is_err());
    }

    #[test]
    fn character_test() {
        let mut question = ShortAnswerQuestion::new(
            "TRUE".into(),
            "(),./;'\"[]-=<>?:{}|\\_+!@#$%^&*()`~".into(),
            None,
        );

        let answer = Answer::new(100, "NaN".into(), Some("1E02".into()));
        question.add_answers(vec![answer]).unwrap();
        let mut quiz = Quiz::new(question.into());

        let tmp_file = tempfile::NamedTempFile::new().unwrap();
        assert!(quiz.to_xml(tmp_file.path().to_str().unwrap()).is_ok());
    }
    #[test]
    fn answer_test() {
        let mut question =
            ShortAnswerQuestion::new("Easy question".into(), "Kenella on S rinnassa".into(), None);

        let answer = Answer::new(100, "Superman".into(), Some("Oikein".into()));
        let answer2 = Answer::new(0, "Batman".into(), Some("Väärin".into()));
        let answer3 = Answer::new(0, "Robin".into(), None);
        let answer4 = Answer::new(0, "Spiderman".into(), Some("Oikein".into()));

        question
            .add_answers(vec![answer, answer2, answer3, answer4])
            .unwrap();
        let category: Category = "testi_categoria".into();
        let mut quiz = Quiz::new(question.into());
        quiz.set_categories(category.into());

        let tmp_file = tempfile::NamedTempFile::new().unwrap();
        assert!(quiz.to_xml(tmp_file.path().to_str().unwrap()).is_ok());
    }
    #[test]
    fn add_quiz_vec_xml() {
        let answer1 = Answer::new(100, "Superman".into(), Some("Oikein".into()));
        let answer2 = Answer::new(100, "Spiderman".into(), Some("Oikein".into()));
        let answer3 = Answer::new(100, "Superman".into(), Some("Oikein".into()));

        let answers = vec![answer1, answer2, answer3.clone()];

        let mut question1 =
            ShortAnswerQuestion::new("Easy question".into(), "Kenella on S rinnassa".into(), None);
        let mut question2 = ShortAnswerQuestion::new(
            "Easier question".into(),
            "Kenella on S rinnassa".into(),
            None,
        );

        let _ = question1.add_answers(answers);
        let _ = question2.add_answers(answer3.into());

        let questions: Vec<QuestionType> = vec![question1.into(), question2.into()];

        let category: Category = "testi_categoria".into();
        let mut quiz = Quiz::new(questions);
        quiz.set_categories(category.into());

        let tmp_file = tempfile::NamedTempFile::new().unwrap();
        assert!(quiz.to_xml(tmp_file.path().to_str().unwrap()).is_ok());
    }
}