test_that("autoplot with error bars (class)", {
  p_1 <- autoplot(two_class_res, metric = "roc_auc")
  expect_s3_class(p_1, "ggplot")
  expect_equal(
    names(p_1$data),
    c(
      "wflow_id", ".config", ".metric", "mean", "std_err", "n",
      "preprocessor", "model", "rank"
    )
  )
  expect_equal(rlang::get_expr(p_1$mapping$x), expr(rank))
  expect_equal(rlang::get_expr(p_1$mapping$y), expr(mean))
  expect_equal(rlang::get_expr(p_1$mapping$colour), expr(model))
  expect_equal(as.list(p_1$facet)$params, list())
  expect_equal(
    rlang::get_expr(as.list(p_1$layers[[2]])$mapping$ymin),
    expr(mean - std_errs * std_err)
  )
  expect_equal(
    rlang::get_expr(as.list(p_1$layers[[2]])$mapping$ymax),
    expr(mean + std_errs * std_err)
  )
  expect_equal(as.character(p_1$labels$y), "roc_auc")
  expect_equal(as.character(p_1$labels$x), "Workflow Rank")
})

test_that("autoplot with error bars (wflow_id)", {
   p_1 <- autoplot(two_class_res, metric = "roc_auc", type = "wflow_id")
   expect_s3_class(p_1, "ggplot")
   expect_equal(
      names(p_1$data),
      c(
         "wflow_id", ".config", ".metric", "mean", "std_err", "n",
         "preprocessor", "model", "rank"
      )
   )
   expect_equal(rlang::get_expr(p_1$mapping$x), expr(rank))
   expect_equal(rlang::get_expr(p_1$mapping$y), expr(mean))
   expect_equal(rlang::get_expr(p_1$mapping$colour), expr(wflow_id))
   expect_equal(
      rlang::get_expr(as.list(p_1$layers[[2]])$mapping$ymin),
      expr(mean - std_errs * std_err)
   )
   expect_equal(
      rlang::get_expr(as.list(p_1$layers[[2]])$mapping$ymax),
      expr(mean + std_errs * std_err)
   )
   expect_equal(as.character(p_1$labels$y), "roc_auc")
   expect_equal(as.character(p_1$labels$x), "Workflow Rank")
})

test_that("autoplot with bad type input", {
  expect_snapshot(
    error = TRUE,
    autoplot(two_class_res, metric = "roc_auc", type = "banana")
  )
})


test_that("autoplot with without error bars", {
  p_2 <- autoplot(chi_features_res)
  expect_s3_class(p_2, "ggplot")
  expect_equal(
    names(p_2$data),
    c(
      "wflow_id", ".config", ".metric", "mean", "std_err", "n",
      "preprocessor", "model", "rank"
    )
  )
  expect_equal(rlang::get_expr(p_2$mapping$x), expr(rank))
  expect_equal(rlang::get_expr(p_2$mapping$y), expr(mean))
  expect_equal(rlang::get_expr(p_2$mapping$colour), expr(model))
  expect_equal(length(p_2$layers), 1)
  expect_equal(names(as.list(p_2$facet)$params$facet), ".metric")
  expect_equal(p_2$labels$y, "Metric")
  expect_equal(p_2$labels$x, "Workflow Rank")
})

test_that("autoplot for specific workflow result", {
  p_3 <- autoplot(chi_features_res, id = "plus_pca_lm")
  p_4 <- autoplot(
    extract_workflow_set_result(
      chi_features_res,
      id = "plus_pca_lm"
    )
  )
  expect_equal(p_3$data, p_4$data)
  expect_equal(p_3$labels, p_4$labels)
  expect_equal(
    purrr::map(as.list(p_3$mapping), rlang::get_expr),
    purrr::map(as.list(p_4$mapping), rlang::get_expr)
  )
})

test_that("automatic selection of rank metric", {
  expect_equal(
    workflowsets:::pick_metric(two_class_res, NULL, NULL),
    list(metric = "roc_auc", direction = "maximize")
  )
  expect_equal(
    workflowsets:::pick_metric(two_class_res, NULL, "accuracy"),
    list(metric = "accuracy", direction = "maximize")
  )
  expect_equal(
    workflowsets:::pick_metric(two_class_res, "accuracy"),
    list(metric = "accuracy", direction = "maximize")
  )
  expect_equal(
    workflowsets:::pick_metric(two_class_res, "roc_auc"),
    list(metric = "roc_auc", direction = "maximize")
  )
  expect_error(
    workflowsets:::pick_metric(two_class_res, "roc_auc", "accuracy"),
    "was not in the results"
  )
})
