tests/testthat/test-cr_members.R

context("testing cr_members")


test_that("cr_members returns", {
  vcr::use_cassette("cr_members", {

    a <- cr_members(member_ids=98)
    b <- cr_members(member_ids=98, works=TRUE)
    c <- cr_members(member_ids=c(10,98,45,1,9))
    d <- cr_members(member_ids=c(10,98,45,1,9), works=TRUE)
    e <- cr_members(query='ecology')

    # correct class
    expect_is(a, "list")
    expect_null(a$meta)
    expect_is(a$data, "data.frame")
    expect_is(a$data$primary_name, "character")

    expect_is(b, "list")
    expect_is(b$meta, "data.frame")
    expect_is(b$data, "data.frame")
    expect_is(b$data, "tbl_df")
    expect_is(b$data$url, "character")

    expect_is(c, "list")
    expect_is(d, "list")
    expect_is(e, "list")
    expect_equal(e$facets, NULL)

    # dimensions are correct
    expect_equal(length(a), 3)
    expect_equal(length(b), 3)
    expect_equal(length(e), 3)
    expect_equal(length(d$facets), 0)
  })
})

test_that("cr_members fails correctly", {
  vcr::use_cassette("cr_members_fails_well", {

    expect_error(cr_members(timeout_ms = 1))
    expect_equal(NROW(cr_members(query = "adfaaf")$data), 0)

    expect_warning(
      cr_members(
        member_ids=c(323234343434, 3434343434), works=TRUE, facet=TRUE),
      "Resource not found.")
    expect_warning(
      cr_members(
        member_ids=c(323234343434,3434343434,98), works=TRUE, facet=TRUE),
      "Resource not found.")

    # fails due to facet not supported
    expect_warning(cr_members(facet = TRUE),
                 "/members - This route does not support facet")
  })
})

test_that("cr_members accepts filter examples", {
  vcr::use_cassette("cr_members_filter_examples", {
    
    # Accepts named character vector value
    a <- cr_members(1988, 
                    works=TRUE, 
                    filter=c(from_index_date='2023-02-06'))
    
    # Accepts multiple named character vector values
    b <- cr_members(1988,
                    works=TRUE, 
                    filter=c(from_index_date='2023-02-06', 
                             until_index_date='2023-02-14'))
    
    # Accepts CrossRef documented named list value, backtick escaped
    c <- cr_members(1988, 
                    works=TRUE, 
                    filter=list(`from-index-date`='2023-02-06'))
    
    # Accepts multiple list values
    d <- cr_members(1988, 
                    works=TRUE, 
                    filter=list(`from-index-date`='2023-02-06', 
                                `until-index-date`='2023-02-14'))
    
    # Validate class
    expect_type(a, "list")
    expect_type(b, "list")
    expect_type(c, "list")
    expect_type(d, "list")
    
    expect_s3_class(a$meta, "data.frame")
    expect_s3_class(b$meta, "data.frame")
    expect_s3_class(c$meta, "data.frame")
    expect_s3_class(d$meta, "data.frame")
    
    expect_s3_class(a$data, "data.frame")
    expect_s3_class(b$data, "data.frame")
    expect_s3_class(c$data, "data.frame")
    expect_s3_class(d$data, "data.frame")
    
    expect_type(a$data$title, "character")
    expect_type(b$data$title, "character")
    expect_type(c$data$title, "character")
    expect_type(d$data$title, "character")
  })
})
ropensci/rcrossref documentation built on March 25, 2023, 6:42 p.m.