tests/testthat/test-interrogate_conjointly.R

test_that("Interrogating conjointly with an agent yields the correct results", {
  
  tbl <-
    dplyr::tibble(
      a = c(5, 7, 6,  5, 8,  7),
      b = c(3, 4, 6,  8, 9, 11),
      c = c(2, 6, 8, NA, 3,  8)
    )
  
  # Use three validation step functions in a single
  # `conjointly()` validation step, then, `interrogate()`
  validation <-
    create_agent(tbl = tbl) %>%
    conjointly(
      ~ col_vals_gt(., columns = vars(a), value = 4),
      ~ col_vals_lt(., columns = vars(b), value = 10),
      ~ col_vals_not_null(., columns = vars(c))
    ) %>%
    interrogate()
  
  # Expect a single row in `validation$validation_set`
  expect_equivalent(nrow(validation$validation_set), 1)
  
  # Expect certain values in `validation$validation_set`
  expect_equivalent(validation$tbl_name, "tbl")
  expect_equivalent(validation$validation_set$i, 1)
  expect_equivalent(validation$validation_set$assertion_type, "conjointly")
  expect_true(is.list(validation$validation_set$column))
  expect_true(is.list(validation$validation_set[["values"]]))
  expect_true(is.na(validation$validation_set$na_pass))
  expect_true(is.list(validation$validation_set$preconditions))
  expect_true(is.list(validation$validation_set$actions))
  expect_false(validation$validation_set$all_passed)
  expect_equivalent(validation$validation_set$n, 6)
  expect_equivalent(validation$validation_set$n_passed, 4)
  expect_equivalent(validation$validation_set$n_failed, 2)
  expect_equivalent(validation$validation_set$f_passed, 0.66667)
  expect_equivalent(validation$validation_set$f_failed, 0.33333)
  
  validation$validation_set[["values"]] %>% unlist() %>% length() %>%
    expect_equal(3)
  
  expect_is(validation$validation_set[["values"]] %>% unlist() %>% .[[1]], "formula")
  expect_is(validation$validation_set[["values"]] %>% unlist() %>% .[[2]], "formula")
  expect_is(validation$validation_set[["values"]] %>% unlist() %>% .[[3]], "formula")
  
  validation$validation_set[["values"]] %>% unlist() %>% .[[1]] %>% as.character() %>%
    expect_equal(c("~", "col_vals_gt(., columns = vars(a), value = 4)"))
  validation$validation_set[["values"]] %>% unlist() %>% .[[2]] %>% as.character() %>%
    expect_equal(c("~", "col_vals_lt(., columns = vars(b), value = 10)"))
  validation$validation_set[["values"]] %>% unlist() %>% .[[3]] %>% as.character() %>%
    expect_equal(c("~", "col_vals_not_null(., columns = vars(c))"))
  
  validation$validation_set[["preconditions"]] %>% unlist() %>% length() %>%
    expect_equal(0)
  
  # Use three validation step functions in a single
  # `conjointly()` validation step, then, `interrogate()`;
  # use `preconditions` to mutate the `tbl` beforehand
  validation <-
    create_agent(tbl = tbl) %>%
    conjointly(
      ~ col_vals_gt(., columns = vars(a), value = 4),
      ~ col_vals_lt(., columns = vars(b), value = 10),
      ~ col_vals_not_null(., columns = vars(c)),
      preconditions = ~ . %>% head(2)
    ) %>%
    interrogate()
  
  # Expect a single row in `validation$validation_set`
  expect_equivalent(nrow(validation$validation_set), 1)
  
  # Expect certain values in `validation$validation_set`
  expect_equivalent(validation$tbl_name, "tbl")
  expect_equivalent(validation$validation_set$i, 1)
  expect_equivalent(validation$validation_set$assertion_type, "conjointly")
  expect_true(is.list(validation$validation_set$column))
  expect_true(is.list(validation$validation_set[["values"]]))
  expect_true(is.na(validation$validation_set$na_pass))
  expect_true(is.list(validation$validation_set$preconditions))
  expect_true(is.list(validation$validation_set$actions))
  expect_true(validation$validation_set$all_passed)
  expect_equivalent(validation$validation_set$n, 2)
  expect_equivalent(validation$validation_set$n_passed, 2)
  expect_equivalent(validation$validation_set$n_failed, 0)
  expect_equivalent(validation$validation_set$f_passed, 1)
  expect_equivalent(validation$validation_set$f_failed, 0)
  
  validation$validation_set[["values"]] %>% unlist() %>% length() %>%
    expect_equal(3)
  
  validation$validation_set[["preconditions"]] %>% unlist() %>% length() %>%
    expect_equal(1)
  
  expect_is(
    validation$validation_set[["values"]] %>%
      unlist() %>%
      .[[1]],
    "formula"
  )
  
  expect_is(
    validation$validation_set[["values"]] %>%
      unlist() %>%
      .[[2]],
    "formula"
  )
  
  expect_is(
    validation$validation_set[["values"]] %>%
      unlist() %>%
      .[[3]],
    "formula"
  )
  
  validation$validation_set[["values"]] %>%
    unlist() %>%
    .[[1]] %>%
    as.character() %>%
    expect_equal(c("~", "col_vals_gt(., columns = vars(a), value = 4)"))
  
  validation$validation_set[["values"]] %>%
    unlist() %>%
    .[[2]] %>%
    as.character() %>%
    expect_equal(c("~", "col_vals_lt(., columns = vars(b), value = 10)"))
  
  validation$validation_set[["values"]] %>%
    unlist() %>%
    .[[3]] %>%
    as.character() %>%
    expect_equal(c("~", "col_vals_not_null(., columns = vars(c))"))
  
  validation$validation_set[["preconditions"]] %>%
    unlist() %>%
    .[[1]] %>%
    as.character() %>%
    expect_equal(c("~", ". %>% head(2)"))
  
  # Use a single validation step function in a single
  # `conjointly()` validation step, then, `interrogate()`
  validation <-
    create_agent(tbl = tbl) %>%
    conjointly(
      ~ col_vals_gt(., columns = vars(a), value = 2)
    ) %>%
    interrogate()
  
  # Expect a single row in `validation$validation_set`
  expect_equivalent(nrow(validation$validation_set), 1)
  
  # Expect certain values in `validation$validation_set`
  expect_equivalent(validation$tbl_name, "tbl")
  expect_equivalent(validation$validation_set$i, 1)
  expect_equivalent(validation$validation_set$assertion_type, "conjointly")
  expect_true(is.list(validation$validation_set$column))
  expect_true(is.list(validation$validation_set[["values"]]))
  expect_true(is.na(validation$validation_set$na_pass))
  expect_true(is.list(validation$validation_set$preconditions))
  expect_true(is.list(validation$validation_set$actions))
  expect_true(validation$validation_set$all_passed)
  expect_equivalent(validation$validation_set$n, 6)
  expect_equivalent(validation$validation_set$n_passed, 6)
  expect_equivalent(validation$validation_set$n_failed, 0)
  expect_equivalent(validation$validation_set$f_passed, 1)
  expect_equivalent(validation$validation_set$f_failed, 0)
  
  validation$validation_set[["values"]] %>%
    unlist() %>%
    length() %>%
    expect_equal(1)
  
  validation$validation_set[["preconditions"]] %>% 
    unlist() %>%
    length() %>%
    expect_equal(0)
  
  expect_is(
    validation$validation_set[["values"]] %>%
      unlist() %>%
      .[[1]],
    "formula"
  )
  
  validation$validation_set[["values"]] %>%
    unlist() %>%
    .[[1]] %>%
    as.character() %>%
    expect_equal(c("~", "col_vals_gt(., columns = vars(a), value = 2)"))
  
  # Expect an evaluation error if there are no validation
  # step functions supplied to `conjointly()`
  expect_true(
    create_agent(tbl = tbl) %>%
      conjointly() %>%
      interrogate() %>%
      .$validation_set %>%
      .$eval_error
  )
})

Try the pointblank package in your browser

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

pointblank documentation built on April 25, 2023, 5:06 p.m.