
## 'shell_script' -------------------------------------------------------------

test_that("'shell_script' works with has dir_shell, no name_shell", {
  dir_tmp <- tempfile(tmpdir = getwd())
  if (file.exists(dir_tmp))
    unlink(dir_tmp, recursive = TRUE)
  dir.create(dir_tmp)
  dir.create(path_join(dir_tmp, "src"))
  file_path <- path_join(dir_tmp, "src/script.R")
  writeLines("cmd_assign(.data = 'data/mydata.csv', use_log = FALSE, .out = 'out/cleaned.rds')",
             con = file_path)
  suppressMessages(ans_obtained <- shell_script(path_files = "src", dir_shell = dir_tmp))
  ans_expected <- paste0("\n",
                         "Rscript src/script.R \\\n",
                         "  data/mydata.csv \\\n",
                         "  out/cleaned.rds \\\n",
                         "  --use_log=FALSE\n\n")
  expect_identical(ans_obtained, ans_expected)
  expect_true(file.exists(path_join(dir_tmp, "workflow.sh")))
  unlink(dir_tmp, recursive = TRUE)
})

test_that("'shell_script' works with no dir_shell, has name_shell", {
  dir_curr <- getwd()
  dir_tmp <- tempfile(tmpdir = getwd())
  if (file.exists(dir_tmp))
    unlink(dir_tmp, recursive = TRUE)
  dir.create(dir_tmp)
  setwd(dir_tmp)
  dir.create("src")
  writeLines("cmd_assign(.data = 'data/mydata.csv', use_log = FALSE, .out = 'out/cleaned.rds')",
             con = "src/script.R")
  suppressMessages(ans_obtained <- shell_script(path_files = "src", name_shell = "shell"))
  ans_expected <- paste0("\n",
                         "Rscript src/script.R \\\n",
                         "  data/mydata.csv \\\n",
                         "  out/cleaned.rds \\\n",
                         "  --use_log=FALSE\n\n")
  expect_identical(ans_obtained, ans_expected)
  expect_true(file.exists("shell"))
  unlink(dir_tmp, recursive = TRUE)
  setwd(dir_curr)
})

test_that("'shell_script' throws error with no path_files", {
  expect_error(shell_script(),
               "argument \"path_files\" is missing, with no default")
})

test_that("'shell_script' throws appropriate error when file already exists", {
  dir_curr <- getwd()
  dir_tmp <- tempfile(tmpdir = getwd())
  if (file.exists(dir_tmp))
    unlink(dir_tmp, recursive = TRUE)
  dir.create(dir_tmp)
  setwd(dir_tmp)
  dir.create("src")
  writeLines("cmd_assign(.data = 'data/mydata.csv', use_log = FALSE, .out = 'out/cleaned.rds')",
             con = "src/script.R")
  writeLines("bla",
             con = "shell.sh")
  expect_error(suppressMessages(shell_script(path_files = "src", name_shell = "shell.sh")),
               "already contains a")
  suppressMessages(shell_script(path_files = "src", name_shell = "shell.sh", overwrite = TRUE))
  ans <- readLines("shell.sh")
  expect_identical(ans[[2]], "Rscript src/script.R \\")
  unlink(dir_tmp, recursive = TRUE)
  setwd(dir_curr)
})
