test_that("Testing method getAssessmentItems() for AssessmentSection class", { mc1 <- new("MultipleChoice", identifier = "q1", prompt = "What does 3/4 + 1/4 = ?", title = "MultipleChoice", choices = c("1", "4/8", "8/4", "4/4"), choice_identifiers = c("1", "2", "3", "4"), points = c(1, 0, 0, 1)) sc2 <- new("SingleChoice", prompt = "What is the percentage of 3/20?", title = "SingleChoice", choices = c("15%", "20%", "30%"), choice_identifiers = "1", identifier = "q2") mc3 <- new("MultipleChoice", identifier = "q3", prompt = "3 + 4b = 15. What is the value of b in this equation?", title = "MultipleChoice", choices = c("3", "2", "5", "6/2"), choice_identifiers = c("1", "2", "3", "4"), points = c(1, 0, 0, 1) ) order1 <- new("Order", identifier = "q4", title = "Order", prompt = "Choose the correct order", choices = c("Data collection", "Data cleansing", "Data marking", "Verification and visualization"), choices_identifiers = c("1", "2", "3", "4"), points = 1 ) exam_section <- new("AssessmentSection", identifier = "sec_id", title = "section", assessment_item = list(mc1, sc2, mc3, order1) ) exam <- new("AssessmentTestOpal", identifier = "id_test", title = "some title", section = list(exam_section)) sut<-toString(getAssessmentItems(exam_section)) expected <- "q1.xml, q2.xml, q3.xml, q4.xml" expect_equal(sut, expected) }) test_that("Testing method buildAssessmentSection() for AssessmentSection class", { mc1 <- new("MultipleChoice", identifier = "q1", prompt = "What does 3/4 + 1/4 = ?", title = "MultipleChoice", choices = c("1", "4/8", "8/4", "4/4"), choice_identifiers = c("1", "2", "3", "4"), points = c(1, 0, 0, 1)) sc2 <- new("SingleChoice", prompt = "What is the percentage of 3/20?", title = "SingleChoice", choices = c("15%", "20%", "30%"), choice_identifiers = "1", identifier = "q2") mc3 <- new("MultipleChoice", identifier = "q3", prompt = "3 + 4b = 15. What is the value of b in this equation?", title = "MultipleChoice", choices = c("3", "2", "5", "6/2"), choice_identifiers = c("1", "2", "3", "4"), points = c(1, 0, 0, 1) ) order1 <- new("Order", identifier = "q4", title = "Order", prompt = "Choose the correct order", choices = c("Data collection", "Data cleansing", "Data marking", "Verification and visualization"), choices_identifiers = c("1", "2", "3", "4"), points = 1 ) exam_section <- new("AssessmentSection", identifier = "sec_id", title = "section", assessment_item = list(mc1, sc2, mc3, order1) ) exam <- new("AssessmentTest", identifier = "id_test", title = "some title", section = list(exam_section)) example <- " \n \n \n \n \n \n " sut1 <- toString(htmltools::tag( "additionalTag", list(suppressMessages(buildAssessmentSection(exam_section, folder = "todelete"))))) sut <- xml2::read_xml(sut1) expected <- xml2::read_xml(example) expect_equal(sut, expected) unlink("todelete", recursive = TRUE) }) test_that("Test of method buildAssessmentSection() when reading a file in AssessmentSection class", { sc <- new("SingleChoice", prompt = "What is the percentage of 3/20?", title = "SingleChoice", choices = c("15%", "20%", "30%"), choice_identifiers = "1", identifier = "new") suppressMessages(createQtiTask(sc, "todelete", FALSE)) sut1 <- suppressMessages(toString(buildAssessmentSection( object = "todelete/new.xml", folder = "todelete"))) example <- "" sut <- xml2::read_xml(sut1) expected <- xml2::read_xml(example) expect_equal(sut, expected) unlink("todelete", recursive = TRUE) unlink("new.xml", recursive = TRUE) }) test_that("Testing method getAssessmentItems() for AssessmentSection class", { mc1 <- new("MultipleChoice", identifier = "q1", prompt = "What does 3/4 + 1/4 = ?", title = "MultipleChoice", choices = c("1", "4/8", "8/4", "4/4"), choice_identifiers = c("1", "2", "3", "4"), points = c(1, 0, 0, 1)) sc2 <- new("SingleChoice", prompt = "What is the percentage of 3/20?", title = "SingleChoice", choices = c("15%", "20%", "30%"), choice_identifiers = "1", identifier = "q2") mc3 <- new("MultipleChoice", identifier = "q3", prompt = "3 + 4b = 15. What is the value of b in this equation?", title = "MultipleChoice", choices = c("3", "2", "5", "6/2"), choice_identifiers = c("1", "2", "3", "4"), points = c(1, 0, 0, 1) ) order1 <- new("Order", identifier = "q4", title = "Order", prompt = "Choose the correct order", choices = c("Data collection", "Data cleansing", "Data marking", "Verification and visualization"), choices_identifiers = c("1", "2", "3", "4"), points = 1 ) exam_section <- new("AssessmentSection", identifier = "sec_id", title = "section", assessment_item = list(mc1, sc2, mc3, order1) ) exam <- new("AssessmentTestOpal", identifier = "id_test", title = "some title", section = list(exam_section)) sut<-toString(getAssessmentItems(exam_section)) expected <- "q1.xml, q2.xml, q3.xml, q4.xml" expect_equal(sut, expected) }) test_that("Testing AssessmentTestOpal class: create tasks with upload files xml", { # Reading of tasks from xml files path1 <- test_path("file/xml/MultipleChoice.xml") path2 <- test_path("file/xml/Order.xml") example_exam_section <- new("AssessmentSection", identifier = "sec_id", title = "section", assessment_item = list(path1, path2)) example_exam <- new("AssessmentTestOpal", identifier = "id_test", title = "Mock test", section = list(example_exam_section)) suppressWarnings(suppressMessages(createQtiTest(example_exam, "test_exam_folder", FALSE))) # get list content zip files and compare them zip_sut <- list.files(path = "test_exam_folder", pattern = ".zip", full.names = TRUE) list_sut <- zip::zip_list(zip_sut)$filename list_expected <- c("id_test.xml", "imsmanifest.xml", "MultipleChoice.xml", "Order.xml") ls <- list_expected %in% list_sut expect_equal(all(ls), TRUE) unlink(file.path(getwd(),"test_exam_folder"), recursive = TRUE) }) test_that("Testing buildAssessmentSection() that returns a warning for an invalid XML file", { temp_folder <- tempdir() invalid_xml <- tempfile(tmpdir = temp_folder, fileext = ".xml") cat("", file = invalid_xml) expect_warning(suppressMessages(buildAssessmentSection( invalid_xml, temp_folder, TRUE)),"is not valid") }) test_that("Testing buildAssessmentSection() that returns a warning for incorrect file or path", { expect_warning( buildAssessmentSection("nonexistent.xml", "nonexistent_folder"), "is not correct. This file will be omitted in test" ) }) test_that("Testing values of slot prompt and slot identifier in AssessmentItem class", { mc <- new("MultipleChoice", prompt = as.character(NA)) sc <- new("SingleChoice") # Check the values of prompt and identifier for MultipleChoice expect_equal(mc@prompt, "") expect_true(!is.na(mc@identifier) && nchar(mc@identifier) > 0) # Check the values of prompt and identifier for SingleChoice expect_equal(sc@prompt, "") expect_equal(sc@title, sc@identifier) expect_true(!is.na(sc@identifier) && nchar(sc@identifier) > 0) }) test_that("Testing of type of calculators in yaml section of Rmd file", { # Reading of tasks from Rmd files and create of unique identifiers path1 <- test_path("file/rmd/DirectedPair_with_table.Rmd") suppressMessages(path1obj <- Map(create_question_object, rep(path1, 4))) path1obj[[1]]@identifier <- "v1" path1obj[[2]]@identifier <- "v2" path1obj[[3]]@identifier <- "v3" path1obj[[4]]@identifier <- "v4" path2 <- test_path("file/rmd/DirectedPair_SimpleCalc.Rmd") # path 2 - The item contains the parameter: calculator: simple-calculator suppressMessages(path2obj <- Map(create_question_object, rep(path2, 3))) path2obj[[1]]@identifier <- "v11" path2obj[[2]]@identifier <- "v22" path2obj[[3]]@identifier <- "v33" path3 <- test_path("file/rmd/MultipleChoiceTable_as_table_F.Rmd") # path 3 - The item contains the parameter: calculator:scientific-calculator suppressMessages(path3obj <- Map(create_question_object, rep(path3, 2))) path3obj[[1]]@identifier <- "v111" path3obj[[2]]@identifier <- "v222" path4 <- test_path("file/rmd/OneInRowTable_rowid_colid_example.Rmd") suppressMessages(path4obj <- Map(create_question_object, rep(path4, 2))) path4obj[[1]]@identifier <- "v1111" path4obj[[2]]@identifier <- "v2222" root_section_1 = suppressMessages(list(section(path1obj[[1]]), section(c(path2obj[[1]], path4obj[[1]])), section(path1obj[[2]]))) root_section_2 = suppressMessages(list(section(c(path1obj[[3]], path3obj[[1]])), section(c(path2obj[[2]], path4obj[[2]])), section(path1obj[[4]]))) root_section_3 = suppressMessages(list(section(c(path2obj[[3]], path3obj[[2]])))) example_exam_1 <- new("AssessmentTestOpal", identifier = "id_test_1", title = "Mock test", section = root_section_1) example_exam_2 <- new("AssessmentTestOpal", identifier = "id_test_2", title = "Mock test", section = root_section_2) example_exam_3 <- new("AssessmentTestOpal", identifier = "id_test_2", title = "Mock test", section = root_section_3) sut_1 <- example_exam_1@calculator sut_2 <- example_exam_2@calculator sut_3 <- example_exam_3@calculator expect_equal(sut_1,"simple-calculator") expect_equal(sut_2,"scientific-calculator") expect_equal(sut_3,"scientific-calculator") })