library(targets)
tar_script({
  sleep_run <- function(...) Sys.sleep(10)
  list(
    tar_target(data1, sleep_run()),
    tar_target(data2, sleep_run()),
    tar_target(model1, sleep_run(data1)),
    tar_target(model2, sleep_run(data2)),
    tar_target(conclusions, sleep_run(c(model1, model2)))
  )
})
# Should just launch the app in a blocking process:
tar_watch(background = FALSE)
# Should exclude data1 in the graph.
tar_watch(background = FALSE, exclude = "data1")
# Should exclude sleep_run() and data2 in the graph.
px <- tar_watch(background = TRUE, exclude = c("sleep_run", "data2"))
px$kill()
# Should not block the main process:
tar_watch(
  seconds = 10,
  outdated = FALSE,
  targets_only = TRUE,
  height = "450px"
)
# The main process should be free to run the pipeline.
tar_make()
# Run it again and see skipped targets.
tar_make()
# Restarting the session should terminate the app.
rstudioapi::restartSession()
tar_destroy()
unlink("_targets.R")

# View the progress tables. Should see some of each status except dispatched.
library(targets)
tar_script({
  list(
    tar_target(x, seq_len(2)),
    tar_target(y, stop("error message"), pattern = map(x), error = "continue"),
    tar_target(z, tar_cancel(), pattern = map(x)),
    tar_target(w, x, pattern = map(x)),
    # nolint start
    tar_target(
      forever, {
      Sys.sleep(Inf)
      c(x, y, z, w)
    })
    # nolint end
  )
})
tar_make() # Stop early.
tar_watch(background = FALSE)

# Should see dispatched branches in the table.
library(targets)
tar_destroy()
tar_script({
  tar_option_set(error = "continue")
  sleep_run <- function(...) Sys.sleep(10)
  list(
    tar_target(batch, seq_len(4)),
    tar_target(data1, sleep_run(batch), pattern = map(batch))
  )
})
# Select the "branches" box:
tar_watch(
  seconds = 10,
  outdated = FALSE,
  targets_only = TRUE,
  height = "450px"
)
# The main process should be free to run the pipeline.
tar_make()
# Run it again to see skipped branches.
tar_make()
# Look at the canceled branches in the "branches" view.
tar_script({
  list(
    tar_target(batch, seq_len(4)),
    tar_target(data1, tar_cancel(), pattern = map(batch))
  )
})
tar_make()

# Restarting the session should terminate the app.
rstudioapi::restartSession()
tar_destroy()
unlink("_targets.R")

# Launch using different config settings.
tar_script({
  sleep_run <- function(...) Sys.sleep(0.5)
  list(
    tar_target(x, seq_len(2)),
    tar_target(y, x, pattern = map(x)),
    tar_target(data1, sleep_run()),
    tar_target(data2, sleep_run()),
    tar_target(model1, sleep_run(data1)),
    tar_target(model2, sleep_run(data2)),
    tar_target(conclusions, sleep_run(c(model1, model2)))
  )
}, script = "example/script.R")
tar_config_set(
  script = "example/script.R",
  store = "example/store",
  config = "example/config.yaml"
)
px <- tar_watch(
  seconds = 5,
  targets_only = TRUE,
  height = "450px",
  config = "example/config.yaml"
)
# Should show pipeline progress in app.
tar_make(
  script = "example/script.R",
  store = "example/store"
)
# Files should go in the correct places.
library(testthat)
expect_false(file.exists("_targets"))
expect_false(file.exists("_targets.R"))
expect_true(file.exists("example/config.yaml"))
expect_true(file.exists("example/script.R"))
expect_true(file.exists("example/store"))
# Switching the config affects the app.
tar_config_set(
  script = tempfile(),
  store = tempfile(),
  config = "example/config.yaml"
)
px$kill()
# No targets file should be detected.
px <- tar_watch(
  seconds = 5,
  targets_only = TRUE,
  height = "450px"
)
px$kill()
unlink("example", recursive = TRUE)
