diff --git a/R/app-driver-upload-file.R b/R/app-driver-upload-file.R index 67c1772e..10f89f5d 100644 --- a/R/app-driver-upload-file.R +++ b/R/app-driver-upload-file.R @@ -21,9 +21,9 @@ app_upload_file <- function( "shinytest2.outputValuesWaiter.start(", toJSON_atomic(timeout_), ", 2);" )) - filename <- inputs[[1]] - self$log_message(paste0("Uploading file for id: ", filename)) + self$log_message(paste0("Uploading file(s) for id: ", + paste(filename, collapse = ", "))) node_id <- app_find_node_id(self, private, input = names(inputs)[1]) @@ -42,7 +42,7 @@ app_upload_file <- function( ) self$get_chromote_session()$DOM$setFileInputFiles( - files = list(fs::path_real(filename)), + files = as.list(fs::path_real(filename)), nodeId = node_id ) diff --git a/tests/testthat/apps/upload-multi/app.R b/tests/testthat/apps/upload-multi/app.R new file mode 100644 index 00000000..9d47bdb1 --- /dev/null +++ b/tests/testthat/apps/upload-multi/app.R @@ -0,0 +1,21 @@ +library(shiny) + +ui <- fluidPage( + "Upload multiple files:", + fileInput("files", label = NULL, multiple = TRUE), + verbatimTextOutput("file_out"), +) + +server <- function(input, output) { + + # Display `file` output + output$file_out <- renderPrint({ + if (is.null(input$files)) + return(NULL) + df <- input$files + df$datapath <- paste0("/", basename(df$datapath)) + df + }) +} + +shinyApp(ui, server) diff --git a/tests/testthat/apps/upload-multi/tests/testthat.R b/tests/testthat/apps/upload-multi/tests/testthat.R new file mode 100644 index 00000000..7d25b5b9 --- /dev/null +++ b/tests/testthat/apps/upload-multi/tests/testthat.R @@ -0,0 +1 @@ +shinytest2::test_app() diff --git a/tests/testthat/apps/upload-multi/tests/testthat/_snaps/app-upload-multi/upload-multi-001.json b/tests/testthat/apps/upload-multi/tests/testthat/_snaps/app-upload-multi/upload-multi-001.json new file mode 100644 index 00000000..34dac574 --- /dev/null +++ b/tests/testthat/apps/upload-multi/tests/testthat/_snaps/app-upload-multi/upload-multi-001.json @@ -0,0 +1,28 @@ +{ + "input": { + "files": { + "name": [ + "cars.csv", + "cars_2.csv" + ], + "size": [ + 308, + 229 + ], + "type": [ + "text/csv", + "text/csv" + ], + "datapath": [ + "0.csv", + "1.csv" + ] + } + }, + "output": { + "file_out": " name size type datapath\n1 cars.csv 308 text/csv /0.csv\n2 cars_2.csv 229 text/csv /1.csv" + }, + "export": { + + } +} diff --git a/tests/testthat/apps/upload-multi/tests/testthat/_snaps/app-upload-multi/upload-multi-001_.png b/tests/testthat/apps/upload-multi/tests/testthat/_snaps/app-upload-multi/upload-multi-001_.png new file mode 100644 index 00000000..34c5a719 Binary files /dev/null and b/tests/testthat/apps/upload-multi/tests/testthat/_snaps/app-upload-multi/upload-multi-001_.png differ diff --git a/tests/testthat/apps/upload-multi/tests/testthat/cars.csv b/tests/testthat/apps/upload-multi/tests/testthat/cars.csv new file mode 100644 index 00000000..5d0acdb9 --- /dev/null +++ b/tests/testthat/apps/upload-multi/tests/testthat/cars.csv @@ -0,0 +1,51 @@ +"speed","dist" +4,2 +4,10 +7,4 +7,22 +8,16 +9,10 +10,18 +10,26 +10,34 +11,17 +11,28 +12,14 +12,20 +12,24 +12,28 +13,26 +13,34 +13,34 +13,46 +14,26 +14,36 +14,60 +14,80 +15,20 +15,26 +15,54 +16,32 +16,40 +17,32 +17,40 +17,50 +18,42 +18,56 +18,76 +18,84 +19,36 +19,46 +19,68 +20,32 +20,48 +20,52 +20,56 +20,64 +22,66 +23,54 +24,70 +24,92 +24,93 +24,120 +25,85 diff --git a/tests/testthat/apps/upload-multi/tests/testthat/cars_2.csv b/tests/testthat/apps/upload-multi/tests/testthat/cars_2.csv new file mode 100644 index 00000000..387076db --- /dev/null +++ b/tests/testthat/apps/upload-multi/tests/testthat/cars_2.csv @@ -0,0 +1,38 @@ +"speed","dist" +4,2 +4,10 +7,4 +7,22 +8,16 +9,10 +10,18 +10,26 +10,34 +11,17 +11,28 +12,14 +12,20 +12,24 +12,28 +13,26 +13,34 +13,34 +13,46 +14,26 +14,36 +14,60 +14,80 +15,20 +15,26 +15,54 +16,32 +16,40 +17,32 +17,40 +17,50 +18,42 +18,56 +18,76 +18,84 +19,36 +19,46 diff --git a/tests/testthat/apps/upload-multi/tests/testthat/setup.R b/tests/testthat/apps/upload-multi/tests/testthat/setup.R new file mode 100644 index 00000000..80d55d27 --- /dev/null +++ b/tests/testthat/apps/upload-multi/tests/testthat/setup.R @@ -0,0 +1 @@ +shinytest2::load_app_env() diff --git a/tests/testthat/apps/upload-multi/tests/testthat/test-app-upload-multi.R b/tests/testthat/apps/upload-multi/tests/testthat/test-app-upload-multi.R new file mode 100644 index 00000000..baf64c2a --- /dev/null +++ b/tests/testthat/apps/upload-multi/tests/testthat/test-app-upload-multi.R @@ -0,0 +1,13 @@ +library(shinytest2) + +test_that("Make sure upload can use two local files", { + app <- AppDriver$new(name = "upload-multi") + + app$upload_file(files = c("cars.csv", "cars_2.csv")) + app$expect_values() + + expect_error( + app$upload_file(files = "missing_file.csv"), + "Error finding upload file at path", fixed = TRUE + ) +})