test_that("merge_camtrapdp() returns a valid camtrapdp object", {
skip_if_offline()
x <- example_dataset()
x$name <- "x"
y <- x
y$name <- "y"
expect_no_error(check_camtrapdp(merge_camtrapdp(x, y)))
})
test_that("merge_camtrapdp() returns warning on non-identical samplingDesign", {
skip_if_offline()
x <- example_dataset()
x$name <- "x"
y <- x
y$name <- "y"
y$project$samplingDesign <- "opportunistic"
expect_warning(
merge_camtrapdp(x, y),
class = "camtrapdp_warning_different_sampligndesign"
)
})
test_that("merge_camtrapdp() returns error on missing/invalid/duplicate dataset
name(s)", {
skip_if_offline()
x <- example_dataset()
# Duplicate identifiers
expect_error(
merge_camtrapdp(x, x),
class = "camtrapdp_error_name_duplicated"
)
# Invalid identifier
y <- x
x$name <- NULL
expect_error(
merge_camtrapdp(x, y),
class = "camtrapdp_error_name_invalid"
)
x$name <- NA_character_
expect_error(
merge_camtrapdp(x, y),
class = "camtrapdp_error_name_invalid"
)
x$name <- 1
expect_error(
merge_camtrapdp(x, y),
class = "camtrapdp_error_name_invalid"
)
x$name <- "x"
y$name <- 1
expect_error(
merge_camtrapdp(x, y),
class = "camtrapdp_error_name_invalid"
)
y$name <- "y"
expect_no_error(merge_camtrapdp(x, y))
})
test_that("merge_camtrapdp() adds prefixes to additional resource names to keep
them unique", {
skip_if_offline()
# Merge datasets with overlapping resources: individuals and individuals, iris
x <- example_dataset()
x$name <- "x"
y <- x
y <- frictionless::add_resource(y, "iris", iris)
y$name <- "y"
xy <- merge_camtrapdp(x, y)
expect_identical(
frictionless::resources(xy),
c(
"deployments", "media", "observations", "x_individuals", "y_individuals",
"iris"
)
)
})
test_that("merge_camtrapdp() adds prefixes to identifiers in the data to keep
them unique", {
skip_if_offline()
# Merge datasets with overlapping deployments: a, b and b, c
x <- example_dataset() %>%
filter_deployments(deploymentID %in% c("00a2c20d", "29b7d356")) # a, b
x$name <- "x"
y <- example_dataset() %>%
filter_deployments(deploymentID %in% c("29b7d356", "577b543a")) # b, c
y$name <- "y"
xy <- merge_camtrapdp(x, y)
# No duplicate primary keys
deployment_ids <- purrr::pluck(deployments(xy), "deploymentID")
media_ids <- purrr::pluck(media(xy), "mediaID")
observation_ids <- purrr::pluck(observations(xy), "observationID")
expect_false(any(duplicated(deployment_ids)))
expect_false(any(duplicated(media_ids)))
expect_false(any(duplicated(observation_ids)))
# deploymentID
merged_deployment_ids <- c("00a2c20d", "x_29b7d356", "y_29b7d356", "577b543a")
expect_in(merged_deployment_ids, deployments(xy)$deploymentID)
expect_in(merged_deployment_ids, media(xy)$deploymentID)
expect_in(merged_deployment_ids, observations(xy)$deploymentID)
# eventID
merged_event_ids <- c("4bb69c45", "x_8f5ffbf2", "y_8f5ffbf2", "5fbf69a4")
expect_in(merged_event_ids, media(xy)$eventID)
expect_in(merged_event_ids, observations(xy)$eventID)
# mediaID
merged_media_ids <- c("07840dcc", "x_3e65dfaa", "y_3e65dfaa", "44201e9e")
expect_in(merged_media_ids, media(xy)$mediaID)
expect_in(merged_media_ids, observations(xy)$mediaID)
# observationID
merged_observation_ids <- c("705e6036", "x_ef2f7140", "y_ef2f7140", "d350d2bc")
expect_in(merged_observation_ids, observations(xy)$observationID)
})
test_that("merge_camtrapdp() returns the expected datapackage.json when merging
identical datasets", {
skip_if_offline()
temp_dir <- tempdir()
on.exit(unlink(temp_dir, recursive = TRUE))
# Merge datasets that are identical except for name
x <- example_dataset()
x$name <- "x"
y <- x
y$name <- "y"
xy <- merge_camtrapdp(x, y)
xy$created <- NULL
# Write to file
write_camtrapdp(xy, temp_dir)
file.rename(
file.path(temp_dir, "datapackage.json"),
file.path(temp_dir, "datapackage_identical_xy.json")
)
expect_snapshot_file(file.path(temp_dir, "datapackage_identical_xy.json"))
expect_no_error(
read_camtrapdp(file.path(temp_dir, "datapackage_identical_xy.json"))
)
})
test_that("merge_camtrapdp() returns the expected datapackage.json when merging
different datasets", {
skip_if_offline()
temp_dir <- tempdir()
on.exit(unlink(temp_dir, recursive = TRUE))
# Merge datasets that are different: example_dataset + awd_pilot2
x <- example_dataset()
x$name <- "x"
y_url <- "https://ipt.nlbif.nl/archive.do?r=awd_pilot2"
zip_file <- file.path(temp_dir, "dataset.zip")
datapackage_file <- file.path(temp_dir, "datapackage.json")
download.file(y_url, zip_file, mode = "wb", quiet = TRUE)
unzip(zip_file, exdir = temp_dir)
y <- read_camtrapdp(datapackage_file)
y$project$samplingDesign <- "targeted" # To avoid warning
xy <- merge_camtrapdp(x, y)
xy$created <- NULL
# Write to file
temp_dir_merged <- file.path(temp_dir, "merged")
write_camtrapdp(xy, temp_dir_merged)
file.rename(
file.path(temp_dir_merged, "datapackage.json"),
file.path(temp_dir_merged, "datapackage_different_xy.json")
)
expect_snapshot_file(
file.path(temp_dir_merged, "datapackage_different_xy.json")
)
expect_no_error(
read_camtrapdp(file.path(temp_dir_merged, "datapackage_different_xy.json"))
)
})
test_that("merge_camtrapdp() adds the DOI of the original datasets as related
identifiers", {
skip_if_offline()
# Merge datasets that are identical except for name and DOI
x <- example_dataset()
x$name <- "x"
x$id <- "https://doi.org/x"
y <- x
y$name <- "y"
y$id <- "http://doi.org/y"
xy <- merge_camtrapdp(x, y)
expect_identical(
xy$relatedIdentifiers[[3]], # 1 and 2 were present in x and y (identical)
list(
relationType = "isDerivedFrom",
relatedIdentifier = "https://doi.org/x",
resourceTypeGeneral = "Dataset",
relatedIdentifierType = "DOI"
)
)
expect_identical(
xy$relatedIdentifiers[[4]],
list(
relationType = "isDerivedFrom",
relatedIdentifier = "http://doi.org/y",
resourceTypeGeneral = "Dataset",
relatedIdentifierType = "DOI"
)
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.