tests/testthat/test-outpack-misc.R

test_that("ids are valid", {
  id <- outpack_id()
  expect_silent(validate_outpack_id(id))
})


test_that("can detect malformed id", {
  expect_error(validate_outpack_id("myid"),
               "Malformed id 'myid'")
})


test_that("Can resolve dependencies where there are none", {
  expect_equal(
    find_all_dependencies("a", mock_metadata_depends("a")),
    "a")
  expect_equal(
    find_all_dependencies("a", c(mock_metadata_depends("a"),
                                 mock_metadata_depends("b", "a"))),
    "a")
})


test_that("Can filter dependency tree", {
  metadata <- c(
    mock_metadata_depends("a"),
    mock_metadata_depends("b"),
    mock_metadata_depends("c"),
    mock_metadata_depends("d", c("a", "b")),
    mock_metadata_depends("e", c("b", "c")),
    mock_metadata_depends("f", c("a", "c")),
    mock_metadata_depends("g", c("a", "f", "c")),
    mock_metadata_depends("h", c("a", "b", "c")),
    mock_metadata_depends("i", "f"),
    mock_metadata_depends("j", c("i", "e", "a")))

  expect_equal(find_all_dependencies("a", metadata), "a")
  expect_equal(find_all_dependencies("b", metadata), "b")
  expect_equal(find_all_dependencies("c", metadata), "c")

  expect_equal(find_all_dependencies("d", metadata), c("a", "b", "d"))
  expect_equal(find_all_dependencies("e", metadata), c("b", "c", "e"))
  expect_equal(find_all_dependencies("f", metadata), c("a", "c", "f"))

  expect_equal(find_all_dependencies("g", metadata), c("a", "c", "f", "g"))
  expect_equal(find_all_dependencies("h", metadata), c("a", "b", "c", "h"))
  expect_equal(find_all_dependencies("i", metadata), c("a", "c", "f", "i"))
  expect_equal(find_all_dependencies("j", metadata),
               c("a", "b", "c", "e", "f", "i", "j"))
})


test_that("Can select multiple dependencies at once", {
  metadata <- c(
    mock_metadata_depends("a"),
    mock_metadata_depends("b"),
    mock_metadata_depends("c"),
    mock_metadata_depends("d", c("a", "b")),
    mock_metadata_depends("e", c("b", "c")),
    mock_metadata_depends("f", c("a", "c")),
    mock_metadata_depends("g", c("a", "f", "c")),
    mock_metadata_depends("h", c("a", "b", "c")),
    mock_metadata_depends("i", "f"),
    mock_metadata_depends("j", c("i", "e", "a")))

  expect_equal(find_all_dependencies(character(0), metadata), character(0))
  expect_equal(find_all_dependencies(c("c", "b", "a"), metadata),
               c("a", "b", "c"))
  expect_equal(find_all_dependencies(c("d", "e", "f"), metadata),
               c("a", "b", "c", "d", "e", "f"))
})


test_that("can validate file renaming inputs", {
  envir <- list2env(list(a = "aaa", b = "bbb"), parent = emptyenv())
  expect_equal(
    validate_file_from_to("a", envir),
    data_frame(here = "a", there = "a"))
  expect_equal(
    validate_file_from_to(c("a", B = "b"), envir),
    data_frame(here = c("a", "B"), there = c("a", "b")))
  expect_equal(
    validate_file_from_to(c("${a}/a" = "a"), envir),
    data_frame(here = "aaa/a", there = "a"))
  expect_equal(
    validate_file_from_to(list("${a}/a" = "a"), envir),
    data_frame(here = "aaa/a", there = "a"))

  err <- expect_error(
    validate_file_from_to(1, envir, "files"),
    "Unexpected object type for 'files'")
  expect_equal(
    err$body,
    c(x = "Given object of class 'numeric'",
      i = "Expected a (named) character vector"))

  expect_error(
    validate_file_from_to(list("x", c("a", "b")), envir, "files"),
    "All elements of 'files' must be strings")

  expect_error(
    validate_file_from_to(c("a", "a"), envir, "files"),
    "Every destination filename (in 'files') must be unique",
    fixed = TRUE)
  expect_error(
    validate_file_from_to(c("a" = "x", "a" = "y"), envir, "files"),
    "Every destination filename (in 'files') must be unique",
    fixed = TRUE)

  expect_error(
    validate_file_from_to(".", envir, "files"),
    "Invalid file '.' in files, did you mean './'")
  expect_error(
    validate_file_from_to(c("a", "b", ".", "c", "d"), envir, "files"),
    "Invalid file '.' in files, did you mean './'")
})

Try the orderly package in your browser

Any scripts or data that you put into this service are public.

orderly documentation built on Jan. 24, 2026, 1:07 a.m.