tests/testthat/test-spread-groups.R

context("spread-groups")


# Input data --------------------------------------------------------------
input_grouped_summary <- mtcars %>%
  group_by(vs, am) %>%
  summarise(n_low = dplyr::n() > 6, n_high = dplyr::n() < 10)


# spread_groups -----------------------------------------------------------
test_that("spread_groups works", {
  output_ref_1 <- tibble::tibble(
    "0.0._.n_low" = TRUE, "0.1._.n_low" = FALSE,
    "1.0._.n_low" = TRUE, "1.1._.n_low" = TRUE,
    "0.0._.n_high" = FALSE, "0.1._.n_high" = TRUE,
    "1.0._.n_high" = TRUE, "1.1._.n_high" = TRUE
  )

  expect_identical(
    spread_groups(input_grouped_summary, vs, am),
    output_ref_1
  )

  output_ref_2 <- output_ref_1
  colnames(output_ref_2) <- gsub("^(.)\\.", "\\1__", colnames(output_ref_2))

  expect_identical(
    spread_groups(input_grouped_summary, vs, am, .group_sep = "__"),
    output_ref_2
  )

  output_ref_3 <- output_ref_1
  colnames(output_ref_3) <- gsub("\\._\\.", "___", colnames(output_ref_3))

  expect_identical(
    spread_groups(input_grouped_summary, vs, am, .col_sep = "___"),
    output_ref_3
  )
})

test_that("spread_groups throws errors", {
  expect_error(
    spread_groups(input_grouped_summary),
    "spread_groups: No group.*column"
  )
  expect_error(
    spread_groups(input_grouped_summary, ends_with("Absent")),
    "spread_groups: No group.*column"
  )
  expect_error(
    spread_groups(input_grouped_summary, vs),
    "spread_groups:.*non-unique"
  )
  expect_error(
    spread_groups(input_grouped_summary, everything()),
    "spread_groups: No rule.*column"
  )
  expect_error(
    input_grouped_summary %>%
      ungroup() %>%
      mutate(vs = 1:4) %>%
      spread_groups(vs),
    "spread_groups:.*logical"
  )
})
echasnovski/ruler documentation built on April 3, 2023, 4:17 p.m.