empty_df <- function() { data.frame(stringsAsFactors = FALSE) } scalar_check_bindings <- function() { list( .scholidonline_check_scalar_chr = function(x) { invisible(TRUE) }, .package = "scholidonline" ) } arxiv_http_bindings <- function( resp = structure(list(), class = "fake_resp"), status = 200L, body_string = NULL, perform_null = FALSE ) { list( .scholidonline_request = function(url) { structure(list(url = url), class = "fake_req") }, .scholidonline_req_error = function(req, is_error) { req }, .scholidonline_req_perform_safe = function(req) { if (isTRUE(perform_null)) { return(NULL) } resp }, .scholidonline_resp_status = function(resp) { status }, .scholidonline_resp_body_string = function(resp, ...) { body_string }, .package = "scholidonline" ) } testthat::test_that( ".exists_arxiv_arxiv() returns TRUE when entry is present", { do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings( status = 200L, body_string = "x" ) ) testthat::expect_true( .exists_arxiv_arxiv("1234.5678", quiet = TRUE) ) } ) testthat::test_that( ".exists_arxiv_arxiv() returns FALSE when entry is absent", { do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings( status = 200L, body_string = "" ) ) testthat::expect_false( .exists_arxiv_arxiv("1234.5678", quiet = TRUE) ) } ) testthat::test_that( ".exists_arxiv_arxiv() returns NA on request failure", { do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings(perform_null = TRUE) ) testthat::expect_warning( out <- .exists_arxiv_arxiv("1234.5678", quiet = FALSE), "arXiv request failed\\." ) testthat::expect_identical(out, NA) } ) testthat::test_that( ".exists_arxiv_arxiv() returns NA on HTTP error", { do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings( status = 500L, body_string = "" ) ) testthat::expect_warning( out <- .exists_arxiv_arxiv("1234.5678", quiet = FALSE), "arXiv request returned HTTP 500\\." ) testthat::expect_identical(out, NA) } ) testthat::test_that( ".exists_arxiv_arxiv() returns NA on NULL body string", { do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings( status = 200L, body_string = NULL ) ) testthat::expect_identical( .exists_arxiv_arxiv("1234.5678", quiet = TRUE), NA ) } ) testthat::test_that( ".links_arxiv_arxiv() returns empty data.frame on request failure", { do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings(perform_null = TRUE) ) testthat::expect_warning( out <- .links_arxiv_arxiv("1234.5678", quiet = FALSE), "arXiv request failed\\." ) testthat::expect_identical(out, empty_df()) } ) testthat::test_that( ".links_arxiv_arxiv() returns empty data.frame on HTTP error", { do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings( status = 503L, body_string = "" ) ) testthat::expect_warning( out <- .links_arxiv_arxiv("1234.5678", quiet = FALSE), "arXiv request returned HTTP 503\\." ) testthat::expect_identical(out, empty_df()) } ) testthat::test_that( ".links_arxiv_arxiv() returns empty data.frame on NULL body string", { do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings( status = 200L, body_string = NULL ) ) testthat::expect_identical( .links_arxiv_arxiv("1234.5678", quiet = TRUE), empty_df() ) } ) testthat::test_that( ".links_arxiv_arxiv() returns empty data.frame when DOI is absent", { do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings( status = 200L, body_string = "x" ) ) testthat::expect_identical( .links_arxiv_arxiv("1234.5678", quiet = TRUE), empty_df() ) } ) testthat::test_that( ".links_arxiv_arxiv() returns DOI link when present", { xml <- paste0( "", "10.1000/test", "" ) do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings( status = 200L, body_string = xml ) ) out <- .links_arxiv_arxiv("1234.5678", quiet = TRUE) testthat::expect_s3_class(out, "data.frame") testthat::expect_identical(out$linked_type, "doi") testthat::expect_identical(out$linked_value, "10.1000/test") testthat::expect_identical(out$provider, "arxiv") } ) testthat::test_that( ".meta_arxiv_arxiv() returns empty data.frame on request failure", { do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings(perform_null = TRUE) ) testthat::expect_warning( out <- .meta_arxiv_arxiv("1234.5678", quiet = FALSE), "arXiv request failed\\." ) testthat::expect_identical(out, empty_df()) } ) testthat::test_that( ".meta_arxiv_arxiv() returns empty data.frame on HTTP error", { do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings( status = 500L, body_string = "" ) ) testthat::expect_warning( out <- .meta_arxiv_arxiv("1234.5678", quiet = FALSE), "arXiv request returned HTTP 500\\." ) testthat::expect_identical(out, empty_df()) } ) testthat::test_that( ".meta_arxiv_arxiv() returns empty data.frame when entry is absent", { do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings( status = 200L, body_string = "No entry" ) ) testthat::expect_identical( .meta_arxiv_arxiv("1234.5678", quiet = TRUE), empty_df() ) } ) testthat::test_that( ".meta_arxiv_arxiv() returns harmonized metadata", { xml <- paste0( "", "Paper title", "2021-05-06T00:00:00Z", "http://arxiv.org/abs/1234.5678", "" ) do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings( status = 200L, body_string = xml ) ) out <- .meta_arxiv_arxiv("1234.5678", quiet = TRUE) testthat::expect_s3_class(out, "data.frame") testthat::expect_identical(out$title, "Paper title") testthat::expect_identical(out$year, 2021L) testthat::expect_identical(out$container, "arXiv") testthat::expect_true(is.na(out$doi)) testthat::expect_true(is.na(out$pmid)) testthat::expect_true(is.na(out$pmcid)) testthat::expect_identical( out$url, "http://arxiv.org/abs/1234.5678" ) testthat::expect_identical(out$provider, "arxiv") } ) testthat::test_that( ".meta_arxiv_arxiv() returns NA year when year is not parseable", { xml <- paste0( "", "Paper title", "xxxx", "http://arxiv.org/abs/1234.5678", "" ) do.call( testthat::local_mocked_bindings, scalar_check_bindings() ) do.call( testthat::local_mocked_bindings, arxiv_http_bindings( status = 200L, body_string = xml ) ) out <- .meta_arxiv_arxiv("1234.5678", quiet = TRUE) testthat::expect_true(is.na(out$year)) testthat::expect_identical(out$title, "Paper title") testthat::expect_identical( out$url, "http://arxiv.org/abs/1234.5678" ) } )