tests/testthat/test-sharepoint.R

test_that("ConnectorSharepoint creation fails with invalid parameters", {
  withr::local_options(list(connector.verbosity_level = "quiet"))

  expect_error(ConnectorSharepoint$new(site_url = 1))

  expect_error(ConnectorSharepoint$new(site_url = "not-a-url"))

  expect_error(ConnectorSharepoint$new(
    site_url = "https://valid-url.com",
    token = "invalid"
  ))

  expect_error(ConnectorSharepoint$new(
    site_url = "https://valid-url.com",
    folder = 1
  ))

  expect_error(ConnectorSharepoint$new(
    site_url = "https://valid-url.com",
    extra_class = 1
  ))
})

test_that("connector_sharepoint creation fails with invalid parameters", {
  expect_error(quiet_connect("https://www.google.com"))
  expect_error(quiet_connect("www.google.com"))

  skip_offline_test()

  expect_error(quiet_connect(setup_site_url, token = "a weird token"))

  expect_true(inherits(setup_connector, "ConnectorSharepoint"))
  extra_class_ <- quiet_connect(setup_site_url, extra_class = "test")
  expect_true(inherits(extra_class_, "test"))

  ## Check active bindings
  expect_error(setup_connector$folder <- "new_folder_name")
  expect_error(setup_connector$token <- "new_token_value")
  expect_error(setup_connector$site_url <- "new_site_url")
  expect_error(setup_connector$path <- "new_path_name")
})

skip_offline_test()

test_that("Testing ConnectorSharepoint methods", {
  my_drive <- suppressMessages(local_create_directory(
    site_url = setup_site_url
  ))

  contents <- my_drive$list_content_cnt() |>
    expect_no_condition()

  my_drive$write_cnt(tbl_iris, "iris.csv") |>
    expect_equal(my_drive)

  my_drive$read_cnt("iris.csv", show_col_types = FALSE) |>
    expect_equal(tbl_iris)

  my_drive$remove_cnt("iris.csv", confirm = FALSE) |>
    expect_no_condition()

  new_directory <- my_drive$create_directory_cnt("new_directory", open = FALSE)

  checkmate::expect_r6(new_directory, "ConnectorSharepoint")
  expect_equal(my_drive$folder, new_directory$folder)

  new_directory_open <- my_drive$create_directory_cnt(
    "new_directory_open",
    open = TRUE
  )
  expect_equal(
    new_directory_open$folder,
    paste(my_drive$folder, "new_directory_open", sep = "/")
  )

  my_drive$remove_directory_cnt(name = "new_directory_open", confirm = FALSE)

  my_drive$create_directory_cnt("new_directory") |>
    expect_error()

  contents <- my_drive$list_content_cnt()

  expect_true(length(contents) == 1)

  my_drive$remove_directory_cnt("new_directory", confirm = FALSE) |>
    expect_no_condition()
})

test_that("Testing ConnectorSharepoint methods with a specific folder", {
  my_drive <- suppressMessages(local_create_directory(
    site_url = setup_site_url
  ))

  #########################
  ### For a specific folder
  #########################

  dir_name <- test_directory_name()
  test_folder <- my_drive$create_directory_cnt(dir_name, open = TRUE)

  contents <- test_folder$list_content_cnt()

  expect_true(length(contents) == 0)

  test_folder$write_cnt(tbl_iris, "iris.csv") |>
    expect_equal(test_folder)

  test_folder$read_cnt("iris.csv", show_col_types = FALSE) |>
    expect_equal(tbl_iris)

  # Remove a file or directory
  my_drive$remove_cnt(dir_name, confirm = FALSE, by_item = TRUE) |>
    expect_no_condition()
})

