diff --git a/.gitignore b/.gitignore index f5b67292..2a0faeef 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ - !.github/*/* docs .Rproj.user @@ -9,3 +8,4 @@ docs inst/doc rsconnect deliverables +zz_rsconnect* diff --git a/DESCRIPTION b/DESCRIPTION index 044003f2..7fa03266 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -11,6 +11,7 @@ Authors@R: c( comment = c(ORCID = "0000-0002-4816-4624")), person("Yohann", "Mansiaux", , "yohann@thinkr.fr", role = "aut", comment = c(ORCID = "0000-0002-8905-6603")), + person("Jean-Daniel", "LOMENEDE", role = "aut"), person("David", "Granjon", role = "ctb"), person("Alan", "Dipert", role = "ctb") ) @@ -31,6 +32,7 @@ Imports: purrr (>= 0.3.4), shiny (>= 1.7.1), stringr (>= 1.4.0), + tools, utils, XML (>= 3.99.0.10) Suggests: diff --git a/NAMESPACE b/NAMESPACE index 6fd46cef..4043b4ec 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -7,6 +7,7 @@ export(checkboxGroupInput_dsfr) export(checkboxInput_dsfr) export(column_dsfr) export(convert_to_dsfr) +export(fileInput_dsfr) export(dateRangeInput_dsfr) export(fluidPage_dsfr) export(fluidRow_dsfr) @@ -25,6 +26,7 @@ export(selectInput_dsfr) export(showModal_dsfr) export(sliderInput_dsfr) export(tabPanel_dsfr) +export(tableOutput_dsfr) export(tabsetPanel_dsfr) export(toggleSwitch_dsfr) export(updateCheckboxGroupInput_dsfr) diff --git a/R/actionbutton_dsfr.R b/R/actionbutton_dsfr.R index fb730079..40fa98a7 100644 --- a/R/actionbutton_dsfr.R +++ b/R/actionbutton_dsfr.R @@ -1,4 +1,4 @@ -# WARNING - Generated by {fusen} from dev/flat_composants/flat_actionButton.Rmd: do not edit by hand +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_actionButton.Rmd: do not edit by hand #' actionButton_dsfr #' @@ -14,7 +14,7 @@ #' if (interactive()) { #' library(shiny) #' library(shinygouv) -#' +#' #' ui <- fluidPage_dsfr( #' header = header_dsfr( #' intitule = "Intitule", @@ -38,13 +38,13 @@ #' paste("Vous avez cliqu\u00e9", input$test, "fois sur le bouton") #' }) #' } -#' +#' #' shinyApp(ui, server) #' } actionButton_dsfr <- function( - inputId, - label, - class = NULL + inputId, + label, + class = "fr-p-1w" ) { actionButton_dsfr_template( inputId, diff --git a/R/fileinput_dsfr.R b/R/fileinput_dsfr.R new file mode 100644 index 00000000..03d8132d --- /dev/null +++ b/R/fileinput_dsfr.R @@ -0,0 +1,63 @@ +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fileInput.Rmd: do not edit by hand + +#' fileInput_dsfr +#' +#' +#' @param inputId id de l'input +#' @param label etiquette du bouton d'import, par exemple "choisir fichier" +#' @param message eventuelles indications complementaires, par exemple "fichier images de moins de 2 Mo" +#' +#' @return html +#' @importFrom assertthat assert_that +#' @export +#' +#' @examples +#' +#' if (interactive()) { +#' ui <- fluidPage_dsfr( +#' fluidRow_dsfr( +#' column_dsfr(width = 4, +#' fileInput_dsfr(inputId = "file1", label = "Importez vos données", message = "seul le format csv est pris en charge"), +#' br(), +#' checkboxInput_dsfr(inputId = "header", label = "Utiliser les en-tetes du fichier") +#' ), +#' column_dsfr(width = 8, +#' tableOutput_dsfr("contenu")("contenu") +#' ) +#' ) +#' ) +#' +#' server <- function(input, output) { +#' output$contenu <- renderTable({ +#' file <- input$file1 +#' ext <- tools::file_ext(file$datapath) +#' +#' req(file) +#' validate(need(ext == "csv", "Veuillez choisir un fichier csv svp")) +#' +#' read.csv2(file$datapath, header = input$header, nrows = 12) +#' }) +#' } +#' +#' shinyApp(ui, server) +#' } +#' +#' +fileInput_dsfr <- function( + inputId, + label, + message + ) { + + assertthat::assert_that(is.character(inputId)) + assertthat::assert_that(is.character(label)) + assertthat::assert_that(is.character(message)) + + fileInput_dsfr_template( + inputId = inputId, + label = label, + message = message + ) %>% + parse_html() + +} diff --git a/R/fileinput_dsfr_template.R b/R/fileinput_dsfr_template.R new file mode 100644 index 00000000..0932bab2 --- /dev/null +++ b/R/fileinput_dsfr_template.R @@ -0,0 +1,28 @@ +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fileInput.Rmd: do not edit by hand + +#' template pour fileInput_dsfr +#' +#' @param inputId id de l'input +#' @param label etiquette du bouton d'import, par exemple "choisir fichier" +#' @param message eventuelles indications complementaires, par exemple "seuls les fichiers csv sont acceptes" +#' @importFrom htmltools htmlTemplate +#' @return html +#' @noRd +fileInput_dsfr_template <- function( + inputId, + label, + message +) { + + htmltools::htmlTemplate( + filename = system.file( + get_dsfr_version(with_v = TRUE), + "composant", + "fileInput.html", + package = "shinygouv" + ), + inputId = inputId, + label = label, + message = message + ) +} diff --git a/R/mod_input_actions.R b/R/mod_input_actions.R index aa5ebec1..95ae4864 100644 --- a/R/mod_input_actions.R +++ b/R/mod_input_actions.R @@ -78,7 +78,33 @@ mod_input_actions_ui <- function(id){ label = "Afficher le spinner pendant 5 secondes" ) ) - ) + ), + + tags$br(), + tags$hr(), + + fluidRow_dsfr( + column_dsfr( + 12, + h3("Demo fileInput_dsfr()"), + # Adding space to the column + # https://www.systeme-de-design.gouv.fr/elements-d-interface/fondamentaux-techniques/espacement + extra_class = "fr-my-2w" + ), + column_dsfr(width = 4, + fileInput_dsfr(inputId = ns("user_file"), label = "Importez vos donn\u00e9es", message = "Seul le format csv est pris en charge."), + br(), + checkboxInput_dsfr(inputId = ns("header_csv"), label = "Utiliser les en-tetes du fichier", value = TRUE), + extra_class = "fr-px-1w"), + column_dsfr(width = 8, + tableOutput_dsfr(outputId = ns("contenu")), + extra_class = "fr-px-1w" + ) + ), + + tags$br(), + tags$hr() + ) } @@ -130,7 +156,16 @@ mod_input_actions_server <- function(id){ } ) + output$contenu <- renderTable({ + req(input$user_file) + user_file <- input$user_file + ext <- tools::file_ext(user_file$datapath) + validate(need(ext == "csv", "Veuillez choisir un fichier csv svp")) + read.csv2(user_file$datapath, header = input$header_csv, nrows = 5) }) + + }) + } ## To be copied in the UI diff --git a/R/tableoutput_dsfr.R b/R/tableoutput_dsfr.R new file mode 100644 index 00000000..9a7604d2 --- /dev/null +++ b/R/tableoutput_dsfr.R @@ -0,0 +1,30 @@ +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_tableOutput.Rmd: do not edit by hand + +#' tableOutput_dsfr +#' +#' @param outputId nom d'output a partir duquel lire la table +#' @return html +#' +#' @export +#' +#' @examples +#' +#' if (interactive()) { +#' # table example +#' shinyApp( +#' ui = fluidPage_dsfr( +#' fluidRow_dsfr( +#' column_dsfr(12, +#' tableOutput_dsfr('table') +#' ) +#' ) +#' ), +#' server = function(input, output) { +#' output$table <- renderTable(iris) +#' } +#' ) +#' } +tableOutput_dsfr <- function (outputId) { + assertthat::assert_that(is.character(outputId)) + shiny::div(id = outputId, class = "fr-table shiny-html-output") + } diff --git a/dev/flat_composants/flat_actionButton.Rmd b/dev/flat_composants/flat_actionButton.Rmd index 5b06b150..dacededb 100644 --- a/dev/flat_composants/flat_actionButton.Rmd +++ b/dev/flat_composants/flat_actionButton.Rmd @@ -146,7 +146,7 @@ test_that("actionButton_dsfr_template works", { actionButton_dsfr <- function( inputId, label, - class = NULL + class = "fr-p-1w" ) { actionButton_dsfr_template( inputId, diff --git a/dev/flat_composants/flat_fileInput.Rmd b/dev/flat_composants/flat_fileInput.Rmd new file mode 100644 index 00000000..82f92f19 --- /dev/null +++ b/dev/flat_composants/flat_fileInput.Rmd @@ -0,0 +1,261 @@ +--- +title: "fileInput" +output: html_document +editor_options: + chunk_output_type: console +--- + + +```{r development, include=FALSE} +library(testthat) +``` + +```{r development-load} +# Load already included functions if relevant +pkgload::load_all(export_all = TRUE) +``` + +# fileInput_dsfr_template + +```{r function-fileInput_dsfr_template} +#' template pour fileInput_dsfr +#' +#' @param inputId id de l'input +#' @param label etiquette du bouton d'import, par exemple "choisir fichier" +#' @param message eventuelles indications complementaires, par exemple "seuls les fichiers csv sont acceptes" +#' @importFrom htmltools htmlTemplate +#' @return html +#' @noRd +fileInput_dsfr_template <- function( + inputId, + label, + message +) { + + htmltools::htmlTemplate( + filename = system.file( + get_dsfr_version(with_v = TRUE), + "composant", + "fileInput.html", + package = "shinygouv" + ), + inputId = inputId, + label = label, + message = message + ) +} +``` + + +```{r tests-fileInput_dsfr_template} +test_that("fileInput_dsfr_template works", { + expect_true(inherits(fileInput_dsfr_template, "function")) + + htmlfile <- readLines( + system.file( + get_dsfr_version(with_v = TRUE), + "composant", + "fileInput.html", + package = "shinygouv" + ) + ) + + #' @description Comparer les parametres par rapport a ceux de la version precedente + + purrr::walk( + c( + "inputId", + "label", + "message" + ), + function(param) { + with_moustache <- paste0("\\{\\{", param, "\\}\\}") + expect_true(any(grepl(pattern = with_moustache, htmlfile)), + label = paste0("sans moustache '", param, "'")) + }) + + + test_html <- fileInput_dsfr_template( + inputId = "1245", + label = "étiquette", + message = "csv seulement" + ) + + #' @description tester si tous les params sont remplaces + expect_false(grepl(pattern = "\\{\\{", test_html)) + + + #' @description Verifie que les parametres ont bien ete remplace par leurs valeurs + + purrr::walk( + c( + inputId = "1245", + label = "étiquette", + message = "csv seulement" + ), + function(param) { + expect_true(any(grepl(pattern = param, test_html)), + label = paste0("remplacement de '", param, "'")) + }) + + ## lecture snapshot + snapshot_html <- readRDS( + file = file.path( + "snapshot", # pour passer les tests en production (apres le inflate), + # "tests/testthat/snapshot", # pour passer les tests en developpement (avant le inflate), + "fileInput_dsfr_template.Rda") + ) + + #' @description Verifie le HTML créé + # Retire tous les espaces et saut de ligne pour la comparaison + # Pour eviter les problèmes inter-OS + expect_equal(gsub("\\s|\\n", "", test_html), + gsub("\\s|\\n", "", snapshot_html)) + + # Si erreur au précedent test deux cas possible : + # + # - nouveau composant: Lancer le saveRDS, relancer le test et recommenter le saveRDS + # + # - composant a mettre a jour: si le test ne passe plus avant de changer le snapshot, + # assurez vous d'avoir bien pris en compte la nouvelle personnalisation + # dans la fonction fileInput_dsfr_template puis lancer le saveRDS, relancer le test et recommenter le saveRDS +# +# saveRDS(test_html, +# file = file.path("tests/testthat/snapshot", +# "fileInput_dsfr_template.Rda" +# ) +# ) + + +}) +``` + + +# fileInput_dsfr + +```{r function-fileInput_dsfr} +#' fileInput_dsfr +#' +#' +#' @param inputId id de l'input +#' @param label etiquette du bouton d'import, par exemple "choisir fichier" +#' @param message eventuelles indications complementaires, par exemple "fichier images de moins de 2 Mo" +#' +#' @return html +#' @importFrom assertthat assert_that +#' @export +#' +#' @examples +fileInput_dsfr <- function( + inputId, + label, + message + ) { + + assertthat::assert_that(is.character(inputId)) + assertthat::assert_that(is.character(label)) + assertthat::assert_that(is.character(message)) + + fileInput_dsfr_template( + inputId = inputId, + label = label, + message = message + ) %>% + parse_html() + +} +``` + +```{r examples-fileInput_dsfr} + +if (interactive()) { + ui <- fluidPage_dsfr( + fluidRow_dsfr( + column_dsfr(width = 4, + fileInput_dsfr(inputId = "file1", label = "Importez vos données", message = "seul le format csv est pris en charge"), + br(), + checkboxInput_dsfr(inputId = "header", label = "Utiliser les en-tetes du fichier") + ), + column_dsfr(width = 8, + tableOutput_dsfr("contenu") + ) + ) + ) + + server <- function(input, output) { + output$contenu <- renderTable({ + file <- input$file1 + ext <- tools::file_ext(file$datapath) + + req(file) + validate(need(ext == "csv", "Veuillez choisir un fichier csv svp")) + + read.csv2(file$datapath, header = input$header, nrows = 12) + }) + } + + shinyApp(ui, server) +} + + +``` + +```{r tests-fileInput_dsfr} +test_that("fileInput_dsfr works", { + test_html <- fileInput_dsfr( + inputId = "file1", + label = "Importer vos données", + message = "seul le format csv est pris en charge" + ) + #' @description tester si shiny.tag + expect_s3_class(test_html, "shiny.tag") + + ## lecture snapshot + snapshot_html <- readRDS( + file = file.path( + "snapshot", # pour passer les tests en production (apres le inflate), + # "tests/testthat/snapshot", # pour passer les tests en developpement (avant le inflate), + "fileInput_dsfr.Rda") + ) + + #' @description Verifer que le HTML est correct en sortie + # Retire tous les espaces et saut de ligne pour la comparaison + # Pour eviter les problèmes inter-OS + expect_equal(gsub("\\s|\\n", "", test_html), + gsub("\\s|\\n", "", snapshot_html)) + + # Si erreur au précedent test deux cas possible : + # + # - nouveau composant: Lancer le saveRDS, relancer le test et recommenter le saveRDS + # + # - composant a mettre a jour: si le test ne passe plus avant de changer le snapshot, + # assurez vous d'avoir bien pris en compte la nouvelle personnalisation + # dans la fonction fileInput_dsfr puis lancer le saveRDS, relancer le test et recommenter le saveRDS + + # saveRDS(test_html, + # file = file.path("tests/testthat/snapshot", + # "fileInput_dsfr.Rda" + # ) + # ) + + + # Ajouter des tests pour controler le type des parametres d'entree + # Cela verifie que les 'assertthat' fonctionnent correctement + + +}) +``` + +# update_fileInput_dsfr + +Pour les fonctions de type `update_*`, voir l'exemple de "flat_radioButtons.Rmd" + + +```{r development-inflate, eval=FALSE} +# Run but keep eval=FALSE to avoid infinite loop +# Execute in the console directly + +fusen::inflate(flat_file = "dev/flat_composants/flat_fileInput.Rmd", + vignette_name = NA) +``` + diff --git a/dev/flat_composants/flat_selectInput.Rmd b/dev/flat_composants/flat_selectInput.Rmd index 050a52e7..55d9de7f 100644 --- a/dev/flat_composants/flat_selectInput.Rmd +++ b/dev/flat_composants/flat_selectInput.Rmd @@ -21,8 +21,6 @@ pkgload::load_all(export_all = TRUE) ```{r function-selectInput_options_dsfr_template} #' Template pour la liste des options du selectInput #' -#' Template pour la liste des options du selectInput -#' #' @param option_value value des options (futurs `choices` du selectInput) #' @param option_label labels des options (en cas d'utilisation d'un vecteur nommé pour les futurs `choices` du selectInput) #' @param selected la valeur est-elle sélectionnée par défaut ou non @@ -360,7 +358,6 @@ if (interactive()) { ui <- fluidPage_dsfr( header = header_dsfr( intitule = "Intitule", - officiel = "Officiel", nom_site_service = "Nom du site / service", baseline = "baseline - precisions sur l organisation", class = "fr-m-1w" @@ -551,7 +548,6 @@ if (interactive()) { ui <- fluidPage_dsfr( header = header_dsfr( intitule = "Intitule", - officiel = "Officiel", nom_site_service = "Nom du site / service", baseline = "baseline - precisions sur l organisation", class = "fr-m-1w" diff --git a/dev/flat_composants/flat_tableOutput.Rmd b/dev/flat_composants/flat_tableOutput.Rmd new file mode 100644 index 00000000..e6408170 --- /dev/null +++ b/dev/flat_composants/flat_tableOutput.Rmd @@ -0,0 +1,74 @@ +--- +title: "tableOutput_dsfr" +output: html_document +editor_options: + chunk_output_type: console +--- + + +```{r development, include=FALSE} +library(testthat) +``` + +```{r development-load} +# Load already included functions if relevant +pkgload::load_all(export_all = TRUE) +``` + + +# tableOutput_dsfr + +```{r function-tableOutput_dsfr} +#' tableOutput_dsfr +#' +#' @param outputId nom d'output a partir duquel lire la table +#' @return html +#' +#' @export +#' +#' @examples +tableOutput_dsfr <- function (outputId) { + assertthat::assert_that(is.character(outputId)) + shiny::div(id = outputId, class = "fr-table shiny-html-output") + } +``` + +```{r examples-tableOutput_dsfr} + +if (interactive()) { + # table example + shinyApp( + ui = fluidPage_dsfr( + fluidRow_dsfr( + column_dsfr(12, + tableOutput_dsfr('table') + ) + ) + ), + server = function(input, output) { + output$table <- renderTable(iris) + } + ) +} +``` + +```{r tests-tableOutput_dsfr} +test_that("tableOutput_dsfr works", { + test_html <- tableOutput_dsfr("1") + #' @description tester si shiny.tag + expect_s3_class(test_html, "shiny.tag") +} +) +``` + + +```{r development-inflate, eval=FALSE} +# Run but keep eval=FALSE to avoid infinite loop +# Execute in the console directly +fusen::inflate( + flat_file = "dev/flat_composants/flat_tableOutput.Rmd", + vignette_name = NA, + check = FALSE +) +``` + diff --git a/dev/tools/deploy.R b/dev/tools/deploy.R index 8665a0cc..cbdbba3b 100644 --- a/dev/tools/deploy.R +++ b/dev/tools/deploy.R @@ -8,7 +8,6 @@ remotes::install_deps() remotes::install_local() - message("--- Add server ---\n") rsconnect::setAccountInfo( @@ -19,12 +18,15 @@ rsconnect::setAccountInfo( message("--- Deploying app ---\n") appFiles <- list.files(".", recursive = TRUE) -appFiles <- appFiles[!grepl(".Rprofile|renv|rstudio_|deliverables|dev|data-raw|docker", appFiles)] +appFiles <- appFiles[!grepl(".Rprofile|renv|rstudio_|dev|data-raw|docker|testthat|test.convert.dsfr", appFiles)] + +options(rsconnect.packrat = TRUE) rsconnect::deployApp( appDir = ".", account = Sys.getenv("SHINYAPPS_NAME"), appFiles = appFiles, appName = Sys.getenv("NAME_OF_APP"), - lint = FALSE + lint = FALSE, + forceUpdate = TRUE ) diff --git a/dev/tools/flat_convert_to_dsfr.Rmd b/dev/tools/flat_convert_to_dsfr.Rmd index 14bbcd23..e2fa5669 100644 --- a/dev/tools/flat_convert_to_dsfr.Rmd +++ b/dev/tools/flat_convert_to_dsfr.Rmd @@ -238,7 +238,7 @@ test_that("convert_to_dsfr works", { expect_error(convert_to_dsfr(path = file.path(mydir, "R"), version = NULL)) #' @description Retourne une erreur si le tableau de correspondance n'existe pas pour la version specifiee - expect_error(convert_to_dsfr(path = file.path(mydir, "R"), version = "A.A.A.A"), msg = "Le dossier 'vA.A.A.A' n'existe pas") + expect_error(convert_to_dsfr(path = file.path(mydir, "R"), version = "A.A.A.A"), "Le dossier 'vA.A.A.A' n existe pas") expect_error(convert_to_dsfr(path = file.path(mydir, "R")), regexp = NA) app_ui <- readLines(file.path(mydir, "R", "app_ui.R")) diff --git a/inst/v1.9.3/composant/fileInput.html b/inst/v1.9.3/composant/fileInput.html new file mode 100644 index 00000000..81ddd72b --- /dev/null +++ b/inst/v1.9.3/composant/fileInput.html @@ -0,0 +1,6 @@ +
+ + +
diff --git a/inst/v1.9.3/table_correspondance_shiny_dsfr.csv b/inst/v1.9.3/table_correspondance_shiny_dsfr.csv index 7831f06c..a834fa4d 100644 --- a/inst/v1.9.3/table_correspondance_shiny_dsfr.csv +++ b/inst/v1.9.3/table_correspondance_shiny_dsfr.csv @@ -29,5 +29,7 @@ 28;modalDialog;modalDialog_dsfr;modalDialog.html;oui 29;showModal;showModal_dsfr;;oui 30;removeModal;removeModal_dsfr;;oui -31;dateRangeInput;dateRangeInput_dsfr;dateRangeInput.html;oui -32;updateDateRangeInput;updateDateRangeInput_dsfr;;oui +31;fileInput;fileInput_dsfr;fileInput.html;oui +32;tableOutput;tableOutput_dsfr;;oui +33;dateRangeInput;dateRangeInput_dsfr;dateRangeInput.html;oui +34;updateDateRangeInput;updateDateRangeInput_dsfr;;oui diff --git a/man/actionButton_dsfr.Rd b/man/actionButton_dsfr.Rd index 36a25c04..e312af15 100644 --- a/man/actionButton_dsfr.Rd +++ b/man/actionButton_dsfr.Rd @@ -4,7 +4,7 @@ \alias{actionButton_dsfr} \title{actionButton_dsfr} \usage{ -actionButton_dsfr(inputId, label, class = NULL) +actionButton_dsfr(inputId, label, class = "fr-p-1w") } \arguments{ \item{inputId}{id de l'input} diff --git a/man/fileInput_dsfr.Rd b/man/fileInput_dsfr.Rd new file mode 100644 index 00000000..c70f76bf --- /dev/null +++ b/man/fileInput_dsfr.Rd @@ -0,0 +1,54 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fileinput_dsfr.R +\name{fileInput_dsfr} +\alias{fileInput_dsfr} +\title{fileInput_dsfr} +\usage{ +fileInput_dsfr(inputId, label, message) +} +\arguments{ +\item{inputId}{id de l'input} + +\item{label}{etiquette du bouton d'import, par exemple "choisir fichier"} + +\item{message}{eventuelles indications complementaires, par exemple "fichier images de moins de 2 Mo"} +} +\value{ +html +} +\description{ +fileInput_dsfr +} +\examples{ + +if (interactive()) { + ui <- fluidPage_dsfr( + fluidRow_dsfr( + column_dsfr(width = 4, + fileInput_dsfr(inputId = "file1", label = "Importez vos données", message = "seul le format csv est pris en charge"), + br(), + checkboxInput_dsfr(inputId = "header", label = "Utiliser les en-tetes du fichier") + ), + column_dsfr(width = 8, + tableOutput_dsfr("contenu")("contenu") + ) + ) + ) + + server <- function(input, output) { + output$contenu <- renderTable({ + file <- input$file1 + ext <- tools::file_ext(file$datapath) + + req(file) + validate(need(ext == "csv", "Veuillez choisir un fichier csv svp")) + + read.csv2(file$datapath, header = input$header, nrows = 12) + }) + } + + shinyApp(ui, server) +} + + +} diff --git a/man/shinygouv-package.Rd b/man/shinygouv-package.Rd index 692a2fcb..ae622e58 100644 --- a/man/shinygouv-package.Rd +++ b/man/shinygouv-package.Rd @@ -17,6 +17,7 @@ Authors: \item Murielle Delmotte \email{murielle@thinkr.fr} (\href{https://orcid.org/0000-0002-1339-2424}{ORCID}) \item Cervan Girard \email{cervan@thinkr.fr} (\href{https://orcid.org/0000-0002-4816-4624}{ORCID}) \item Yohann Mansiaux \email{yohann@thinkr.fr} (\href{https://orcid.org/0000-0002-8905-6603}{ORCID}) + \item Jean-Daniel LOMENEDE } Other contributors: diff --git a/man/tableOutput_dsfr.Rd b/man/tableOutput_dsfr.Rd new file mode 100644 index 00000000..cfc253ff --- /dev/null +++ b/man/tableOutput_dsfr.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/tableoutput_dsfr.R +\name{tableOutput_dsfr} +\alias{tableOutput_dsfr} +\title{tableOutput_dsfr} +\usage{ +tableOutput_dsfr(outputId) +} +\arguments{ +\item{outputId}{nom d'output a partir duquel lire la table} +} +\value{ +html +} +\description{ +tableOutput_dsfr +} +\examples{ + +if (interactive()) { + # table example + shinyApp( + ui = fluidPage_dsfr( + fluidRow_dsfr( + column_dsfr(12, + tableOutput_dsfr('table') + ) + ) + ), + server = function(input, output) { + output$table <- renderTable(iris) + } + ) +} +} diff --git a/tests/testthat/snapshot/fileInput_dsfr.Rda b/tests/testthat/snapshot/fileInput_dsfr.Rda new file mode 100644 index 00000000..a2dceb3c Binary files /dev/null and b/tests/testthat/snapshot/fileInput_dsfr.Rda differ diff --git a/tests/testthat/snapshot/fileInput_dsfr_template.Rda b/tests/testthat/snapshot/fileInput_dsfr_template.Rda new file mode 100644 index 00000000..21e14df9 Binary files /dev/null and b/tests/testthat/snapshot/fileInput_dsfr_template.Rda differ diff --git a/tests/testthat/test-convert_to_dsfr.R b/tests/testthat/test-convert_to_dsfr.R index d171c050..df2c3d0a 100644 --- a/tests/testthat/test-convert_to_dsfr.R +++ b/tests/testthat/test-convert_to_dsfr.R @@ -22,7 +22,7 @@ test_that("convert_to_dsfr works", { expect_error(convert_to_dsfr(path = file.path(mydir, "R"), version = NULL)) #' @description Retourne une erreur si le tableau de correspondance n'existe pas pour la version specifiee - expect_error(convert_to_dsfr(path = file.path(mydir, "R"), version = "A.A.A.A"), msg = "Le dossier 'vA.A.A.A' n'existe pas") + expect_error(convert_to_dsfr(path = file.path(mydir, "R"), version = "A.A.A.A"), "Le dossier 'vA.A.A.A' n existe pas") expect_error(convert_to_dsfr(path = file.path(mydir, "R")), regexp = NA) app_ui <- readLines(file.path(mydir, "R", "app_ui.R")) diff --git a/tests/testthat/test-fileinput_dsfr.R b/tests/testthat/test-fileinput_dsfr.R new file mode 100644 index 00000000..15bc36eb --- /dev/null +++ b/tests/testthat/test-fileinput_dsfr.R @@ -0,0 +1,45 @@ +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fileInput.Rmd: do not edit by hand + +test_that("fileInput_dsfr works", { + test_html <- fileInput_dsfr( + inputId = "file1", + label = "Importer vos données", + message = "seul le format csv est pris en charge" + ) + #' @description tester si shiny.tag + expect_s3_class(test_html, "shiny.tag") + + ## lecture snapshot + snapshot_html <- readRDS( + file = file.path( + "snapshot", # pour passer les tests en production (apres le inflate), + # "tests/testthat/snapshot", # pour passer les tests en developpement (avant le inflate), + "fileInput_dsfr.Rda") + ) + + #' @description Verifer que le HTML est correct en sortie + # Retire tous les espaces et saut de ligne pour la comparaison + # Pour eviter les problèmes inter-OS + expect_equal(gsub("\\s|\\n", "", test_html), + gsub("\\s|\\n", "", snapshot_html)) + + # Si erreur au précedent test deux cas possible : + # + # - nouveau composant: Lancer le saveRDS, relancer le test et recommenter le saveRDS + # + # - composant a mettre a jour: si le test ne passe plus avant de changer le snapshot, + # assurez vous d'avoir bien pris en compte la nouvelle personnalisation + # dans la fonction fileInput_dsfr puis lancer le saveRDS, relancer le test et recommenter le saveRDS + + # saveRDS(test_html, + # file = file.path("tests/testthat/snapshot", + # "fileInput_dsfr.Rda" + # ) + # ) + + + # Ajouter des tests pour controler le type des parametres d'entree + # Cela verifie que les 'assertthat' fonctionnent correctement + + +}) diff --git a/tests/testthat/test-fileinput_dsfr_template.R b/tests/testthat/test-fileinput_dsfr_template.R new file mode 100644 index 00000000..fe26ef73 --- /dev/null +++ b/tests/testthat/test-fileinput_dsfr_template.R @@ -0,0 +1,82 @@ +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fileInput.Rmd: do not edit by hand + +test_that("fileInput_dsfr_template works", { + expect_true(inherits(fileInput_dsfr_template, "function")) + + htmlfile <- readLines( + system.file( + get_dsfr_version(with_v = TRUE), + "composant", + "fileInput.html", + package = "shinygouv" + ) + ) + + #' @description Comparer les parametres par rapport a ceux de la version precedente + + purrr::walk( + c( + "inputId", + "label", + "message" + ), + function(param) { + with_moustache <- paste0("\\{\\{", param, "\\}\\}") + expect_true(any(grepl(pattern = with_moustache, htmlfile)), + label = paste0("sans moustache '", param, "'")) + }) + + + test_html <- fileInput_dsfr_template( + inputId = "1245", + label = "étiquette", + message = "csv seulement" + ) + + #' @description tester si tous les params sont remplaces + expect_false(grepl(pattern = "\\{\\{", test_html)) + + + #' @description Verifie que les parametres ont bien ete remplace par leurs valeurs + + purrr::walk( + c( + inputId = "1245", + label = "étiquette", + message = "csv seulement" + ), + function(param) { + expect_true(any(grepl(pattern = param, test_html)), + label = paste0("remplacement de '", param, "'")) + }) + + ## lecture snapshot + snapshot_html <- readRDS( + file = file.path( + "snapshot", # pour passer les tests en production (apres le inflate), + # "tests/testthat/snapshot", # pour passer les tests en developpement (avant le inflate), + "fileInput_dsfr_template.Rda") + ) + + #' @description Verifie le HTML créé + # Retire tous les espaces et saut de ligne pour la comparaison + # Pour eviter les problèmes inter-OS + expect_equal(gsub("\\s|\\n", "", test_html), + gsub("\\s|\\n", "", snapshot_html)) + + # Si erreur au précedent test deux cas possible : + # + # - nouveau composant: Lancer le saveRDS, relancer le test et recommenter le saveRDS + # + # - composant a mettre a jour: si le test ne passe plus avant de changer le snapshot, + # assurez vous d'avoir bien pris en compte la nouvelle personnalisation + # dans la fonction fileInput_dsfr_template puis lancer le saveRDS, relancer le test et recommenter le saveRDS +# +# saveRDS(test_html, +# file = file.path("tests/testthat/snapshot", +# "fileInput_dsfr_template.Rda" +# ) +# ) + + +}) diff --git a/tests/testthat/test-tableoutput_dsfr.R b/tests/testthat/test-tableoutput_dsfr.R new file mode 100644 index 00000000..4676ea6b --- /dev/null +++ b/tests/testthat/test-tableoutput_dsfr.R @@ -0,0 +1,8 @@ +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_tableOutput.Rmd: do not edit by hand + +test_that("tableOutput_dsfr works", { + test_html <- tableOutput_dsfr("1") + #' @description tester si shiny.tag + expect_s3_class(test_html, "shiny.tag") +} +)