From c19658df6285d909859c64ff275f1ca42d96e5ed Mon Sep 17 00:00:00 2001
From: MORIN Edouard <edouard.morin@developpement-durable.gouv.fr>
Date: Thu, 27 Feb 2025 11:57:26 +0100
Subject: [PATCH] feat : mise en place test-9 sur set_schema_rights (fonction
 non operationnelle)

---
 R/set_shema_rights.R                      | 32 ++++++++++++-----------
 tests/testthat/test-9-set_schema_rights.R | 26 ++++++++++++++++++
 2 files changed, 43 insertions(+), 15 deletions(-)
 create mode 100644 tests/testthat/test-9-set_schema_rights.R

diff --git a/R/set_shema_rights.R b/R/set_shema_rights.R
index fbb6abf..6914823 100644
--- a/R/set_shema_rights.R
+++ b/R/set_shema_rights.R
@@ -51,22 +51,24 @@ set_schema_rights <- function(schema = "public", table = NULL, con = NULL, db  =
 
   tables_concernees <- ifelse(is.null(table), "ALL TABLES", table)
 
-  droit2 <- dplyr::transmute(droits, liste_priv = gsub("\\{|\\}", "", .data$liste_priv) %>% strsplit(split = ",") %>% list) %>%
-    dplyr::summarise(liste_priv = list(unlist(.data$liste_priv)) ) %>%
-    dplyr::pull(.data$liste_priv) %>% unlist() %>% tibble::enframe(name = NULL) %>%
-    tidyr::separate(col = .data$value, sep = "([=/])", into = c("role", "droits", "granter"), remove = TRUE) %>%
-    dplyr::select(-.data$granter) %>%
-    dplyr::distinct() %>%
-    mutate(privilege = dplyr::case_when(
-      .data$droits == "arwdDxt" ~ "ALL",
-      .data$droits == "r" ~ "SELECT",
-      TRUE ~ purrr::map2_chr(.x = ref_privilege$abrv, .y = ref_privilege$verbe, .f = ~ ifelse(grepl(pattern = .x, .data$droits), .y, NA_character_)) %>%
-        setdiff(., NA_character_) %>%
-        paste(collapse = ", ")
-    ),
-      sql = paste0("GRANT ", .data$privilege," ON ", tables_concernees ," IN SCHEMA ", schema ," TO ", .data$role, ";")
-    )
+  ## non fonctionnel pour le moment
+  # droit2 <- dplyr::transmute(droits, liste_priv = gsub("\\{|\\}", "", .data$liste_priv) %>% strsplit(split = ",") %>% list) %>%
+  #   dplyr::summarise(liste_priv = list(unlist(.data$liste_priv)) ) %>%
+  #   dplyr::pull(.data$liste_priv) %>% unlist() %>% tibble::enframe(name = NULL) %>%
+  #   tidyr::separate(col = .data$value, sep = "([=/])", into = c("role", "droits", "granter"), remove = TRUE) %>%
+  #   dplyr::select(-.data$granter) %>%
+  #   dplyr::distinct() %>%
+  #   mutate(privilege = dplyr::case_when(
+  #     .data$droits == "arwdDxt" ~ "ALL",
+  #     .data$droits == "r" ~ "SELECT",
+  #     TRUE ~ purrr::map2_chr(.x = ref_privilege$abrv, .y = ref_privilege$verbe, .f = ~ ifelse(grepl(pattern = .x, .data$droits), .y, NA_character_)) %>%
+  #       setdiff(., NA_character_) %>%
+  #       paste(collapse = ", ")
+  #   ),
+  #     sql = paste0("GRANT ", .data$privilege," ON ", tables_concernees ," IN SCHEMA ", schema ," TO ", .data$role, ";")
+  #   )
 
+  return(invisible(NULL))
 
 }
 
diff --git a/tests/testthat/test-9-set_schema_rights.R b/tests/testthat/test-9-set_schema_rights.R
new file mode 100644
index 0000000..e56f776
--- /dev/null
+++ b/tests/testthat/test-9-set_schema_rights.R
@@ -0,0 +1,26 @@
+test_that("set_schema_rights works", {
+  if(DBI::dbCanConnect(RPostgres::Postgres(), host="localhost", user="runner", password=Sys.getenv("BDD_RUNNER_PWD"), dbname="postgres")){
+    Sys.setenv(port="5432")
+    Sys.setenv(server="localhost")
+    Sys.setenv(user_test="runner")
+    Sys.setenv(pwd_test=Sys.getenv("BDD_RUNNER_PWD"))
+
+    con<<-connect_to_db(db = 'test_datalibaba', user = 'test')
+
+    expect_error(set_schema_rights(schema = "public", table = "test_iris", db  = NULL, user = NULL, server = Sys.getenv("server")),
+                 "con, db et user ne sont pas renseign\u00e9s, merci de fournir les arguments necessaires a la connexion ")
+    expect_error(set_schema_rights(schema = "public", table = "test_iris", db  = NULL, user = "test", server = Sys.getenv("server")),
+                 "con et db ne sont pas renseign\u00e9s, merci de fournir les arguments necessaires a la connexion ")
+    expect_error(set_schema_rights(schema = "public", table = "test_iris", db  = "test_datalibaba", user = NULL, server = Sys.getenv("server")),
+                 "con et user ne sont pas renseign\u00e9s, merci de fournir les arguments necessaires a la connexion ")
+    expect_error(set_schema_rights(schema = NULL, table = "test_iris", con = con, db  = "test_datalibaba", user = "test", server = Sys.getenv("server")),
+                 "schema n'est pas renseign\u00e9. ")
+
+    expect_null(set_schema_rights(schema = "public", table = "test_iris", db  = "test_datalibaba", user = "test", server = Sys.getenv("server")))
+
+  }else{
+    print(DBI::dbCanConnect(RPostgres::Postgres(), host="localhost", user="runner", password=Sys.getenv("BDD_RUNNER_PWD"), dbname="postgres"))
+    print('warning: connect_to_db - local database postgresql doesnt work !')
+    expect_equal(1,1)
+  }
+})
-- 
GitLab