test_that("Testing ConnectorSharepoint specific outputs for methods", {
  my_drive <- suppressMessages(local_create_directory(
    site_url = setup_site_url
  ))
  #########################
  ### Specific to methods
  #########################

  # Create a folder and file
  dir_name <- test_directory_name()
  subfolder <- my_drive$create_directory_cnt(dir_name)
  my_drive$write_cnt(iris, paste0(dir_name, "/iris.csv"))

  ## Check error for read_cnt fo a folder
  my_drive$read_cnt(dir_name, show_col_types = FALSE) |>
    expect_error()

  my_drive$read_cnt(paste0(dir_name, "/iris.csv"), show_col_types = FALSE) |>
    expect_no_error()

  ## Check error for write of non character
  my_drive$write_cnt("iris", paste0(dir_name, "/iris.csv")) |>
    expect_error()

  ### Upload and download

  ### file
  tmp_file <- tempfile(fileext = ".example")
  tmp_file_d <- tempfile(pattern = "downloaded", fileext = ".example")
  write.csv(iris, tmp_file, row.names = FALSE)

  my_drive$upload_cnt(
    src = tmp_file,
    dest = paste0(dir_name, "/iris.example")
  ) |>
    expect_no_error()

  my_drive$download_cnt(
    src = paste0(dir_name, "/iris.example"),
    dest = tmp_file_d
  ) |>
    expect_no_error()

  path_ <- my_drive$get_conn()$get_item(
    paste(my_drive$folder, dir_name, "iris.example", sep = "/")
  )$get_path()

  expect_equal(
    path_,
    paste0("/", paste(my_drive$folder, dir_name, "iris.example", sep = "/"))
  )

  #### Dirs
  tmp_dir <- tempfile(pattern = "test_dir")
  dir.create(tmp_dir)

  withr::with_dir(tmp_dir, {
    write.csv(iris, "iris.csv", row.names = FALSE)
  })

  my_drive$upload_directory_cnt(
    src = tmp_dir,
    dest = paste0(dir_name, "/dir")
  ) |>
    expect_no_error()

  ## Download directory
  dir_d <- tempfile("dir_d")
  dir.create(dir_d)
  my_drive$download_directory_cnt(
    src = paste0(dir_name, "/dir"),
    dest = dir_d
  ) |>
    expect_no_error()

  list.files(dir_d) |>
    expect_equal("iris.csv")

  #### Read a folder
  my_drive$read_cnt(dir_name) |>
    expect_error()

  ### Using vroom
  my_drive$read_cnt(
    paste0(dir_name, "/iris.example"),
    show_col_types = FALSE
  ) |>
    expect_no_error()

  ### Clean up
  my_drive$remove_cnt(dir_name, confirm = FALSE, by_item = TRUE)
})

test_that("test when path to a folder is not a folder", {
  my_drive <- suppressMessages(local_create_directory(
    site_url = setup_site_url
  ))

  ## create a file
  dir_name <- test_directory_name()
  my_drive$create_directory_cnt(dir_name)
  my_drive$write_cnt(iris, paste0(dir_name, "/iris.csv"))

  # Path is not a folder
  quiet_connect(
    setup_site_url,
    folder = paste0(dir_name, "/iris.csv")
  ) |>
    expect_error()

  # clean up
  my_drive$remove_cnt(dir_name, confirm = FALSE, by_item = TRUE)
})

test_that("test folder upload works", {
  my_drive <- suppressMessages(local_create_directory(
    site_url = setup_site_url
  ))
  dir_name <- test_directory_name()

  tmp_dir <- tempfile(pattern = "test_dir")
  dir.create(tmp_dir)

  withr::with_dir(tmp_dir, {
    write.csv(iris, "iris.csv", row.names = FALSE)
  })

  # Upload directory fails when needed
  my_drive$upload_directory_cnt(src = "bad_folder", dest = "dir") |>
    expect_error()
  my_drive$upload_directory_cnt(src = tmp_dir, dest = 2) |>
    expect_error()

  # Upload directory
  my_drive$upload_directory_cnt(
    src = tmp_dir,
    dest = paste0(dir_name, "/dir")
  ) |>
    expect_no_error()

  # Upload directory OPEN
  new_directory_OPEN <- my_drive$upload_directory_cnt(
    src = tmp_dir,
    dest = paste0(dir_name, "/dirOPEN"),
    open = TRUE
  ) |>
    expect_no_error()

  expect_true(
    new_directory_OPEN$folder ==
      paste(my_drive$folder, dir_name, "dirOPEN", sep = "/")
  )

  # Upload directory to a directory
  new_directory <- my_drive$create_directory_cnt(name = "test_dir", open = TRUE)
  new_directory$upload_directory_cnt(
    src = tmp_dir,
    dest = paste0(dir_name, "/dir")
  ) |>
    expect_no_error()

  ### Error not existing
  my_drive$upload_cnt(src = "not_exist", dest = paste0(dir_name, "/dir")) |>
    expect_error()

  dir_ <- my_drive$get_conn()$get_item(paste(
    my_drive$folder,
    dir_name,
    "/dir",
    sep = "/"
  ))

  expect_true(dir_$is_folder())
})

Try the connector.sharepoint package in your browser

Any scripts or data that you put into this service are public.

connector.sharepoint documentation built on June 1, 2026, 9:07 a.m.