
test_that("we can check out packages from our local repository", {

  # enter test scope
  project <- renv_tests_scope()
  init()

  # check out a package + its dependencies; this invocation is
  # similar in spirit to a plain `install()` call
  renv_tests_dependencies("breakfast")
  checkout(packages = "breakfast")

  # check that they were installed
  expect_true(renv_package_installed("breakfast"))
  expect_true(renv_package_installed("bread"))

})

test_that("checkout with actions = 'snapshot' creates a lockfile without installing", {

  project <- renv_tests_scope()
  init()

  # checkout with snapshot action only -- no packages should be installed
  checkout(packages = "breakfast", actions = "snapshot")

  # packages should not be installed
  expect_false(renv_package_installed("breakfast"))
  expect_false(renv_package_installed("bread"))

  # lockfile should exist and contain the full dependency tree
  lockfile <- renv_lockfile_read(paths$lockfile(project = project))
  records <- renv_lockfile_records(lockfile)

  expect_true("breakfast" %in% names(records))
  expect_true("oatmeal" %in% names(records))
  expect_true("toast" %in% names(records))
  expect_true("bread" %in% names(records))

  # records should have dependency metadata
  expect_identical(records$breakfast$Source, "Repository")
  expect_identical(records$breakfast$Version, "1.0.0")
  expect_true(!is.null(records$breakfast$Depends))

})

test_that("activate.R has no unreplaced placeholders after checkout", {

  project <- renv_tests_scope("breakfast")
  init()

  checkout(packages = "breakfast", actions = c("snapshot", "restore"))

  activate <- renv_paths_activate(project = project)
  contents <- readLines(activate)
  placeholders <- grep("\\.\\.[a-zA-Z0-9]+\\.\\.", contents, value = TRUE)
  expect_length(placeholders, 0)

})

test_that("renv_infrastructure_write_activate is skipped during checkout", {

  project <- renv_tests_scope("breakfast")
  init()

  renv_scope_binding(the, "activate_deferred", TRUE)
  result <- renv_infrastructure_write_activate(project = project)
  expect_false(result)

})

test_that("we can check out packages from the package manager instance", {

  skip_on_cran()
  skip_if(Sys.info()[["machine"]] == "aarch64")
  skip_if(getRversion() >= "4.6.0")

  renv_tests_scope()
  init()

  # ensure we reset repos on exit
  renv_scope_options(repos = getOption("repos"))

  # install rlang from an old snapshot
  checkout(date = "2023-01-02", packages = "rlang")

  # check that we installed the requested version
  expect_true(renv_package_installed("rlang"))
  expect_true(renv_package_version("rlang") == "1.0.6")

})
