tests/testthat/test-npn-observations.R

# vcr doesn't work with httr2 downloads yet, so many of these tests are not
# mocked and are skipped
# https://github.com/ropensci/vcr/issues/270

skip_long_tests <- as.logical(Sys.getenv("RNPN_SKIP_LONG_TESTS", unset = "true"))

test_that("no request source blocked", {
  skip_on_cran()

  expect_error(npn_download_status_data(request_source = NULL, years = 2013))
  expect_error(npn_download_individual_phenometrics(request_source = NULL, years = 2013))
  expect_error(npn_download_site_phenometrics(request_source = NULL, years = 2013))
  expect_error(npn_download_magnitude_phenometrics(request_source = NULL, years = 2013))
})

test_that("npn_download_status_data() works", {
  vcr::use_cassette("npn_download_status_data_basic_1", {
    some_data <- npn_download_status_data(
      request_source = "Unit Test",
      years = 2013,
      species_ids = c(6)
    )
  })
  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 1000)
  expect_type(some_data$species_id, "integer")

  skip_on_cran()
  skip_if_not(check_service(), "Service is down")

  ## Would be ideal to capture this with vcr, but doesn't work with httr2 downloads yet: https://github.com/ropensci/vcr/issues/270
  some_data_file  <- npn_download_status_data(
    request_source = "Unit Test",
    years = 2013,
    species_ids = c(6),
    download_path = withr::local_tempfile(fileext = ".csv")
  )

  expect_equal(some_data[1, ]$species_id, 6)
  expect_true(file.exists(some_data_file))
  expect_equal(
    read.csv(some_data_file) %>%
      tibble::as_tibble() %>%
      dplyr::mutate(update_datetime = as.POSIXct(update_datetime, tz = "UTC"),
                    abundance_value = as.character(abundance_value)),
    some_data
  )
})

test_that("phenometrics downloads work", {
  vcr::use_cassette("npn_download_individual_phenometrics_basic_1", {
    some_data <- npn_download_individual_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      species_ids = c(6)
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 10)
  expect_type(some_data$species_id, "integer")
  expect_equal(some_data[1, ]$species_id, 6)

  vcr::use_cassette("npn_download_site_phenometrics_basic_1", {
    some_data <- npn_download_site_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      species_ids = c(6)
    )
  })

  num_site_default <- nrow(some_data)
  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 10)
  expect_type(some_data$species_id, "integer")
  expect_equal(some_data[1, ]$species_id, 6)

  vcr::use_cassette("npn_download_site_phenometrics_basic_2", {
    some_data <- npn_download_site_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      species_ids = c(6),
      num_days_quality_filter = "5"
    )
  })

  num_site_custom <- nrow(some_data)
  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 1)
  expect_type(some_data$species_id, "integer")
  expect_equal(some_data[1, ]$species_id, 6)
  expect_gt(num_site_default, num_site_custom)

  vcr::use_cassette("npn_download_magnitude_phenometrics_basic_1", {
    some_data <- npn_download_magnitude_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      species_ids = c(6)
    )
  })

  num_mag_default <- nrow(some_data)
  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 10)
  expect_type(some_data$species_id, "integer")
  expect_equal(some_data[1, ]$species_id, 6)

  vcr::use_cassette("npn_download_magnitude_phenometrics_basic_2", {
    some_data <- npn_download_magnitude_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      species_ids = c(6),
      period_frequency = "14"
    )
  })

  num_mag_custom <- nrow(some_data)
  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 25)
  expect_type(some_data$species_id, "integer")
  expect_equal(some_data[1, ]$species_id, 6)

  expect_gt(num_mag_custom, num_mag_default)

})

