tests/testthat/test-retriever.R

context("regression tests")

source("test_helper.R")

testthat::test_that("datasets returns some known values", {
  skip_if_no_retriever()
  skip_on_cran()
  offline_datasets = rdataretriever::datasets()['offline']
  offline_dataset_names = c()
  for (dataset in offline_datasets) {
    offline_dataset_names = c(offline_dataset_names, dataset)
  }
  expect_identical("car-eval" %in% offline_dataset_names, TRUE)
})


test_that("Download the raw portal dataset using path", {
  skip_if_no_retriever()
  portal <- list("3299474", "3299483", "5603981")
  path = tempdir()
  rdataretriever::download(dataset = 'portal', path = path)
  for (file in portal)
  {
    file_path <- full_normalized_path(path, file, mustWork = FALSE)
    expect_identical(identical(file.info(file_path)$size, integer(0)), FALSE)
  }
})


test_that("Download the raw portal dataset using path and sub_dir", {
  skip_if_no_retriever()
  portal <- list("3299474", "3299483", "5603981")
  path = tempdir()
  sub_dir = 'sub_dir'
  rdataretriever::download(dataset = 'portal', path = path, sub_dir = sub_dir)
  for (file in portal)
  {
    file_path <- full_normalized_path(path, sub_dir, file, mustWork = FALSE)
    expect_identical(identical(file.info(file_path)$size, integer(0)), FALSE)
  }
})


test_that("Install portal into csv", {
  skip_if_no_retriever()
  # Install portal into csv files in your working directory
  portal <- list("portal_main", "portal_plots", "portal_species")
  rdataretriever::install_csv('portal')
  for (file in portal)
  {
    file_path <- full_normalized_path(mustWork = FALSE,
      getwd(), "tests/testthat", paste(file, "csv", sep = "."))
    expect_identical(identical(file.info(file_path)$size, integer(0)), FALSE)
  }
})


test_that("Install portal into json", {
  skip_if_no_retriever()
  # Install portal into json
  portal <- list("portal_main", "portal_plots", "portal_species")
  rdataretriever::install_json('portal')
  for (file in portal)
  {
    file_path <- full_normalized_path(mustWork = FALSE,
        getwd(), "tests/testthat", paste(file, "json", sep = "."))
    expect_identical(identical(file.info(file_path)$size, integer(0)), FALSE)
  }
})


test_that("Install portal into xml", {
  skip_if_no_retriever()
  # Install portal into xml
  portal <- list("portal_main", "portal_plots", "portal_species")
  rdataretriever::install_xml('portal')
  for (file in portal)
  {
    file_path <- full_normalized_path(mustWork = FALSE,
        getwd(), "tests/testthat", paste(file, "xml", sep = "."))
    expect_identical(identical(file.info(file_path)$size, integer(0)), FALSE)
  }
})

test_that("Install dataset into Postgres", {
  skip_if_no_retriever()
  skip_if_no_postgres()
  skip_on_cran()
  # Install portal into Postgres at host
  try(system(
    paste("psql -U postgres -d testdb_retriever -p 5432 -h" , pgdb_rdata,
          " -w -c \"DROP SCHEMA IF EXISTS testschema CASCADE\""),
    intern = TRUE,
    ignore.stderr = TRUE
  ))
  portal <- c("main", "plots", "species")
  rdataretriever::install_postgres('portal', host= pgdb_rdata,
    password = os_password, database_name = 'testdb_retriever')
  con <- dbConnect(
    dbDriver("PostgreSQL"),
    user = 'postgres',
    host = pgdb_rdata,
    password = os_password,
    port = 5432,
    dbname = 'testdb_retriever'
  )
  result <-
    dbGetQuery(
      con,
      "SELECT table_name FROM information_schema.tables WHERE table_schema='testschema'"
    )
  dbDisconnect(con)
  expect_identical(all(result$table_name %in%  portal), TRUE)
})


test_that("Install the dataset into Mysql", {
  skip_if_no_retriever()
  skip_on_cran()
  try(err<-system(
    paste("mysql -u travis --host" , mysqldb_rdata,
          "--port 3306 -Bse 'DROP DATABASE IF EXISTS testdb_retriever'"),
    intern = TRUE,
    ignore.stderr = TRUE
  ))
  portal <- c("main", "plots", "species")
  rdataretriever::install_mysql('portal', database_name = 'testdb_retriever',
    host = mysqldb_rdata)
  #con <- dbConnect(RMariaDB::MariaDB(), default.file = mysql_conf)
  #result <- dbListTables(con)
  #dbDisconnect(con)
  #expect_setequal(result, portal)
})


test_that("Install portal into sqlite", {
  skip_if_no_sqlite()
  skip_if_no_retriever()
  # Install the portal into Sqlite
  portal <- c("portal_main", "portal_plots", "portal_species")
  rdataretriever::install_sqlite('portal')
  con <- dbConnect(RSQLite::SQLite(),dbname = "sqlite.db")
  result <- dbListTables(con)
  dbDisconnect(con)
  #expect_setequal(result, portal)
  all_tables_installed = all(portal %in% result)
  expect_true(all_tables_installed)
})


test_that("Install and load a dataset as a list", {
  skip_if_no_retriever()
  portal_data <- c("main", "plots", "species")
  portal = rdataretriever::fetch('portal')
  expect_identical(all(names(portal) %in%  portal_data), TRUE)
})

test_that("Reset a dataset script", {
  skip_if_no_retriever()
  skip_on_cran()
  dataset = "iris"
  rdataretriever::reset(dataset)
  rdataretriever::reload_scripts()
  json_path = paste("~/.retriever/scripts/", "iris", ".json", sep="")
  py_path = paste("~/.retriever/scripts/", "iris", ".py", sep="")
  expect_identical(file.exists(json_path), FALSE)
  expect_identical(file.exists(py_path), FALSE)
  rdataretriever::get_updates()
  rdataretriever::reload_scripts()
  offline_datasets = rdataretriever::datasets()['offline']
  offline_dataset_names = c()
  for (dataset in offline_datasets) {
    offline_dataset_names = c(offline_dataset_names, dataset)
  }
  expect_identical("iris" %in% offline_dataset_names, TRUE)
})

test_that("Citation of scripts", {
  skip_if_no_retriever()
  portal_citation <- rdataretriever::get_script_citation('portal')
  expect_true(is.character(portal_citation))
  expect_match(portal_citation[1],
               "S. K. Morgan Ernest, Thomas J. Valone, and James H. Brown. 2009. Long-term monitoring and experimental manipulation of a Chihuahuan Desert ecosystem near Portal, Arizona, USA. Ecology 90:1708.",
               fixed = TRUE)
})

test_that("Minimum retriever version is installed", {
  skip_if_no_retriever()
  expect_true(rdataretriever::check_retriever_availability())
})
ropensci/ecoretriever documentation built on May 18, 2022, 9:53 a.m.