test_that("get_runtimes() gets all runtimes if none specified", {
client <- MockConnect$new("2024.10.0")
client$mock_response(
"GET", "v1/server_settings/r",
content = list(
installations = list(
list(version = "4.3.1", cluster_name = "Local", image_name = "Local"),
list(version = "4.4.0", cluster_name = "Local", image_name = "Local")
)
)
)
client$mock_response(
"GET", "v1/server_settings/python",
content = list(
installations = list(
list(version = "3.11.3", cluster_name = "Local", image_name = "Local"),
list(version = "3.12.4", cluster_name = "Local", image_name = "Local")
)
)
)
client$mock_response(
"GET", "v1/server_settings/quarto",
content = list(
installations = list(
list(version = "1.4.557", cluster_name = "Local", image_name = "Local"),
list(version = "1.5.55", cluster_name = "Local", image_name = "Local")
)
)
)
client$mock_response(
"GET", "v1/server_settings/tensorflow",
content = list(
installations = list(
list(version = "2.16.1", cluster_name = "Local", image_name = "Local")
)
)
)
expected <- tibble::as_tibble(list(
runtime = c(
"r", "r", "python", "python", "quarto",
"quarto", "tensorflow"
), version = c(
"4.3.1", "4.4.0", "3.11.3",
"3.12.4", "1.4.557", "1.5.55", "2.16.1"
), cluster_name = c(
"Local",
"Local", "Local", "Local", "Local", "Local", "Local"
), image_name = c(
"Local",
"Local", "Local", "Local", "Local", "Local", "Local"
)
))
expect_identical(get_runtimes(client), expected)
expect_identical(client$call_log, c(
"GET https://connect.example/__api__/v1/server_settings/r",
"GET https://connect.example/__api__/v1/server_settings/python",
"GET https://connect.example/__api__/v1/server_settings/quarto",
"GET https://connect.example/__api__/v1/server_settings/tensorflow"
))
})
test_that("get_runtimes() only specified runtimes", {
client <- MockConnect$new("2024.10.0")
client$mock_response(
"GET", "v1/server_settings/python",
content = list(
installations = list(
list(version = "3.11.3", cluster_name = "Local", image_name = "Local"),
list(version = "3.12.4", cluster_name = "Local", image_name = "Local")
)
)
)
client$mock_response(
"GET", "v1/server_settings/tensorflow",
content = list(
installations = list(
list(version = "2.16.1", cluster_name = "Local", image_name = "Local")
)
)
)
expected <- tibble::as_tibble(list(
runtime = c("python", "python", "tensorflow"),
version = c("3.11.3", "3.12.4", "2.16.1"),
cluster_name = c("Local", "Local", "Local"),
image_name = c("Local", "Local", "Local")
))
expect_identical(get_runtimes(client, c("python", "tensorflow")), expected)
expect_identical(client$call_log, c(
"GET https://connect.example/__api__/v1/server_settings/python",
"GET https://connect.example/__api__/v1/server_settings/tensorflow"
))
})
test_that("get_runtimes() restricts available runtimes based on Connect version.", {
client <- MockConnect$new("2024.10.0")
expect_error(
get_runtimes(client, c("r", "python", "foofy")),
'`runtimes` must be one of "r", "python", "quarto", "tensorflow"; received: "r", "python", "foofy".'
)
client <- MockConnect$new("2024.02.0")
expect_error(
get_runtimes(client, "tensorflow"),
'`runtimes` must be one of "r", "python", "quarto"; received: "tensorflow".'
)
client <- MockConnect$new("1.8.3")
expect_error(
get_runtimes(client, c("r", "quarto")),
'`runtimes` must be one of "r", "python"; received: "r", "quarto".'
)
})
with_mock_api({
client <- connect(server = "https://connect.example", api_key = "fake")
test_that("get_groups() paginates with no prefix", {
# To get this result, the code has to paginate through two API requests.
# groups-4eaf46.json
# groups-125d47.json
result <- get_groups(client, page_size = 5, limit = 10)
expected_names <- c(
"~!@#$%^&*()_+", "1111", "2_viewer_group", "amanda_test_group",
"a_new_group", "azurepipelines", "cgGroup01", "chris_test_group",
"connect_dev", "cool_kids_of_the_dmv"
)
expect_identical(result$name, expected_names)
})
test_that("get_groups() does not paginate when called with a prefix", {
# Only one response exists for this query; by succeeding this test verifies
# that the pagination behavior is not engaged.
# groups-deae1f.json
result <- get_groups(client, page_size = 2, prefix = "c")
expect_identical(result$name, c("connect_dev", "cool_kids_of_the_dmv"))
})
})
without_internet({
client <- Connect$new(server = "https://connect.example", api_key = "fake")
test_that("get_users() works with user_role and account_status", {
# No filter parameters specified
expect_GET(
get_users(client),
"https://connect.example/__api__/v1/users?page_number=1&page_size=500"
)
# Filter just on one parameter
expect_GET(
get_users(client, user_role = "administrator"),
"https://connect.example/__api__/v1/users?page_number=1&page_size=500&user_role=administrator"
)
# Filter on two parameters, one requiring concatenation
expect_GET(
get_users(
client,
user_role = c("administrator", "publisher"),
account_status = "licensed"
),
paste0(
"https://connect.example/__api__/v1/users?page_number=1&page_size=500&",
"user_role=administrator%7Cpublisher&account_status=licensed"
)
)
})
})
test_that("get_vanity_urls() works", {
with_mock_api({
client <- Connect$new(server = "http://connect.example", api_key = "not-a-key")
expect_equal(
get_vanity_urls(client),
tibble::tibble(
content_guid = c(
"39c8d85a-37ae-4b8b-8655-30a06adff2f1",
"93a3cd6d-5a1b-236c-9808-6045f2a73fb5"
),
path = c(
"/team-dashboard/",
"/streamlit/my-app/"
),
created_time = structure(c(
1602623489,
1677679943
), tzone = "UTC", class = c("POSIXct", "POSIXt"))
)
)
})
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.