test_that("custom period works", {
  expect_error(
    npn_download_individual_phenometrics(
      request_source = "unit test",
      years = 2016,
      period_start = "20-20",
      species_id = 201
    ),
    "Please provide `period_start` as 'MM-DD'."
  )

  vcr::use_cassette("custom_period", {
    indiv_standard <-
      npn_download_individual_phenometrics(
        request_source = "unit test",
        years = 2016,
        species_id = 201
      )
    indiv_wateryr <-
      npn_download_individual_phenometrics(
        request_source = "unit test",
        years = 2016,
        period_start = "10-01",
        period_end = "09-30",
        species_id = 201
      )
    site_standard <-
      npn_download_site_phenometrics(
        request_source = "unit test",
        years = 2010,
        species_id = 210
      )
    site_wateryr <-
      npn_download_site_phenometrics(
        request_source = "unit test",
        years = 2010,
        period_start = "10-01",
        period_end = "09-30",
        species_id = 210
      )
  })

  #just crude checks that they aren't identical
  expect_false(
    all(indiv_standard$last_yes_month[1:20] ==
          indiv_wateryr$last_yes_month[1:20])
  )
  expect_false(
    all(site_standard$mean_last_yes_doy[1:20] ==
          site_wateryr$mean_last_yes_doy[1:20])
  )
})


# these can't be mocked currently due to limitations of vcr
test_that("file download works", {
  skip_on_cran()
  skip_if(skip_long_tests, "Skipping long tests")
  skip_if_not(check_service(), "Service is down")

  test_download_path <- withr::local_tempfile(fileext = ".csv")

  # vcr::use_cassette("downloads", {
    status_dl_file <- npn_download_status_data(
      request_source = "Unit Test",
      years = 2013,
      species_ids = c(6),
      download_path = test_download_path
    )
  # })

  expect_true(file.exists(status_dl_file))
  some_data <- read.csv(status_dl_file)

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 1000)
  expect_type(some_data$species_id, "integer")
  expect_equal(some_data[1, ]$species_id, 6)


  some_data <- npn_download_magnitude_phenometrics(
    request_source = "Unit Test",
    years = 2013,
    species_ids = c(6),
    download_path = test_download_path
  )
  expect_equal(file.exists(test_download_path), TRUE)
  some_data <- read.csv(test_download_path)

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 10)
  expect_type(some_data$species_id, "integer")
  expect_equal(some_data[1, ]$species_id, 6)

})

