test_that("use_lintr works as expected", {
  tmp <- withr::local_tempdir()

  lintr_file <- use_lintr(path = tmp)
  expect_true(file.exists(lintr_file))

  # check that newly created file is in the root directory
  expect_identical(
    normalize_path(lintr_file),
    file.path(normalize_path(tmp), ".lintr")
  )

  # can't generate if a .lintr already exists
  expect_error(use_lintr(path = tmp), "Found an existing configuration")

  # check that `read_settings()` works with the generated file
  # this can be checked by checking lintr runs successfully
  lints <- lint_dir(tmp)
  expect_length(lints, 0L)
})

test_that("use_lintr with type = full also works", {
  tmp <- withr::local_tempdir()

  # type = "full" also works with read_settings()
  lintr_file <- use_lintr(path = tmp, type = "full")
  expect_true(file.exists(lintr_file))

  # check that newly created file is in the root directory
  expect_identical(
    normalize_path(lintr_file),
    file.path(normalize_path(tmp), ".lintr")
  )

  skip_if_not_installed("cyclocomp") # avoid warning
  lints <- lint_dir(tmp)
  expect_length(lints, 0L)
})

test_that("No .Rbuildignore is created of packages", {
  tmp <- withr::local_tempdir()

  lintr_file <- use_lintr(path = tmp, type = "full")
  expect_false(file.exists(file.path(tmp, ".Rbuildignore")))
})

test_that("No .Rbuildignore is filled outside of packages", {
  tmp <- withr::local_tempdir()
  ignore_path <- file.path(tmp, ".Rbuildignore")
  file.create(ignore_path)

  lintr_file <- use_lintr(path = tmp, type = "full")
  expect_identical(readLines(ignore_path), character())
})

test_that("No .Rbuildignore is filled if pattern already present", {
  tmp <- withr::local_tempdir()
  writeLines(
    "Package: test",
    file.path(tmp, "DESCRIPTION")
  )
  ignore_path <- file.path(tmp, ".Rbuildignore")
  ignore <- c("^fu$", "^\\.lintr$", "^bar$")
  writeLines(ignore, ignore_path)

  expect_message(
    {
      lintr_file <- use_lintr(path = tmp, type = "full")
    },
    "^\\.lintr$ is already ignored in `.Rbuildignore`.",
    fixed = TRUE
  )
  expect_identical(readLines(ignore_path), ignore)
})

test_that("use_lintr creates the correct regex", {
  tmp <- withr::local_tempdir()
  writeLines(
    "Package: test",
    file.path(tmp, "DESCRIPTION")
  )
  ignore_path <- file.path(tmp, ".Rbuildignore")
  writeLines(
    c("^fu$", "^bar$"),
    ignore_path
  )

  expect_message(
    {
      lintr_file <- use_lintr(path = tmp, type = "full")
    },
    regexp = rex::rex("Added ^\\.lintr$ to `.Rbuildignore`")
  )
  expect_identical(readLines(ignore_path), c("^fu$", "^bar$", "^\\.lintr$"))
})
