mock_upload <- function(req) { if (req$method == "MKCOL") { httr2::response(status_code = 200) } else if (req$method == "PUT") { if (req$url == "https://cloud.example.com/missing") { httr2::response(status_code = 404) } else { httr2::response(status_code = 200) } } else if (req$method == "PROPFIND") { if (req$url == "https://cloud.example.com/test") { httr2::response(status_code = 207, header = list("Content-Type" = "application/xml"), body = charToRaw(' /test/ HTTP/1.1 200 OK ')) } else if (req$url == "https://cloud.example.com/file.txt") { httr2::response(status_code = 207, header = list("Content-Type" = "application/xml"), body = charToRaw(' /file.txt HTTP/1.1 200 OK ')) } else { httr2::response(status_code = 404) } }else { httr2::response(status_code = 405) } } test_that("upload works", { r <- httr2::request("https://cloud.example.com/") local <- paste0(tempdir(), "/ul") dir.create(local) dir.create(paste0(local, "/test")) file.create(paste0(local, "/test/abc.txt")) expect_equal( httr2::with_mocked_responses(mock_upload, wd_upload(r, local, "dir")), c("dir/test/abc.txt") ) unlink(local, recursive = TRUE) }) test_that("upload file works", { r <- httr2::request("https://cloud.example.com/") local <- paste0(tempdir(), "/ul") dir.create(local) file.create(paste0(local, "/file.txt")) expect_equal( httr2::with_mocked_responses( mock_upload, wd_upload(r, paste0(local, "/file.txt"), "test") ), c("test/file.txt") ) unlink(local, recursive = TRUE) }) test_that("upload without target works", { r <- httr2::request("https://cloud.example.com/") local <- paste0(tempdir(), "/ul") dir.create(local) dir.create(paste0(local, "/test")) file.create(paste0(local, "/test/abc.txt")) expect_equal( httr2::with_mocked_responses(mock_upload, wd_upload(r, local)), c("ul/test/abc.txt") ) unlink(local, recursive = TRUE) }) test_that("upload missing warning works", { r <- httr2::request("https://cloud.example.com/") local <- paste0(tempdir(), "/ul") dir.create(local) file.create(paste0(local, "/file.txt")) expect_warning( httr2::with_mocked_responses( mock_upload, wd_upload(r, paste0(local, "/file.txt"), "missing") ), "Not Found" ) unlink(local, recursive = TRUE) }) test_that("upload missing works", { r <- httr2::request("https://cloud.example.com/") local <- paste0(tempdir(), "/ul") dir.create(local) file.create(paste0(local, "/file.txt")) expect_equal( httr2::with_mocked_responses( mock_upload, suppressWarnings( wd_upload(r, paste0(local, "/file.txt"), "missing") ) ), character(0) ) unlink(local, recursive = TRUE) })