testthat::test_that("`vif_df()` works", {
  testthat::skip_on_cran()

  data(vi_smol, vi_predictors, package = "spatialData")

  testthat::expect_message(
    x <- vif_df(
      df = vi_smol,
      predictors = vi_predictors[1:10]
    ),
    regexp = "converted the following character columns to factor"
  ) |>
    suppressMessages()

  testthat::expect_message(
    x <- vif_df(
      df = vi_smol,
      predictors = vi_predictors[1:10]
    ),
    regexp = "may bias the multicollinearity analysis"
  ) |>
    suppressMessages()

  testthat::expect_warning(
    x <- vif_df(
      df = vi_smol,
      predictors = vi_predictors[1:10],
      quiet = TRUE
    ),
    regexp = "may bias the multicollinearity analysis"
  )

  testthat::expect_true(
    is.data.frame(x)
  )

  testthat::expect_true(
    all(names(x) %in% c("predictor", "vif"))
  )

  testthat::expect_true(
    nrow(x) == length(vi_predictors[1:10])
  )

  # edge cases ----

  #no arguments
  testthat::expect_error(
    x <- vif_df(
      df = NULL,
      predictors = NULL
    ),
    regexp = "argument 'df' cannot be NULL"
  )

  #single predictor
  testthat::expect_message(
    x <- vif_df(
      df = vi_smol,
      predictors = vi_predictors[1]
    ),
    regexp = "only one valid predictor"
  ) |>
    suppressMessages()

  testthat::expect_true(
    is.data.frame(x)
  )

  testthat::expect_true(
    nrow(x) == 1
  )

  testthat::expect_equal(x$vif, 0, tolerance = 1e-10)
})
