test_that("snapshot cleanup makes nice message if needed", {
  dir <- local_snap_dir(c("a.md", "b.md"))
  expect_snapshot({
    snapshot_cleanup(dir)
    snapshot_cleanup(dir, c("a", "b"))
  })
})

test_that("deletes empty dirs", {
  dir <- local_snap_dir(character())
  dir.create(file.path(dir, "a", "b", "c"), recursive = TRUE)
  dir.create(file.path(dir, "b"), recursive = TRUE)
  dir.create(file.path(dir, "c"), recursive = TRUE)

  snapshot_cleanup(dir)
  expect_equal(dir(dir), character())
})

test_that("detects outdated snapshots", {
  dir <- local_snap_dir(c("a.md", "b.md", "b.new.md"))
  expect_equal(snapshot_outdated(dir, c("a", "b")), character())
  expect_equal(snapshot_outdated(dir, "a"), c("b.md", "b.new.md"))
  expect_equal(snapshot_outdated(dir, "b"), "a.md")
  expect_equal(snapshot_outdated(dir), c("a.md", "b.md", "b.new.md"))
})

test_that("preserves variants", {
  dir <- local_snap_dir(c("a.md", "windows/a.md", "windows/b.md"))
  expect_equal(snapshot_outdated(dir, "a"), "windows/b.md")

  # Doesn't delete new files in variants
  dir <- local_snap_dir(c("a.md", "windows/a.md", "windows/a.new.md"))
  expect_equal(snapshot_outdated(dir, "a"), character())
})

test_that("detects outdated snapshot files", {
  dir <- local_snap_dir(c("a/foo.txt", "b/foo.txt", "b/foo.new.txt"))

  expect_equal(
    snapshot_outdated(dir, character(), character()),
    c("a/foo.txt", "b/foo.new.txt", "b/foo.txt")
  )
  expect_equal(
    snapshot_outdated(dir, character(), "a/foo.txt"),
    c("b/foo.new.txt", "b/foo.txt")
  )
  expect_equal(
    snapshot_outdated(dir, character(), "b/foo.txt"),
    "a/foo.txt"
  )
  expect_equal(
    snapshot_outdated(dir, character(), c("a/foo.txt", "b/foo.txt")),
    character()
  )
})

test_that("detects individual snapshots files to remove", {
  dir <- local_snap_dir(c("a/a1", "a/a2", "b/b1"))
  expect_equal(
    snapshot_outdated(dir, c("a", "b"), "a/a1"),
    c("a/a2", "b/b1")
  )
})
