Nothing
column_users <- c(
"id", "display_name", "account_created", "description", "img", "contributor_terms", "roles", "changesets_count",
"traces_count", "blocks_received.count", "blocks_received.active", "blocks_issued.count", "blocks_issued.active"
)
class_columns <- list(
id = "character", display_name = "character", account_created = "POSIXct", description = "character",
img = "character", contributor_terms = "logical", roles = "character", changesets_count = "integer",
traces_count = "integer", blocks_received.count = "integer", blocks_received.active = "integer",
blocks_issued.count = "integer", blocks_issued.active = "integer"
)
## Details of a user: `GET /api/0.6/user/#id` ----
test_that("osm_details_user works", {
usr <- list()
xml_usr <- list()
with_mock_dir("mock_details_user", {
usr$usr <- osm_get_user_details(user_id = "11725140")
usr$mod <- osm_get_user_details(user_id = 61942)
xml_usr$usr <- osm_get_user_details(user_id = "11725140", format = "xml")
xml_usr$mod <- osm_get_user_details(user_id = 61942, format = "xml")
})
lapply(usr, expect_s3_class, "data.frame")
lapply(usr, function(x) expect_named(x, column_users))
lapply(usr, lapply, function(x) {
mapply(function(y, cl) expect_true(inherits(y, cl)), y = x, cl = class_columns[names(x)])
})
# Check that time is extracted, otherwise it's 00:00:00 in local time
lapply(usr, function(x) expect_false(unique(strftime(as.POSIXct(x$account_created), format = "%M:%S") == "00:00")))
lapply(xml_usr, expect_s3_class, "xml_document")
# Compare xml & R
mapply(function(d, x) {
expect_identical(nrow(d), xml2::xml_length(x))
}, d = usr, x = xml_usr)
## Empty results
with_mock_dir("mock_details_user_empty", {
empty_usr <- osm_get_user_details(user_id = 2)
xml_empty_usr <- osm_get_user_details(user_id = 2, format = "xml")
json_empty_usr <- osm_get_user_details(user_id = 2, format = "json")
})
expect_s3_class(empty_usr, "data.frame")
expect_named(empty_usr, column_users)
mapply(
function(x, cl) expect_true(inherits(x, cl)),
x = empty_usr,
cl = class_columns[names(empty_usr)]
)
expect_s3_class(xml_empty_usr, "xml_document")
expect_type(json_empty_usr, "list")
# Compare xml, json & R
expect_identical(nrow(empty_usr), 0L)
expect_identical(xml2::xml_length(xml_empty_usr), 0L)
expect_identical(length(json_empty_usr$users), 0L)
})
## Details of multiple users: `GET /api/0.6/users?users=#id1,#id2,...,#idn` ----
test_that("osm_details_users works", {
usrs <- list()
with_mock_dir("mock_details_users", {
usrs$usrs <- osm_get_user_details(user_id = c(1, 24, 44, 45, 46, 48, 49, 50))
usrs$mod <- osm_get_user_details(user_id = c(61942, 564990))
})
lapply(usrs, expect_s3_class, "data.frame")
lapply(usrs, function(x) expect_named(x, column_users))
lapply(usrs, lapply, function(x) {
mapply(function(y, cl) expect_true(inherits(y, cl)), y = x, cl = class_columns[names(x)])
})
# Check that time is extracted, otherwise it's 00:00:00 in local time
lapply(usrs, function(x) expect_false(unique(strftime(as.POSIXct(x$account_created), format = "%M:%S") == "00:00")))
## Empty results
with_mock_dir("mock_details_users_empty", {
empty_usrs <- osm_get_user_details(user_id = 2:3)
})
expect_s3_class(empty_usrs, "data.frame")
expect_named(empty_usrs, column_users)
expect_identical(nrow(empty_usrs), 0L)
mapply(
function(x, cl) expect_true(inherits(x, cl)),
x = empty_usrs,
cl = class_columns[names(empty_usrs)]
)
})
## Details of the logged-in user: `GET /api/0.6/user/details` ----
test_that("osm_details_logged_user works", {
with_mock_dir("mock_details_logged_user", {
usr_details <- osm_details_logged_user()
})
expect_type(usr_details, "list")
expect_named(
usr_details,
c(
"user", "description", "img", "contributor_terms", "roles",
"changesets", "traces", "blocks", "home", "languages", "messages"
)
)
})
## Preferences of the logged-in user: `GET|PUT|DELETE /api/0.6/user/preferences` ----
test_that("osm_set-get_preferences_user works", {
with_mock_dir("mock_get_prefs_user", {
### `GET /api/0.6/user/preferences` ----
preferences <- osm_get_preferences_user()
preferences_xml <- osm_get_preferences_user(format = "xml")
preferences_json <- osm_get_preferences_user(format = "json")
### `GET /api/0.6/user/preferences/[your_key]` (without the brackets) ----
preference <- osm_get_preferences_user(key = "mapcomplete-language")
# preference <- osm_get_preferences_user(key = "gps.trace.visibility") # TODO: error due to dots?
})
path_xml <- tempfile(fileext = ".xml")
with_mock_dir("mock_set_prefs_user", {
### `PUT /api/0.6/user/preferences/[your_key]` ----
expect_null(osm_set_preferences_user(key = "test-pref", value = "value"))
### `DELETE /api/0.6/user/preferences/[your_key]` ----
expect_null(osm_set_preferences_user(key = "test-pref", value = NULL))
### `PUT /api/0.6/user/preferences` ----
expect_null(osm_set_preferences_user(all_prefs = preferences))
expect_null(osm_set_preferences_user(all_prefs = preferences_xml))
expect_null(osm_set_preferences_user(all_prefs = preferences_json))
xml2::write_xml(preferences_xml, file = path_xml)
expect_null(osm_set_preferences_user(all_prefs = path_xml))
})
file.remove(path_xml)
expect_s3_class(preferences, "data.frame")
expect_named(preferences, c("key", "value"))
expect_s3_class(preferences_xml, "xml_document")
expect_type(preferences_json, "list")
expect_named(preferences_json, c("version", "generator", "copyright", "attribution", "license", "preferences"))
expect_type(preference, "character")
expect_error(
osm_set_preferences_user(key = "mapcomplete-language", value = preference, all_prefs = preferences_xml),
"`key` & `value`, or `all_prefs` must be provided but not all at the same time."
)
expect_error(osm_set_preferences_user(), "`key` is missing with no defaults.")
expect_error(osm_set_preferences_user(key = "mapcomplete-language"), "`value` is missing with no defaults.")
expect_error(osm_set_preferences_user(all_prefs = "x"), "`all_prefs` is interpreted as a path to an xml file with ")
expect_error(osm_set_preferences_user(all_prefs = TRUE), "`all_prefs` must be a path to a xml file with the ")
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.