tests/testthat/test-redact.R

df <- expected <- as.data.frame(nycflights13::flights[1:2, ])

test_that("redact year", {
  expected$year <- 2020

  expect_identical(
    redact(df, list(year = function(x) {
      return(2020)
    })),
    expected
  )
})

test_that("redact year", {
  expected$tailnum <- "tail number"

  expect_identical(
    redact(df, list(tailnum = function(x) {
      return("tail number")
    })),
    expected
  )
})

test_that("standard_redactors", {
  redacted_cols <- c("year", "origin", "distance", "time_hour")
  redactors <- standard_redactors(df, redacted_cols)

  expect_length(redactors, 4)
  expect_equal(redactors[["year"]](df[["year"]]), rep(9L, 2))
  expect_equal(redactors[["origin"]](df[["origin"]]), rep("[redacted]", 2))
  expect_equal(redactors[["distance"]](df[["distance"]]), rep(9, 2))
  expect_equal(
    redactors[["time_hour"]](df[["time_hour"]]),
    rep(as.POSIXct("1988-10-11T17:00:00", tz = "America/New_York"), 2)
  )

  expected$year <- 9L
  expected$origin <- "[redacted]"
  expected$distance <- 9
  expected$time_hour <- as.POSIXct(
    "1988-10-11T17:00:00",
    tz = "America/New_York"
  )

  expect_identical(redact(df, redactors), expected)
  # we can redact_columns directly
  expect_identical(
    redact_columns(df, redacted_cols),
    expected
  )
  # and without case-sensitivity
  expect_identical(
    redact_columns(df, c("YEAR", "ORIGIN", "DISTANCE", "TIME_HOUR")),
    expected
  )
  # and with case-sensitivity
  expect_identical(
    redact_columns(
      df,
      c("YEAR", "ORIGIN", "DISTANCE", "TIME_HOUR"),
      ignore.case = FALSE
    ),
    df
  )
})

test_that("redact_columns when the same name appears more than once", {
  df <- data.frame(name = c(1, 2), other_name = c(3, 4))

  out <- redact_columns(df, "name")
  expect_identical(out$name, c(9, 9))
  expect_identical(out$other_name, c(3, 4))

  out <- redact_columns(df, ".*name")
  expect_identical(out$name, c(9, 9))
  expect_identical(out$other_name, c(9, 9))
})



test_that("standard redactors, empty df", {
  empty_df <- df[0, ]

  # there is no change when there are no rows
  expect_identical(
    redact_columns(empty_df, c("year", "origin", "distance", "time_hour")),
    empty_df
  )
})
ropensci/dittodb documentation built on April 13, 2024, 2:20 a.m.