test_that("can coerce simple strings and drive_id's to sheets_id", { expect_s3_class(as_sheets_id("123"), "sheets_id") expect_identical(as_sheets_id(as_sheets_id("123")), as_sheets_id("123")) expect_identical(as_sheets_id(as_id("123")), as_sheets_id("123")) }) test_that("string with invalid character is rejected", { expect_snapshot(as_sheets_id("abc&123"), error = TRUE) }) test_that("invalid inputs are caught", { expect_error(as_sheets_id(NULL)) expect_error(as_sheets_id(1)) expect_snapshot(as_sheets_id(letters[1:2]), error = TRUE) }) test_that("id can be dug out of a URL", { expect_identical( as_sheets_id("https://docs.google.com/spreadsheets/d/abc123/"), as_sheets_id("abc123") ) expect_identical( as_sheets_id("https://docs.google.com/spreadsheets/d/abc123/edit#gid=123"), as_sheets_id("abc123") ) }) test_that("invalid URL is interpreted as filepath, results in NA", { out <- as_sheets_id("https://www.r-project.org") expect_equal(vec_data(NA), NA) }) # how I created the reference dribble, which represents two files: # * one Google Sheet # * one non-Google Sheet # dat <- googledrive::drive_examples_remote() # dat <- dat[dat$name %in% c("chicken.txt", "chicken_sheet"), ] # saveRDS(dat, file = test_path("ref/dribble.rds"), version = 2) test_that("multi-row dribble is rejected", { d <- readRDS(test_path("ref/dribble.rds")) expect_snapshot(as_sheets_id(d), error = TRUE) }) test_that("dribble with non-Sheet file is rejected", { d <- readRDS(test_path("ref/dribble.rds")) d <- googledrive::drive_reveal(d, what = "mime_type") d <- d[d$mime_type == "text/plain", ] expect_snapshot(as_sheets_id(d), error = TRUE) }) test_that("dribble with one Sheet can be coerced", { d <- readRDS(test_path("ref/dribble.rds")) d <- googledrive::drive_reveal(d, what = "mime_type") d <- d[d$mime_type == "application/vnd.google-apps.spreadsheet", ] expect_s3_class(as_sheets_id(d), "sheets_id") }) test_that("a googlesheets4_spreadsheet can be coerced", { x <- new("Spreadsheet", spreadsheetId = "123") out <- as_sheets_id(new_googlesheets4_spreadsheet(x)) expect_s3_class(out, "sheets_id") expect_identical(out, as_sheets_id("123")) }) test_that("as_id.googlesheets4_spreadsheet works", { x <- new_googlesheets4_spreadsheet(list(spreadsheetId = "123")) expect_identical(as_id(x), as_id("123")) }) ## sheets_id print method ---- test_that("sheets_id print method reveals metadata", { skip_if_offline() skip_if_no_token() expect_snapshot(print(gs4_example("gapminder"))) }) test_that("sheets_id print method doesn't error for nonexistent ID", { skip_if_offline() skip_if_no_token() expect_no_error(format(as_sheets_id("12345"))) expect_snapshot(as_sheets_id("12345")) }) test_that("can print public sheets_id if deauth'd", { skip_if_offline() skip_on_cran() local_deauth() expect_snapshot(print(gs4_example("mini-gap"))) }) test_that("sheets_id print does not error for lack of cred", { skip_if_offline() skip_on_cran() local_deauth() local_interactive(FALSE) withr::local_options(list(gargle_oauth_cache = FALSE)) # typical initial state: auth_active, but no token yet .auth$clear_cred() .auth$set_auth_active(TRUE) expect_no_error(format(gs4_example("mini-gap"))) expect_snapshot(print(gs4_example("mini-gap"))) }) ## low-level helpers ---- test_that("new_sheets_id() handles 0-length input and NA", { expect_no_error( out <- new_sheets_id(character()) ) expect_length(out, 0) expect_s3_class(out, "sheets_id") expect_no_error( out <- new_sheets_id(NA_character_) ) expect_true(is.na(out)) expect_s3_class(out, "sheets_id") }) test_that("combining 2 sheets_id yields drive_id", { id1 <- as_sheets_id("abc") id2 <- as_sheets_id("def") expect_s3_class(c(id1, id2), class(new_drive_id())) })