library(testthat) # ------------------------------------------------------------------------- # Docker Detection # ------------------------------------------------------------------------- test_that("ensureDocker detects Docker daemon", { skip_if_not(system2("docker", "info", stdout = FALSE, stderr = FALSE) == 0, "Docker not available") expect_true(ensureDocker()) }) # ------------------------------------------------------------------------- # pushDockerImage Tests # ------------------------------------------------------------------------- test_that("pushDockerImage requires repo", { skip_if_not(exists("pushDockerImage", mode = "function"), "Package not loaded") expect_error( pushDockerImage(), "repo is required", fixed = TRUE ) }) test_that("pushDockerImage errors when image is missing", { skip_if_not(system2("docker", "info", stdout = FALSE, stderr = FALSE) == 0, "Docker not available") expect_error( pushDockerImage( image_name = "__definitely_not_an_image__", repo = "someone/somewhere", username = "x", password = "y", logout = FALSE ), "not found", ignore.case = TRUE ) }) # ------------------------------------------------------------------------- # dockeriseStudy Tests # ------------------------------------------------------------------------- test_that("dockeriseStudy uses r-ver by default", { skip("Integration test - requires valid renv project") }) test_that("dockeriseStudy uses rstudio when requested", { skip("Integration test - requires valid renv project") }) # ------------------------------------------------------------------------- # runRStudio Tests # ------------------------------------------------------------------------- test_that("runRStudio auto-detects image name", { skip("Integration test - requires built rstudio image") }) test_that("runRStudio generates password if not provided", { skip("Integration test - requires built rstudio image") }) test_that("runRStudio creates results directory", { skip("Integration test - requires built rstudio image") }) test_that("runRStudio returns container ID invisibly", { skip("Integration test - requires built rstudio image") }) # ------------------------------------------------------------------------- # Container Lifecycle Tests # ------------------------------------------------------------------------- test_that("stopStudy stops rstudio containers", { skip("Integration test - requires running container") }) test_that("stopStudy accepts explicit container name", { skip("Integration test - requires running container") }) # ------------------------------------------------------------------------- # Automated Execution Tests # ------------------------------------------------------------------------- test_that("runStudy requires processx package", { skip("Integration test - requires built image") }) test_that("runStudy auto-detects image name", { skip("Integration test - requires built image and test script") }) test_that("runStudy mounts config file when provided", { skip("Integration test - requires built image and config file") }) test_that("runStudy streams logs in real-time", { skip("Integration test - requires built image and test script") }) test_that("runStudy returns exit status", { skip("Integration test - requires built image and test script") })