test_that("doesn't add NA level", {
  f1 <- factor(c("a", NA), levels = c("a", "b"))
  f2 <- fct_drop(f1)

  expect_equal(levels(f2), "a")
})

test_that("can optionally restrict levels to drop", {
  f1 <- factor("a", levels = c("a", "b", "c"))

  expect_equal(levels(fct_drop(f1, only = "b")), c("a", "c"))
  expect_equal(levels(fct_drop(f1, only = "a")), c("a", "b", "c"))
})

test_that("preserves ordered class and attributes", {
  f1 <- ordered(letters[1:2], letters[1:3])
  attr(f1, "x") <- "test"

  f2 <- fct_drop(f1)
  expect_s3_class(f2, "ordered")
  expect_equal(attr(f2, "x"), attr(f1, "x"))
})

test_that("validates its inputs", {
  expect_snapshot(error = TRUE, {
    fct_drop(1)
    fct_drop("x", only = 1)
  })
})
