test_that("system and server cert stores are concatenated", {
  local_temp_config()

  # use a dummy CA bundle
  withr::local_options(rsconnect.ca.bundle = test_path("certs/store.crt"))

  # create and then read the temporary certificate file
  concatenated <- createCertificateFile(readLines(test_path("certs/localhost.crt")))
  withr::defer(unlink(concatenated))
  store <- paste(readLines(concatenated), collapse = "\n")

  # make sure that the localhost and system stores both exist in the
  # concatenated store
  expect_true(grepl("localhost", store, fixed = TRUE))
  expect_true(grepl("system", store, fixed = TRUE))
})

test_that("invalid certificates cannot be added", {
  local_temp_config()

  expect_error(addTestServer(
    url = "https://localhost:4567/",
    name = "cert_test_e",
    certificate = test_path("certs/invalid.crt")
  ))
})

test_that("certificates not used when making plain http connections", {
  local_temp_config()
  local_http_recorder()

  GET(
    list(
      protocol  = "http",
      host      = "localhost:4567",
      port      = "80",
      path      = "apps"
    ),
    authInfo = list(certificate = test_path("certs/localhost.crt")),
    "apps"
  )
  expect_equal(httpLastRequest$certificate, NULL)
})

test_that("certificates used when making https connections", {
  local_temp_config()
  local_http_recorder()

  GET(
    list(
      protocol  = "https",
      host      = "localhost:4567",
      port      = "443",
      path      = "apps"
    ),
    authInfo = list(certificate = test_path("certs/localhost.crt")),
    "apps"
  )

  # we expect to get a cert file
  expect_true(file.exists(httpLastRequest$certificate))

  # clean up
  unlink(httpLastRequest$certificate)
})
