context("Create a COP24 Target Setting Tool")
with_mock_api({
  test_that("We can write an COP24 Target Setting tool", {
    template_path <- getTemplate("COP24_Data_Pack_Template.xlsx")
    expect_true(file.exists(template_path))
    # For Generating Individual Data Packs ####
    generation_list <- c("Malawi")
    pick <- datapackr::COP21_datapacks_countries %>%
      dplyr::filter(datapack_name %in% generation_list) %>%
      dplyr::arrange(datapack_name)
    output_folder <- paste0("/tmp/", stringi::stri_rand_strings(1, 20))
    dir.create(output_folder)
    #Suppress console output
    spectrum_data <- readRDS(test_sheet("COP24_spectrum_data_random_MW.rds"))
    d <- packTool(model_data_path = test_sheet("COP24_datapack_model_data_random_MW.rds"),
                  tool = "Data Pack",
                  datapack_name = pick$datapack_name[1],
                  country_uids = unlist(pick$country_uids[1]),
                  template_path = template_path,
                  cop_year = 2024,
                  output_folder = output_folder,
                  results_archive = FALSE,
                  expand_formulas = TRUE,
                  spectrum_data = spectrum_data,
                  d2_session = training)
    expect_setequal(names(d), c("keychain", "info", "tool", "data"))
    expect_equal(d$info$datapack_name, "Malawi")
    #Open the generated tool in libreoffice to kick off the formulas
    #Do not even try and do this on Windows
    skip_if(Sys.info()["sysname"] == "Windows")
    #MacOS users will need to install LibreOffice
    lo_path <- ifelse(Sys.info()["sysname"] == "Darwin",
                      "/Applications/LibreOffice.app/Contents/MacOS/soffice",
                      #Needs to be relative, but can't figure out terminal command
                      #got to ls /Applications/ | grep -i libre
                      system("which libreoffice", intern = TRUE))
    #Skip this if we cannot execute libreoffice
    skip_if(file.access(lo_path, 1) != 0)
    out_dir <- paste0(output_folder, "/out")
    dir.create(out_dir)
    Sys.setenv(LD_LIBRARY_PATH = ifelse(Sys.info()["sysname"] == "Darwin",
                                        "/Applications/LibreOffice.app/Contents/MacOS/soffice",
                                        "/usr/lib/libreoffice/program/"))
    sys_command <- paste0(ifelse(Sys.info()["sysname"] == "Darwin",
                                 "/Applications/LibreOffice.app/Contents/MacOS/soffice",
                                 "libreoffice"),
                          " --headless --convert-to xlsx --outdir ", out_dir, " '", d$info$output_file, "'")
    system(sys_command)
    out_file <- paste0(out_dir, "/", basename(d$info$output_file))
    #Unpack this tool which has been "opened" in libreoffice
    d_opened <- unPackTool(submission_path = out_file, d2_session = training)
    expect_identical(d$info$datapack_name, d_opened$info$datapack_name)
    expect_setequal(names(d_opened), c("keychain", "info", "data", "tests", "datim", "sheets"))
    expect_true(NROW(d_opened$data$analytics) > 0)
    expect_true(all(d_opened$data$analytics$mechanism_desc == "default"))
    d_data_targets_names <- c("PSNU", "psnuid", "sheet_name", "indicator_code", "Age", "Sex", "KeyPop", "value")
    d_data_tests_types <- c("tbl_df", "tbl", "data.frame")
    d <- unPackSheets(d_opened, check_sheets = TRUE)
    expect_true(!is.null(d_opened$data$MER))
    expect_setequal(class(d_opened$data$MER), c("tbl_df", "tbl", "data.frame"))
    expect_identical(unname(sapply(d_opened$data$MER, typeof)), c(rep("character", 7), "double"))
    expect_setequal(names(d_opened$data$MER), d_data_targets_names)
    expect_true((NROW(d_opened$data$MER) > 0))
    expect_true(!is.null(d_opened$data$SUBNAT_IMPATT))
    expect_setequal(class(d_opened$data$SUBNAT_IMPATT), c("tbl_df", "tbl", "data.frame"))
    expect_identical(unname(sapply(d_opened$data$SUBNAT_IMPATT, typeof)), c(rep("character", 7), "double"))
    expect_setequal(names(d_opened$data$SUBNAT_IMPATT), d_data_targets_names)
    expect_true((NROW(d_opened$data$SUBNAT_IMPATT) > 0))
    validation_summary <- validationSummary(d_opened)
    expect_named(validation_summary,
                 c("count", "country_name", "country_uid",
                   "ou", "ou_id", "test_name", "validation_issue_category"),
                 ignore.order = TRUE)
    #DP-837
    #Specific test of AGYW_PREV orgunits
    agyw_have <- d$sheets$AGYW %>%
      dplyr::select(PSNU) %>%
      dplyr::distinct() %>%
      dplyr::mutate(psnu_uid = stringr::str_extract(PSNU, "(?<=(\\(|\\[))([A-Za-z][A-Za-z0-9]{10})(?=(\\)|\\])$)")) %>%
      dplyr::arrange(PSNU)
    agyw_want <- getValidOrgUnits("2024") %>%
      dplyr::filter(country_uid %in% d$info$country_uids) %>%
      add_dp_label(., "2024") %>%
      dplyr::arrange(dp_label) %>%
      dplyr::filter(!is.na(DREAMS)) %>%
      dplyr::select(PSNU = dp_label, psnu_uid = uid) %>%
      dplyr::arrange(PSNU)
    expect_identical(agyw_want, agyw_have)
    #Check the PSNUs in normal sheets, excluding the PSNUxIM tab, Year 2 and AGYW
    discard_names <- function(l, kn) {
      l[!(names(l) %in% kn)]
    }
    extract_PSNU <- function(df) {
      df %>%
        dplyr::select(PSNU) %>%
        dplyr::distinct() %>%
        dplyr::mutate(psnu_uid =
                        stringr::str_extract(PSNU, "(?<=(\\(|\\[))([A-Za-z][A-Za-z0-9]{10})(?=(\\)|\\])$)")) %>%
        dplyr::arrange(PSNU)
    }
    sheet_psnus <- d$sheets %>%
      discard_names(c("PSNUxIM", "Year 2", "AGYW")) %>%
      purrr::map(extract_PSNU)
    wanted_psnus <-
      getValidOrgUnits("2024") %>%
      dplyr::filter(country_uid %in% d$info$country_uids) %>%
      add_dp_label(., "2024") %>%
      dplyr::arrange(dp_label) %>%
      ## Remove DSNUs
      dplyr::filter(org_type != "DSNU") %>%
      dplyr::select(PSNU = dp_label, psnu_uid = uid)
    expect_true(all(unlist(purrr::map(sheet_psnus, identical, wanted_psnus))))
    #DP-970--Duplicates in the Year2 tab
    duplicated_export_rows <- d$datim$year2 %>%
      dplyr::select(dataElement, period, orgUnit, categoryOptionCombo, attributeOptionCombo) %>%
      dplyr::group_by_all() %>%
      dplyr::mutate(n = dplyr::n()) %>%
      dplyr::filter(n > 1) %>%
      NROW()
    expect_equal(duplicated_export_rows, 0L)
    #There should be no zeros in d$data$SNUxIM except for dedpe
    expect_false(any(d$data$SNUxIM[d$data$SNUxIM$value == 0 & !grepl("^0000[01]", d$data$SNUxIM$mech_code), ]))
  })
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.