tests/testthat/test-pmx-report.R

if (helper_skip()) {
  library(rmarkdown)
  library(purrr)


  #------------------- pmx_fig_process - start -----------------------------------
  ctr <- theophylline()

  context("Test pmx_fig_process function")
  test_that("pmx_fig_process: params: ctr, old_name, footnote, out_ result: identical inherits", {
    tmp_dir <- tempdir(check = TRUE)
    pmx_fig <- pmx_fig_process(ctr, old_name = "gg", footnote = TRUE, out_ = tmp_dir)
    expect_true(inherits(pmx_fig, "character"))
  })

  test_that("pmx_fig_process: params: ctr, old_name, footnote, out_ result: identical old_name", {
    tmp_dir <- tempdir(check = TRUE)
    pmx_fig <- pmx_fig_process(ctr, old_name = "gg", footnote = TRUE, out_ = tmp_dir)
    expect_identical(pmx_fig, "gg")
  })


  test_that("pmx_fig_process: params: NULL result: footnote is missing", {
    expect_error(pmx_fig_process())
  })

  #------------------- pmx_fig_process - end -------------------------------------

  #------------------- pmx_draft - start -----------------------------------------
  test_that("pmx_draft: params: NULL result: ctr is missing", {
    expect_error(pmx_draft())
  })


  test_that("pmx_draft: params  result: error template do not exist", {
    expect_error(pmx_draft(ctr,
                           name = "dr_Report_ggPMX", template =
                                                       system.file("rm", package = "ggPMX"),
                           edit = FALSE
                           ))
  })

  test_that("pmx_draft: params  result: identical inherits", {
    draft <- pmx_draft(ctr,
                       name = "dr_Report_ggPMX", template =
                                                   system.file("rmarkdown", "templates",
                                                               "standing",
                                                               package = "ggPMX"
                                                               ),
                       edit = FALSE
                       )
    expect_true(inherits(draft, "character"))
    file.remove(draft)
  })

  test_that("pmx_draft: params  result: create file", {
    draft <- pmx_draft(ctr,
                       name = "dr_Report_ggPMX", template =
                                                   system.file("rmarkdown", "templates",
                                                               "standing",
                                                               package = "ggPMX"
                                                               ),
                       edit = FALSE
                       )
    expect_true(file.exists(draft))
    file.remove(draft)
    expect_false(file.exists(draft))
  })

  #------------------- pmx_draft - end -------------------------------------------

  #------------------- create_ggpmx_gof - start ----------------------------------
  context("Test create_ggpmx_gof")
  test_that("create_ggpmx_gof params NULL result: error name is missing", {
    expect_error(create_ggpmx_gof())
  })

  #------------------- create_ggpmx_gof - end ------------------------------------

  #------------------- rm_dir - end ----------------------------------------------
  context("Test rm_dir")
  test_that("rm_dir params NULL result: error to_remove is missing", {
    expect_error(rm_dir())
  })

  test_that("rm_dir params NULL result: remove directory", {
    path <- file.path(tempdir(check = TRUE))
    newfolder <- "create_ggpmx_gof_test"
    work_dir <- file.path(path, newfolder)
    dir.create(work_dir)
    rm_dir(work_dir)
    expect_false(dir.exists(work_dir))
  })

  #------------------- rm_dir - end ----------------------------------------------

  #------------------- remove_reports - start ------------------------------------
  test_that("remove_reports params result: remove plot files", {
    path <- file.path(tempdir(check = TRUE))
    newfolder <- "report_plot"
    work_dir <- file.path(path, newfolder)
    dir.create(work_dir)

    ctr %>% pmx_report(
      name = "Report_ggPMX",
      save_dir = work_dir,
      template = system.file(
        "rmarkdown", "templates",
        "standing",
        package = "ggPMX"
      ),
      output = "all",
      format = "all"
    )
    files_word_report <- list.files(path = work_dir, pattern = "docx")
    expect_false(is_empty(files_word_report))
    remove_reports(output = "plots", work_dir)
    files_word_report <- list.files(path = work_dir, pattern = "docx")
    expect_true(is_empty(files_word_report))
  })

  #------------------- remove_reports - end --------------------------------------

  # ------------------- pmx_report - generation of report - start ----------------
  context("Test generation of report from a pre-defined template")

  ctr <- test_pmxClass_helpers()[["ctr"]]
  tmp_dir <- tempdir(check = TRUE)

  testGenerateReport <- function() {
    pmx_report(
      contr=ctr,
      name="Report_ggPMX",
      save_dir=tmp_dir,
      output="all",
      format="all"
    )
  }


  test_that("Can generate report", {
    skip_on_cran()
    expect_is(ctr, "pmxClass")
    testGenerateReport()
    list_of_rep <- list.files(path = tmp_dir, pattern = "Report_ggPMX\\..*")
    expect_equal(length(list_of_rep), 4L)
  })


  test_that("Report generation can be repeated without error", {
    skip_on_cran()
    expect_is(ctr, "pmxClass")

    expect_error(
      lapply(1:3, function(n) testGenerateReport()),
      NA
    )
  })

  test_that("Can generate report using a custom template", {
    skip_on_cran()
    custom_template_file <- system.file(
      file.path("examples", "templates", "custom_report.Rmd"),
      package = "ggPMX"
    )

    expect_null(
      pmx_report(
        contr = ctr,
        name = "NN",
        save_dir = tmp_dir,
        template = custom_template_file
      )
    )
  })

  test_that("Illegal arguments to pmx_report cause an error", {
    skip_on_cran()
    expect_is(ctr, "pmxClass")

    expect_error(
      pmx_report(
        contr=list(),
        name="Report_ggPMX",
        save_dir=tmp_dir,
        format="all",
        output="all"
      )
    )

    expect_error(
      pmx_report(
        contr=list(),
        name=c("a", "b"),
        save_dir=tmp_dir,
        output="all",
        format="all"
      )
    )

    expect_error(
      pmx_report(
        contr=list(),
        name="a",
        save_dir=tmp_dir,
        output="all",
        format="all",
        template=1L
      )
    )
  })
  #------------------- pmx_report - generation of report - end -------------------

  library(purrr)
  #------------------- pmx_report - generation of report - end -------------------

  ctr <- theophylline()

  #------------------- pmx_report - output - "all" - start -----------------------

  context("Test pmx_report function with all output")
  test_that("pmx_report: params: ctr, name, save_dir, output, format;
         result: create all files", {
           skip_on_cran()
           path <- file.path(tempdir(check=TRUE))
           newfolder <- "pmx_report_test"
           work_dir <- file.path(path, newfolder)
           dir.create(work_dir, showWarnings=FALSE)

           ctr %>% pmx_report(
             name="Report_ggPMX",
             save_dir=work_dir,
             template=system.file("rmarkdown", "templates", "standing", package="ggPMX"),
             output="all",
             format=c("word", "html")
           )

           files_word_all <- list.files(path=work_dir, pattern="docx")
           files_html_all <- list.files(path=work_dir, pattern="html")
           files_report_ggPMX <- list.files(path=work_dir, pattern="Report_ggPMX")
           sub_dir <- file.path(work_dir, "ggpmx_GOF")


           expect_false(is_empty(files_report_ggPMX))
           expect_true(file.exists(sub_dir))
           expect_false(is_empty(sub_dir))
           expect_false(is_empty(files_word_all))
           expect_false(is_empty(files_html_all))
           unlink(work_dir, recursive=TRUE)
         })

  #------------------- pmx_report - output - "all" - end -------------------------

  #------------------- pmx_report - output - "plots" - start ---------------------

  context("Test pmx_report function with plots output")
  test_that("pmx_report: params: ctr, name, save_dir, output, format; result: create plots files",{
    skip_on_cran()
    path <- file.path(tempdir(check=TRUE))
    newfolder <- "pmx_report_test"
    work_dir <- file.path(path, newfolder)
    dir.create(work_dir, showWarnings=FALSE)

    ctr %>% pmx_report(
      name="Report_ggPMX",
      save_dir=work_dir,
      template=system.file("rmarkdown", "templates", "standing", package="ggPMX"),
      output="plots",
      format=c("word", "html")
    )

    files_word_plots <- list.files(path=work_dir, pattern="docx")
    files_html_plots <- list.files(path=work_dir, pattern="html")
    files_report_ggPMX <- list.files(path=work_dir, pattern="Report_ggPMX")
    sub_dir <- file.path(work_dir, "ggpmx_GOF")
    expect_false(is_empty(files_report_ggPMX))
    expect_true(file.exists(sub_dir))
    expect_false(is_empty(sub_dir))
    expect_true(is_empty(files_word_plots))
    expect_false(is_empty(files_html_plots))

    unlink(work_dir, recursive=TRUE)
  })

  #------------------- pmx_report - "plots" - end --------------------------------

  #------------------- pmx_report - "report" - start -----------------------------

  context("Test pmx_report function with report output")
  test_that("pmx_report: params: ctr, name, save_dir, output, format;
         result: create report files", {
           skip_on_cran()
           path <- file.path(tempdir(check=TRUE))
           newfolder <- "pmx_report_test"
           work_dir <- file.path(path, newfolder)
           dir.create(work_dir, showWarnings=FALSE)

           ctr %>% pmx_report(
             name="Report_ggPMX",
             save_dir=work_dir,
             template=system.file("rmarkdown", "templates", "standing", package="ggPMX"),
             output="report",
             format=c("word", "html")
           )

           files_word_report <- list.files(path=work_dir, pattern="docx")
           files_html_report <- list.files(path=work_dir, pattern="html")
           files_report_ggPMX <- list.files(path=work_dir, pattern="Report_ggPMX")
           sub_dir <- file.path(work_dir, "ggpmx_GOF")
           path <- file.path(tempdir(check = TRUE))
           newfolder <- "pmx_report_test"
           work_dir <- file.path(path, newfolder)
           dir.create(work_dir)
           ctr %>% pmx_report(
             name = "Report_ggPMX",
             save_dir = work_dir,
             template = system.file(
               "rmarkdown", "templates",
               "standing",
               package = "ggPMX"
             ),
             output = "report",
             format = c("word", "html")
           )

           files_word_report <- list.files(path = work_dir, pattern = "docx")
           files_html_report <- list.files(path = work_dir, pattern = "html")
           files_report_ggPMX <- list.files(path = work_dir, pattern = "Report_ggPMX")
           sub_dir <- file.path(work_dir, "ggpmx_GOF")


           expect_false(is_empty(files_report_ggPMX))
           expect_false(file.exists(sub_dir))
           expect_false(is_empty(sub_dir))
           expect_false(is_empty(files_word_report))
           expect_false(is_empty(files_html_report))
           unlink(work_dir, recursive=TRUE)
         })

  #------------------- pmx_report - "report" - end -------------------------------

  #------------------- pmx_report - "all", "plots", "report" - start -------------

  context("Test pmx_report function with all, plots and report output")
  test_that("pmx_report: params: ctr, name, save_dir, output, format;
         result: create all, plots, report files", {
           skip_on_cran()
           path <- file.path(tempdir(check=TRUE))
           newfolder <- "pmx_report_test"
           work_dir <- file.path(path, newfolder)
           dir.create(work_dir, showWarnings=FALSE)

           ctr %>% pmx_report(
             name="Report_ggPMX",
             save_dir=work_dir,
             template=system.file("rmarkdown", "templates", "standing", package="ggPMX"),
             output=c("all", "plots", "report"),
             format=c("word", "html")
           )

           files_word_report <- list.files(path=work_dir, pattern="docx")
           files_html_report <- list.files(path=work_dir, pattern="html")
           files_report_ggPMX <- list.files(path=work_dir, pattern="Report_ggPMX")
           sub_dir <- file.path(work_dir, "ggpmx_GOF")
           expect_false(is_empty(files_report_ggPMX))
           expect_true(file.exists(sub_dir))
           expect_false(is_empty(sub_dir))
           expect_false(is_empty(files_word_report))
           expect_false(is_empty(files_html_report))
           unlink(work_dir, recursive=TRUE)
         })

  #------------------- pmx_report - "all", "plots", "report" - end ---------------

  #------------------- pmx_report  - start ---------------------------------------

  context("Test pmx_report function")

  test_that("pmx_report: params: ctr, name, save_dir = NULL, output, format;
         result: error save directory is not valid", {
           skip_on_cran()
           expect_error(ctr %>% pmx_report(
             name = "Report_ggPMX",
             save_dir = NULL,
             template = system.file(
               "rmarkdown", "templates",
               "standing",
               package = "ggPMX"
             ),
             output = c("all", "plots", "report"),
             format = c("word", "html")
           ))
         })

  test_that("pmx_report: params: ctr, name, save_dir, output, format;
         result: error save directory is not valid(save_dir is not exist)", {
           skip_on_cran()
           tmp_dir <- tempdir(check = TRUE)
           work_dir <- file.path(tmp_dir, "pmx_report_test")
           expect_error(ctr %>% pmx_report(
             name = "Report_ggPMX",
             save_dir = work_dir,
             template = system.file(
               "rmarkdown", "templates",
               "standing",
               package = "ggPMX"
             ),
             output = c("all", "plots", "report"),
             format = "all"
           ))
         })

  #------------------- pmx_report - end ------------------------------------------

  #------------------- pmx_report with nlmixr controller - start -----------------

  context("Test pmx_nlmixr controller")
  if (requireNamespace("nlmixr2", quietly=TRUE)) {
    one.compartment <- function() {
      ini({
        tka <- 0.45 # Log Ka
        tcl <- 1 # Log Cl
        tv <- 3.45 # Log V
        eta.ka ~ 0.6
        eta.cl ~ 0.3
        eta.v ~ 0.1
        add.sd <- 0.7
      })
      model({
        ka <- exp(tka + eta.ka)
        cl <- exp(tcl + eta.cl)
        v <- exp(tv + eta.v)
        d / dt(depot) <- -ka * depot
        d / dt(center) <- ka * depot - cl / v * center
        cp <- center / v
        cp ~ add(add.sd)
      })
    }

    fit <- nlmixr2::nlmixr(one.compartment, nlmixr2data::theo_sd, "saem", control = list(print = 0))
    ctr <- pmx_nlmixr(fit, conts = c("cl", "v"))

  }

  #------------------- pmx_report nlmixr - output - "all" - start ----------------

  context("Test pmx_report function with all output")
  test_that("pmx_report: params: ctr, name, save_dir, output, format;
         result: ok (with proper args)", {
           skip_on_cran()
           path <- file.path(tempdir(check = TRUE))
           newfolder <- "pmx_report_test"
           work_dir <- file.path(path, newfolder)
           dir.create(work_dir)
           expect_error(ctr %>% pmx_report(
             name = "Report_ggPMX",
             save_dir = work_dir,
             template = system.file(
               "rmarkdown", "templates",
               "standing",
               package = "ggPMX"
             ),
             output = "all",
             format = "all"
           ), NA)
           unlink(work_dir, recursive = TRUE)
         })

  #------------------- pmx_report nlmixr - output - "all" - end ------------------
}
ggPMXdevelopment/ggPMX documentation built on Dec. 11, 2023, 5:24 a.m.