tests/testthat/test-marginal-fit-plots.R

local({
  d <- mfrmr:::sample_mfrm_data(seed = 2026)

  .marg_fit <<- suppressWarnings(
    fit_mfrm(
      d,
      "Person",
      c("Rater", "Task", "Criterion"),
      "Score",
      method = "MML",
      model = "RSM",
      quad_points = 7,
      maxit = 30
    )
  )
  .marg_diag <<- diagnose_mfrm(.marg_fit, residual_pca = "none", diagnostic_mode = "both")
  .marg_diag_legacy <<- diagnose_mfrm(.marg_fit, residual_pca = "none", diagnostic_mode = "legacy")
})

with_null_device_local <- function(expr) {
  grDevices::pdf(NULL)
  on.exit(grDevices::dev.off(), add = TRUE)
  testthat::expect_gt(grDevices::dev.cur(), 1)
  value <- force(expr)
  invisible(value)
}

test_that("plot_marginal_fit returns reusable plot payload", {
  p <- plot_marginal_fit(.marg_diag, draw = FALSE, preset = "publication")
  p_prop <- plot_marginal_fit(.marg_fit, diagnostics = .marg_diag, plot_type = "prop_diff", draw = FALSE)

  expect_s3_class(p, "mfrm_plot_data")
  expect_identical(p$name, "marginal_fit")
  expect_identical(as.character(p$data$preset), "publication")
  expect_true(all(c(
    "plot", "table", "full_table", "summary", "facet_summary",
    "step_summary", "guidance", "thresholds",
    "title", "subtitle", "legend", "reference_lines"
  ) %in% names(p$data)))
  expect_gt(nrow(p$data$table), 0)
  expect_s3_class(p_prop, "mfrm_plot_data")
  expect_identical(as.character(p_prop$data$plot), "prop_diff")
})

test_that("plot_marginal_pairwise returns reusable plot payload", {
  p <- plot_marginal_pairwise(.marg_diag, draw = FALSE, preset = "publication")
  p_adj <- plot_marginal_pairwise(
    .marg_fit,
    diagnostics = .marg_diag,
    metric = "adjacent",
    facet = "Rater",
    draw = FALSE
  )

  expect_s3_class(p, "mfrm_plot_data")
  expect_identical(p$name, "marginal_pairwise")
  expect_identical(as.character(p$data$preset), "publication")
  expect_true(all(c(
    "plot", "table", "full_table", "summary", "pair_stats",
    "guidance", "thresholds", "title", "subtitle",
    "legend", "reference_lines"
  ) %in% names(p$data)))
  expect_gt(nrow(p$data$table), 0)
  expect_s3_class(p_adj, "mfrm_plot_data")
  expect_identical(as.character(p_adj$data$plot), "adjacent")
  expect_true(all(as.character(p_adj$data$table$Facet) == "Rater"))
})

test_that("plot_marginal helpers require strict marginal diagnostics", {
  expect_error(
    plot_marginal_fit(.marg_diag_legacy, draw = FALSE),
    "Strict marginal diagnostics are not available",
    fixed = TRUE
  )
  expect_error(
    plot_marginal_pairwise(.marg_diag_legacy, draw = FALSE),
    "Strict marginal diagnostics are not available",
    fixed = TRUE
  )
})

test_that("plot_marginal helpers draw on a null graphics device", {
  p_fit <- with_null_device_local(
    plot_marginal_fit(.marg_diag, draw = TRUE)
  )
  p_pair <- with_null_device_local(
    plot_marginal_pairwise(.marg_diag, metric = "adjacent", draw = TRUE)
  )

  expect_s3_class(p_fit, "mfrm_plot_data")
  expect_s3_class(p_pair, "mfrm_plot_data")
})

Try the mfrmr package in your browser

Any scripts or data that you put into this service are public.

mfrmr documentation built on June 13, 2026, 1:07 a.m.