tests/testthat/test-phyto.R

test_that("nrp_add_phyto_species works", {

  spp <- tibble(
    Taxa = "New Taxa",
    Genus = "New Genus",
    ClassName = "New Class",
    ClassAlias = NA_character_
  )

  conn <- nrp_create_db(path = ":memory:", ask = FALSE)
  teardown(DBI::dbDisconnect(conn))

  old_spp <- nrp_download_phyto_species(db_path = conn)

  nrp_add_phyto_species(data = spp, db_path = conn)

  updated_spp <- nrp_download_phyto_species(db_path = conn)
  spp_db <- setdiff(updated_spp, old_spp)

  expect_identical(spp, spp_db)

})

test_that("nrp_read_plytoplankton_file works", {

  conn <- nrp_create_db(path = ":memory:", ask = FALSE)
  teardown(DBI::dbDisconnect(conn))

  path <- system.file("extdata", "phyto/phyto1.xlsx",
                      package = "nrp", mustWork = TRUE)

  wrong_path <- system.file("extdata", "ar-empty.rtf", package = "nrp", mustWork = TRUE)

  data <- nrp_read_phyto_file(path = path, db_path = conn) %>%
    suppressWarnings()

  expect_warning(
    nrp_read_phyto_file(path = path, db_path = conn),
    "The input data is missing the following columns which will be assigned NA:  Count_Number, Species_Bvol, Biomass"
    )

  expect_is(data, "tbl_df")
  expect_identical(nrow(data), 5L)
  expect_identical(length(data), 14L)

  expect_error(nrp_read_phyto_file(path = wrong_path, db_path = conn),
               "Please ensure input data is a valid excel spreadsheet \\(.xlsx\\).")

  path2 <- system.file("extdata", "phyto/bad/phyto2.xlsx",
                      package = "nrp", mustWork = TRUE)

  expect_warning(nrp_read_phyto_file(path = path2, db_path = conn),
               "Sites in input data not present in 'Sites' table in database: 'AR12'.")

  path3 <- system.file("extdata", "phyto/bad/phyto3.xlsx",
                       package = "nrp", mustWork = TRUE)

  expect_warning(nrp_read_phyto_file(path = path3, db_path = conn),
                 "Taxa in input data not present in 'PhytoplanktonSpecies' table in database: 'New Species'.")

})

test_that("nrp_read_phyto works", {

  conn <- nrp_create_db(path = ":memory:", ask = FALSE)
  teardown(DBI::dbDisconnect(conn))

  path <- system.file(
    "extdata", "phyto", package = "nrp", mustWork = TRUE
    )

  data <- nrp_read_phyto(path, db_path = conn)

  expect_is(data, "tbl_df")
  expect_identical(length(data), 14L)
  expect_identical(nrow(data), 5L)

  path <- system.file(
    "extdata", "phyto", "multiple", package = "nrp", mustWork = TRUE
    )

  data <- nrp_read_phyto(path, db_path = conn, recursive = TRUE)

  expect_is(data, "tbl_df")
  expect_identical(length(data), 14L)
  expect_identical(nrow(data), 15L)

  expect_error(
    nrp_read_phyto("not-a-path", db_path = conn), "path 'not-a-path' must exist"
    )

  path <- system.file("extdata", package = "nrp", mustWork = TRUE)
  data <- nrp_read_phyto(path, db_path = conn)
  expect_identical(data,  list(x = 1)[-1])
})

test_that("nrp_upload_phyto works", {

  conn <- nrp_create_db(path = ":memory:", ask = FALSE)
  teardown(DBI::dbDisconnect(conn))

  path <- system.file("extdata", "phyto/phyto1.xlsx",
                      package = "nrp", mustWork = TRUE)

  data <- nrp_read_phyto_file(path = path, db_path = conn) %>%
    suppressWarnings()

  options(nrp.ask_user.auto_yes = TRUE)

  nrp_upload_phyto(data = data, db_path = conn)

  spp <- nrp_download_phyto_species(db_path = conn)
  expect_identical(last(spp$Taxa), "New")

  db_data <- readwritesqlite::rws_read_table("Phytoplankton", conn = conn)
  expect_identical(length(db_data), 9L)
  expect_identical(nrow(db_data), 5L)

  nrp_upload_phyto(data = data, db_path = conn, replace = TRUE)

  db_data <- readwritesqlite::rws_read_table("Phytoplankton", conn = conn)
  expect_identical(length(db_data), 9L)
  expect_identical(nrow(db_data), 5L)

  expect_error(
    nrp_upload_phyto(data = data, db_path = conn),
    "UNIQUE constraint failed: PhytoplanktonSample.Date, PhytoplanktonSample.SiteID, PhytoplanktonSample.Depth"
  )

  data <- nrp_read_phyto_file(path = path, db_path = conn) %>%
    suppressWarnings()

  data %<>%
    rename(Wrong_Name = Samp_Date)

  expect_error(
    nrp_upload_phyto(data = data, db_path = conn),
    "Columns in data do not match template for phytoplankton raw data. see `nrp::phyto_input_cols` for correct column names and order."
  )

  data <- nrp_read_phyto_file(path = path, db_path = conn) %>%
    suppressWarnings()

  data %<>%
    mutate(Species_Name = "same")

  expect_error(
    nrp_upload_phyto(data = data, db_path = conn),
    "Columns 'Samp_Date', 'SiteLoc_LocName', 'Samp_Depth' and 'Species_Name' in `data` must be a unique key."
  )

})

test_that("nrp_download_phyto works", {

  conn <- nrp_create_db(path = ":memory:", ask = FALSE)
  teardown(DBI::dbDisconnect(conn))

  path <- system.file("extdata", "phyto/phyto1.xlsx",
                      package = "nrp", mustWork = TRUE)

  data <- nrp_read_phyto_file(path = path, db_path = conn) %>%
    suppressWarnings()
  data$SiteLoc_LocName[1] <- "KL1"
  data$Samp_Date[2] <- "2022-01-02"
  data$Samp_Date[3] <- "2022-01-03"

  options(nrp.ask_user.auto_yes = TRUE)
  nrp_upload_phyto(data = data, db_path = conn)

  db_data <- nrp_download_phyto(db_path = conn)
  expect_identical(length(db_data), 9L)
  expect_identical(nrow(db_data), 5L)

  db_data <- nrp_download_phyto(start_date = "2022-01-01", end_date = "2022-01-03", db_path = conn)
  expect_identical(nrow(db_data), 2L)
  expect_identical(db_data$Date, dttr2::dtt_date(c("2022-01-02", "2022-01-03")))

  db_data <- nrp_download_phyto(sites = "KL1", db_path = conn)
  expect_identical(nrow(db_data), 1L)
  expect_identical(db_data$SiteID, "KL1")

  db_data <- nrp_download_phyto(species = "Gymnodinium sp (medium)", db_path = conn)
  expect_identical(nrow(db_data), 1L)
  expect_identical(db_data$Taxa, "Gymnodinium sp (medium)")

  expect_error(
    nrp_download_phyto(sites = "wrong", db_path = conn),
    "1 or more invalid site names"
  )

  expect_warning(
    nrp_download_phyto(sites = "AR6", db_path = conn),
    "no data available for query provided."
  )

  expect_error(
    nrp_download_phyto(species = "wrong", db_path = conn),
    "Unrecognized species in query:  wrong"
  )

  expect_error(
    nrp_download_phyto(start_date = "2022-01-03", end_date = "2022-01-02", db_path = conn),
    "start date is later than end date"
  )

})
poissonconsulting/nrp documentation built on Jan. 28, 2024, 4:14 p.m.