test_that("climate data flag works", {
  skip_on_cran()
  skip_if(skip_long_tests, "Skipping long tests")
  skip_if_not(check_service(), "Service is down")

  vcr::use_cassette("npn_download_status_data_climate_flag_1", {
    some_data <- npn_download_status_data(
      request_source = "Unit Test",
      years = 2013,
      species_ids = c(6),
      climate_data = TRUE
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_type(some_data$tmin_winter, "double")

  vcr::use_cassette("npn_download_individual_phenometrics_climate_flag_1", {
    some_data <- npn_download_individual_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      species_ids = c(6),
      climate_data = TRUE
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_type(some_data$tmin_winter, "double")

  vcr::use_cassette("npn_download_magnitude_phenometrics_climate_flag_1", {
    some_data <- npn_download_magnitude_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      species_ids = c(6),
      climate_data = TRUE
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_null(some_data$tmin_winter)

})


test_that("higher taxonomic ordering works for status data", {
  skip_on_cran()
  skip_if(skip_long_tests, "Skipping long tests")
  skip_if_not(check_service(), "Service is down")

  #Check the different taxonomic levels for
  #status data

  #Family_ID
  vcr::use_cassette("npn_download_status_data_tax_1", {
    some_data <- npn_download_status_data(
      request_source = "Unit Test",
      years = 2013,
      family_ids = c(322),
      additional_fields = c("Family_ID")
    )
  })
  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 1000)
  expect_type(some_data$family_id, "integer")
  expect_equal(some_data[1, ]$family_id, 322)

  less_data <- subset(some_data, species_id == 6)
  expect_lt(nrow(less_data), nrow(some_data))
  expect_gt(nrow(less_data), 0)

  #Order_ID
  vcr::use_cassette("npn_download_status_data_tax_2", {
    some_data <- npn_download_status_data(
      request_source = "Unit Test",
      years = 2013,
      order_ids = c(95), #TODO pick a smaller order!
      additional_fields = c("Order_ID")
    )
  })
  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 1000)
  expect_type(some_data$order_id, "integer")
  expect_equal(some_data[1, ]$order_id, 95)

  less_data <- subset(some_data,species_id == 6)
  expect_lt(nrow(less_data), nrow(some_data))
  expect_gt(nrow(less_data), 0)

  #class_ID
  vcr::use_cassette("npn_download_status_data_tax_3", {
    some_data <- npn_download_status_data(
      request_source = "Unit Test",
      years = 2013,
      class_ids = c(15), #TODO pick a smaller class or year with less data!
      additional_fields = c("Class_ID")
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 1000)
  expect_type(some_data$class_id, "integer")
  expect_equal(some_data[1, ]$class_id, 15)

  less_data <- subset(some_data,species_id == 6)
  expect_lt(nrow(less_data), nrow(some_data))
  expect_gt(nrow(less_data), 0)
})


test_that("higher taxonomic ordering works for individual phenometrics", {
  skip_on_cran()
  skip_if(skip_long_tests, "Skipping long tests")
  skip_if_not(check_service(), "Service is down")

  #Check the different taxonomic levels for
  #status data

  #Family_ID
  vcr::use_cassette("npn_download_individual_phenometrics_tax_1", {
    some_data <- npn_download_individual_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      family_ids = c(322),
      additional_fields = c("Family_ID")
    )
  })
  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 100)
  expect_type(some_data$family_id, "integer")
  expect_equal(some_data[1, ]$family_id, 322)

  less_data <- subset(some_data,species_id == 6)
  expect_lt(nrow(less_data), nrow(some_data))
  expect_gt(nrow(less_data), 0)

  #Order_ID
  vcr::use_cassette("npn_download_individual_phenometrics_tax_2", {
    some_data <- npn_download_individual_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      order_ids = c(95),
      additional_fields = c("Order_ID")
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 100)
  expect_type(some_data$order_id, "integer")
  expect_equal(some_data[1, ]$order_id, 95)

  less_data <- subset(some_data,species_id == 6)
  expect_lt(nrow(less_data), nrow(some_data))
  expect_gt(nrow(less_data), 0)


  # #class_ID
  vcr::use_cassette("npn_download_individual_phenometrics_tax_3", {
    some_data <- npn_download_individual_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      class_ids = c(15),
      additional_fields = c("Class_ID")
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 1000)
  expect_type(some_data$class_id, "integer")
  expect_equal(some_data[1, ]$class_id, 15)

  less_data <- subset(some_data,species_id == 6)
  expect_lt(nrow(less_data), nrow(some_data))
  expect_gt(nrow(less_data), 0)

})


test_that("higher taxonomic ordering works for site phenometrics", {
  skip_on_cran()
  skip_if(skip_long_tests, "Skipping long tests")
  skip_if_not(check_service(), "Service is down")

  #Check the different taxonomic levels for
  #status data

  #Family_ID
  vcr::use_cassette("npn_download_site_phenometrics_tax_1", {
    some_data <- npn_download_site_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      family_ids = c(322),
      additional_fields = c("Family_ID")
    )
  })
  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 10)
  expect_type(some_data$family_id, "integer")
  expect_equal(some_data[1, ]$family_id, 322)

  less_data <- subset(some_data,species_id == 6)
  expect_lt(nrow(less_data), nrow(some_data))
  expect_gt(nrow(less_data), 0)

  #Order_ID
  vcr::use_cassette("npn_download_site_phenometrics_tax_2", {
    some_data <- npn_download_site_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      order_ids = c(95),
      additional_fields = c("Order_ID")
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 10)
  expect_type(some_data$order_id, "integer")
  expect_equal(some_data[1, ]$order_id, 95)

  less_data <- subset(some_data,species_id == 6)
  expect_lt(nrow(less_data), nrow(some_data))
  expect_gt(nrow(less_data), 0)


  # #class_ID
  vcr::use_cassette("npn_download_site_phenometrics_tax_3", {
    some_data <- npn_download_site_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      class_ids = c(15),
      additional_fields = c("Class_ID")
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 1000)
  expect_type(some_data$class_id, "integer")
  expect_equal(some_data[1, ]$class_id, 15)

  less_data <- subset(some_data,species_id == 6)
  expect_lt(nrow(less_data), nrow(some_data))
  expect_gt(nrow(less_data), 0)


})


test_that("higher taxonomic ordering works for magnitude phenometrics", {
  skip_on_cran()
  skip_if(skip_long_tests, "Skipping long tests")
  skip_if_not(check_service(), "Service is down")

  #Check the different taxonomic levels for
  #status data

  #Family_ID
  vcr::use_cassette("npn_download_magnitude_phenometrics_tax_1", {
    some_data <- npn_download_magnitude_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      family_ids = c(322),
      additional_fields = c("Family_ID")
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 10)
  expect_type(some_data$family_id, "integer")
  expect_equal(some_data[1, ]$family_id, 322)

  less_data <- subset(some_data,species_id == 6)
  expect_lt(nrow(less_data), nrow(some_data))
  expect_gt(nrow(less_data), 0)

  #Order_ID
  vcr::use_cassette("npn_download_magnitude_phenometrics_tax_2", {
    some_data <- npn_download_magnitude_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      order_ids = c(95),
      additional_fields = c("Order_ID")
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 100)
  expect_type(some_data$order_id, "integer")
  expect_equal(some_data[1, ]$order_id, 95)

  less_data <- subset(some_data,species_id == 6)
  expect_lt(nrow(less_data), nrow(some_data))
  expect_gt(nrow(less_data), 0)

  # #class_ID
  vcr::use_cassette("npn_download_magnitude_phenometrics_tax_3", {
    some_data <- npn_download_magnitude_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      class_ids = c(15),
      additional_fields = c("Class_ID")
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 1000)
  expect_type(some_data$class_id, "integer")
  expect_equal(some_data[1, ]$class_id, 15)

  less_data <- subset(some_data, species_id == 6)
  expect_lt(nrow(less_data), nrow(some_data))
  expect_gt(nrow(less_data), 0)


})


test_that("higher level taxonomic agg and pheno agg works for site level",{
  skip_on_cran()
  skip_if(skip_long_tests, "Skipping long tests")
  skip_if_not(check_service(), "Service is down")

  vcr::use_cassette("npn_download_site_phenometrics_pheno_agg_1", {
    some_data <- npn_download_site_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      family_ids = c(322),
      taxonomy_aggregate = TRUE
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 10)
  expect_type(some_data$family_id, "integer")
  expect_equal(some_data[1, ]$family_id, 322)
  expect_null(some_data$species_id)


  vcr::use_cassette("npn_download_site_phenometrics_pheno_agg_2", {
    some_data <- npn_download_site_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      family_ids = c(322),
      pheno_class_aggregate = TRUE, pheno_class_ids = c(1, 3, 6)
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 10)
  expect_null(some_data$phenophase_id)

  vcr::use_cassette("npn_download_site_phenometrics_pheno_agg_3", {
    some_data <- npn_download_site_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      order_ids = c(78),
      pheno_class_ids = c(1, 3, 6),
      pheno_class_aggregate = TRUE,
      taxonomy_aggregate = TRUE
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 100)
  expect_type(some_data$pheno_class_name, "character")
  expect_type(some_data$order_id, "integer")
  expect_null(some_data$phenophase_id)


})

test_that("higher level taxonomic agg works for magnitude", {
  skip_on_cran()
  skip_if(skip_long_tests, "Skipping long tests")
  skip_if_not(check_service(), "Service is down")

  vcr::use_cassette("npn_download_magnitude_phenometrics_pheno_agg_1", {
    some_data <- npn_download_magnitude_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      family_ids = c(322),
      taxonomy_aggregate = TRUE
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 10)
  expect_type(some_data$family_id, "integer")
  expect_equal(some_data[1, ]$family_id, 322)
  expect_null(some_data$species_id)

  vcr::use_cassette("npn_download_magnitude_phenometrics_pheno_agg_2", {
    some_data <- npn_download_magnitude_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      family_ids = c(322),
      pheno_class_aggregate = TRUE, pheno_class_ids = c(1, 3, 6)
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 10)
  expect_null(some_data$phenophase_id)

  vcr::use_cassette("npn_download_magnitude_phenometrics_pheno_agg_3", {
    some_data <- npn_download_magnitude_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      order_ids = c(78),
      pheno_class_ids = c(1, 3, 6),
      pheno_class_aggregate = TRUE,
      taxonomy_aggregate = TRUE
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_gt(nrow(some_data), 10)
  expect_type(some_data$pheno_class_name, "character")
  expect_type(some_data$order_id, "integer")
  expect_null(some_data$phenophase_id)

})

test_that("six concordance works for status", {
  skip_on_cran()
  skip_if(skip_long_tests, "Skipping long tests")
  skip_if_not(check_service(), "Service is down")

  vcr::use_cassette("npn_download_status_data_six_concord_1", {
    some_data <- npn_download_status_data(
      request_source = "Unit Test",
      c(2016),
      species_ids = c(6),
      six_leaf_layer = TRUE,
      six_bloom_layer = TRUE,
      agdd_layer = 32,
      additional_layers = data.frame(name = c("si-x:30yr_avg_4k_leaf"), param = c("365"))
    )
  })

  expect_s3_class(some_data, "data.frame")
  expect_type(some_data$`SI-x_Bloom_Value`, "double")
  expect_type(some_data$`SI-x_Leaf_Value`, "double")
  expect_type(some_data$`si-x:30yr_avg_4k_leaf`, "double")
  expect_type(some_data$`gdd:agdd`, "double")
  expect_gt(some_data[1, "SI-x_Bloom_Value"], -1)
  expect_lt(some_data[1, "SI-x_Bloom_Value"], 250)

  expect_gt(some_data[1, "SI-x_Leaf_Value"], -1)
  expect_lt(some_data[1, "SI-x_Leaf_Value"], 250)

  expect_gt(some_data[1, "si-x:30yr_avg_4k_leaf"], -1)
  expect_lt(some_data[1, "si-x:30yr_avg_4k_leaf"], 250)

  expect_gt(some_data[1, "gdd:agdd"], -1)

  avg_leaf_data <- some_data$`SI-x_Leaf_Value`

  # Test sub-model functionality
  vcr::use_cassette("npn_download_status_data_six_concord_2", {
    some_data <- npn_download_status_data(
      request_source = "Unit Test",
      c(2016),
      species_ids = c(6),
      six_leaf_layer = TRUE,
      six_sub_model = "lilac"
    )
  })

  expect_gt(some_data[1, "SI-x_Leaf_Value"], -1)
  expect_lt(some_data[1, "SI-x_Leaf_Value"], 250)
  expect_false(identical(some_data$`SI-x_Leaf_Value`, avg_leaf_data))


  # This is testing that the implicit
  # reconciliation with different SI-x
  # layers is happening based on the date
  #
  # In this case get NCEP data
  vcr::use_cassette("npn_download_status_data_six_concord_3", {
    some_data <- npn_download_status_data(
      request_source = "Unit Test",
      c(2019),
      species_ids = c(3),
      six_leaf_layer = TRUE,
      six_sub_model = "lilac"
    )
  })

  expect_gt(some_data[1, "SI-x_Leaf_Value"], -1)
  expect_lt(some_data[1, "SI-x_Leaf_Value"], 250)

  # In this case get PRISM data
  vcr::use_cassette("npn_download_status_data_six_concord_4", {
    some_data <- npn_download_status_data(
      request_source = "Unit Test",
      c(2009),
      species_ids = c(3),
      six_leaf_layer = TRUE,
      six_sub_model = "lilac"
    )
  })

  expect_gt(some_data[1, "SI-x_Leaf_Value"], -1)
  expect_lt(some_data[1, "SI-x_Leaf_Value"], 250)

})


test_that("wkt filter works", {
  skip_on_cran()
  skip_if(skip_long_tests, "Skipping long tests")
  skip_if_not(check_service(), "Service is down")

  #wkt is for CO
  wkt_def <- "POLYGON ((-102.04224 36.993083,-109.045223 36.999084,-109.050076 41.000659,-102.051614 41.002377,-102.04224 36.993083))"

  vcr::use_cassette("npn_download_status_data_wkt_1", {
    some_data <- npn_download_status_data(
      request_source = "Unit Test",
      c(2016),
      species_ids = c(35)
    )
  })

  rows_wo_filter <- nrow(some_data)

  vcr::use_cassette("npn_download_status_data_wkt_2", {
    some_data <- npn_download_status_data(
      request_source = "Unit Test",
      c(2016),
      species_ids = c(35),
      wkt = wkt_def
    )
  })
  rows_w_filter <- nrow(some_data)

  expect_s3_class(some_data, "data.frame")
  expect_type(some_data$species_id, "integer")
  expect_equal(some_data[1, ]$state, "CO")
  expect_gt(rows_wo_filter, rows_w_filter)

  vcr::use_cassette("npn_download_individual_phenometrics_wkt_1", {
    some_data <- npn_download_individual_phenometrics(
      request_source = "Unit Test",
      c(2016),
      species_ids = c(35)
    )
  })
  rows_wo_filter <- nrow(some_data)

  vcr::use_cassette("npn_download_individual_phenometrics_wkt_2", {
    some_data <- npn_download_individual_phenometrics(
      request_source = "Unit Test",
      c(2016),
      species_ids = c(35),
      wkt = wkt_def
    )
  })
  rows_w_filter <- nrow(some_data)

  expect_s3_class(some_data, "data.frame")
  expect_type(some_data$species_id, "integer")
  expect_equal(some_data[1, ]$state, "CO")
  expect_gt(rows_wo_filter, rows_w_filter)


  vcr::use_cassette("npn_download_site_phenometrics_wkt_1", {
    some_data <- npn_download_site_phenometrics(
      request_source = "Unit Test",
      c(2016),
      species_ids = c(35)
    )
  })
  rows_wo_filter <- nrow(some_data)

  vcr::use_cassette("npn_download_site_phenometrics_wkt_2", {
    some_data <- npn_download_site_phenometrics(
      request_source = "Unit Test",
      c(2016),
      species_ids = c(35),
      wkt = wkt_def
    )
    rows_w_filter <- nrow(some_data)
  })

  expect_s3_class(some_data, "data.frame")
  expect_type(some_data$species_id, "integer")
  expect_equal(some_data[1, ]$state, "CO")
  expect_gt(rows_wo_filter, rows_w_filter)


  vcr::use_cassette("npn_download_magnitude_phenometrics_wkt_1", {
    some_data <- npn_download_magnitude_phenometrics(
      request_source = "Unit Test",
      c(2016),
      species_ids = c(35)
    )
  })
  rows_wo_filter <- nrow(some_data)

  vcr::use_cassette("npn_download_magnitude_phenometrics_wkt_2", {
    some_data <- npn_download_magnitude_phenometrics(
      request_source = "Unit Test",
      c(2016),
      species_ids = c(35),
      wkt = wkt_def
    )
  })
  rows_w_filter <- nrow(some_data)

  expect_s3_class(some_data, "data.frame")
  expect_type(some_data$species_id, "integer")
  expect_gt(rows_wo_filter, rows_w_filter)

})


test_that("frequency params work", {
  skip_on_cran()
  skip_if(skip_long_tests, "Skipping long tests")
  skip_if_not(check_service(), "Service is down")

  vcr::use_cassette("npn_download_site_phenometrics_frequency_1", {
    some_data <- npn_download_site_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      family_ids = c(322), num_days_quality_filter = "30"
    )
  })

  rows_month_filter <- nrow(some_data)

  vcr::use_cassette("npn_download_site_phenometrics_frequency_2", {
    some_data <- npn_download_site_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      family_ids = c(322), num_days_quality_filter = "15"
    )
  })

  rows_fortnight_filter <- nrow(some_data)

  expect_gt(rows_month_filter, rows_fortnight_filter)

  vcr::use_cassette("npn_download_magnitude_phenometrics_frequency_1", {
    some_data <- npn_download_magnitude_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      family_ids = c(322), period_frequency = "months"
    )
  })

  rows_month_freq <- nrow(some_data)

  vcr::use_cassette("npn_download_magnitude_phenometrics_frequency_2", {
    some_data <- npn_download_magnitude_phenometrics(
      request_source = "Unit Test",
      years = 2013,
      family_ids = c(322), period_frequency = "14"
    )
  })
  rows_fortnight_freq <- nrow(some_data)

  expect_gt(rows_fortnight_freq, rows_month_freq)

})

Try the rnpn package in your browser

Any scripts or data that you put into this service are public.

rnpn documentation built on April 3, 2025, 5:54 p.m.