test_that("USGS metadata discovery avoids large spatial inventories", {
prefixes <- character()
root <- "StagedProducts/Elevation/metadata/test/"
local_mocked_bindings(usgs_metadata_listing = function(prefix, delimiter = "/") {
prefixes <<- c(prefixes, prefix)
if (prefix == root) return(list(keys=character(), folders=paste0(root,c("reports/","spatial_metadata/"))))
if (prefix == paste0(root,"reports/")) return(list(keys=character(),folders=paste0(prefix,c("vendor_provided_xml/","Additional Reports/"))))
list(keys=paste0(prefix,c("ClassifiedPointCloud.xml","DEM.xml")),folders=character())
}, .package="ALSdownloadeR")
result <- usgs_project_xml("https://rockyweb.usgs.gov/Projects/test/LAZ/t.laz")
expect_match(result,"ClassifiedPointCloud.xml",fixed=TRUE)
expect_length(result,1L)
expect_false(any(grepl("spatial_metadata|Additional Reports",prefixes)))
})
usgs_test_xml <- function(title, year=2021L) paste0('',title,
'ground condition',
year,'0307',year,'0413')
test_that("documented acquisition overrides project names and cached dates survive budget", {
xml_calls <- 0L
local_mocked_bindings(usgs_project_xml=function(...) "https://example.org/cloud.xml",
als_metadata_text=function(...) {xml_calls <<- xml_calls+1L;usgs_test_xml("OH 2020; Classified Point Cloud")},
.package="ALSdownloadeR")
cache<-new.env(parent=emptyenv())
asset<-"https://rockyweb.usgs.gov/Projects/OH_2020/LAZ/t.laz"
x<-usgs_asset_period(asset,NA_character_,cache,Sys.time()+10)
expect_equal(x$year,2021L);expect_equal(x$end,"2021-04-13")
y<-usgs_asset_period(sub("t.laz","u.laz",asset,fixed=TRUE),NA_character_,cache,Sys.time()-1)
expect_equal(y$year,2021L);expect_equal(xml_calls,1L)
})
test_that("legacy metadata cannot assign one tile's dates to its neighbours", {
xml<-usgs_test_xml("S1305405.LAS",2007)
expect_equal(usgs_document_period(xml,"https://example.org/S1305405.laz")$year,2007L)
expect_null(usgs_document_period(xml,"https://example.org/S1305406.laz"))
expect_null(usgs_document_period(usgs_test_xml("DEM"),"https://example.org/t.laz"))
local_mocked_bindings(usgs_project_xml=function(...) NA_character_,
als_metadata_text=function(...) stop("HTML landing page must not be fetched"),.package="ALSdownloadeR")
expect_null(usgs_asset_period("https://example.org/t.laz","https://example.org/index.html?prefix=metadata/",
new.env(parent=emptyenv()),Sys.time()+10))
})
test_that("conflicting acquisition years remain unresolved", {
local_mocked_bindings(usgs_project_xml=function(...) c("https://example.org/2020.xml","https://example.org/2021.xml"),
als_metadata_text=function(url) usgs_test_xml("Classified Point Cloud",if(grepl("2020",url))2020L else 2021L),
.package="ALSdownloadeR")
x<-usgs_asset_period("https://example.org/t.laz",NA_character_,new.env(parent=emptyenv()),Sys.time()+10)
expect_true(x$conflict)
})
test_that("an exhausted lookup budget is not reported as absent metadata", {
local_mocked_bindings(usgs_project_xml=function(...) stop("must not query"),.package="ALSdownloadeR")
x<-usgs_asset_period("https://example.org/t.laz",NA_character_,new.env(parent=emptyenv()),Sys.time()-1)
expect_s3_class(x,"metadata_budget")
})
test_that("valid matching XML remains usable when an alternative is malformed", {
local_mocked_bindings(usgs_project_xml=function(...) c("https://example.org/broken.xml","https://example.org/valid.xml"),
als_metadata_text=function(url) if(grepl("broken",url)) "" else usgs_test_xml("Classified Point Cloud",2019L),
.package="ALSdownloadeR")
x<-usgs_asset_period("https://example.org/t.laz",NA_character_,new.env(parent=emptyenv()),Sys.time()+10)
expect_equal(x$year,2019L)
expect_equal(x$source,"https://example.org/valid.xml")
})