test_data <- segment_logistic[1:5, ]
good <- test_data$.pred_good
poor <- test_data$.pred_poor
lvls <- levels(test_data$Class)

test_data2 <- species_probs[1:5, ]
bobcat <- test_data2$.pred_bobcat
coyote <- test_data2$.pred_coyote
gray_fox <- test_data2$.pred_gray_fox
lvls2 <- levels(test_data2$Species)

test_that("two class succeeds with vector interface", {
  res <- make_two_class_pred(good, levels = lvls, threshold = .5, buffer = .4)

  fct <- factor(c("poor", "poor", "good", "good", "poor"))
  known <- class_pred(fct, which = c(2, 3, 4))

  expect_s3_class(res, "class_pred")
  expect_equal(res, known)
})

test_that("multi class succeeds with vector interface", {
  res <- make_class_pred(bobcat, coyote, gray_fox, levels = lvls2, min_prob = 0.5)

  fct <- factor(c("gray_fox", "gray_fox", "bobcat", "gray_fox", "coyote"))
  known <- class_pred(fct, which = 5)

  expect_s3_class(res, "class_pred")
  expect_equal(res, known)
})

test_that("multi class succeeds with data frame helper", {
  res <- append_class_pred(
    test_data2,
    contains(".pred_"),
    levels = lvls2,
    min_prob = 0.5,
    name = "cp_test"
  )

  known <- make_class_pred(bobcat, coyote, gray_fox, levels = lvls2, min_prob = 0.5)

  expect_s3_class(res, "data.frame")
  expect_equal(res[["cp_test"]], known)
})



test_that("ordered passes through to class_pred", {
  res <- make_class_pred(bobcat, coyote, gray_fox, levels = lvls2, ordered = TRUE)
  res2 <- make_class_pred(bobcat, coyote, gray_fox, levels = lvls2, ordered = TRUE)

  expect_true(is_ordered_class_pred(res))
  expect_true(is_ordered_class_pred(res2))
})

test_that("fails with different length `...`", {
  v1 <- c(1, 2, 3)
  v2 <- c(1, 2)

  expect_snapshot_error(
    make_class_pred(v1, v2)
  )
})

test_that("fails with different type `...`", {
  v1 <- c(1)
  v2 <- c("a")

  expect_snapshot_error(
    make_class_pred(v1, v2)
  )
})

test_that("fails with different length `...` VS levels", {
  v1 <- c(1, 2, 3)
  v2 <- c(1, 2, 3)

  expect_snapshot_error(
    make_class_pred(v1, v2, levels = c("one", "two", "three"))
  )
})

test_that("validates type of `levels` (#42)", {
  expect_snapshot_error(
    make_two_class_pred(1, levels = NULL)
  )

  expect_snapshot_error(
    make_class_pred(1, 2, levels = c(0L, 4L))
  )
})
