tests/testthat/test-galah_select.R

test_that("`galah_select()` doesn't return error when columns don't exist", {
  expect_no_error(galah_select(basisOfRecord))
  expect_no_error(galah_select(year, basisOfRecord, eventdate))
})

test_that("`galah_select()` triggers error during `compute()` when columns don't exist", {
  skip_if_offline(); skip_on_ci()
  expect_error(
    galah_call() |>
      identify("perameles") |>
      filter(year == 2003) |>
      galah_select(basisOfRecors) |>
      compute())
  expect_error(
    galah_call() |>
      identify("perameles") |>
      filter(year == 2003) |>
      select(year, basisOfRecors, eventdate) |>
      compute())
})

test_that("`galah_select()` returns requested columns", {
  skip_if_offline(); skip_on_ci()
  galah_config(atlas = "Australia",
               email = "ala4r@ala.org.au", 
               run_checks = FALSE)
  query <- galah_call() |>
    identify("oxyopes dingo") |>
    select(year, basisOfRecord) |>
    atlas_occurrences()
  expect_s3_class(query, c("tbl_df", "tbl", "data.frame" ))
  expect_equal(names(query), c("year", "basisOfRecord"))
  expect_gte(nrow(query), 10)
})

test_that("`galah_select()` returns requested columns when piped", {
  skip_if_offline(); skip_on_ci()
  galah_config(email = "ala4r@ala.org.au", run_checks = FALSE)
  query <- galah_call() |>
    identify("oxyopes dingo") |>
    select(year, basisOfRecord) |>
    collect()
  expect_s3_class(query, c("tbl_df", "tbl", "data.frame" ))
  expect_equal(names(query), c("year", "basisOfRecord"))
  expect_gte(nrow(query), 10)
})

test_that("`galah_select()` builds expected columns when group = basic", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call() |>
    identify("oxyopes dingo") |>
    select(group = "basic") |>
    collapse()
  y <- url_parse(x$url)$query
  expect_equal(strsplit(y$fields, ",")[[1]], preset_groups("basic"))
  expect_equal(y$qa, "none")
})

test_that("`galah_select()` builds expected columns when group = event", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call() |>
    identify("oxyopes dingo") |>
    select(group = "event") |>
    collapse()
  y <- url_parse(x$url)$query
  expect_equal(strsplit(y$fields, ",")[[1]], 
               c("recordID", preset_groups("event")))
  expect_equal(y$qa, "none")
})

test_that("`galah_select()` accepts multiple groups", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call() |>
    identify("oxyopes dingo") |>
    select(group = c("basic", "assertions")) |>
    collapse()
  y <- url_parse(x$url)$query
  expect_equal(strsplit(y$fields, ",")[[1]], 
               preset_groups("basic"))
  expect_equal(y$qa, "includeall")
})

test_that("galah_select defaults to group = 'basic' when there are no args", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call() |>
    identify("oxyopes dingo") |>
    collapse()
  y <- url_parse(x$url)$query
  expect_equal(strsplit(y$fields, ",")[[1]], preset_groups("basic"))
  expect_equal(y$qa, "none")
})

test_that("galah_select works with group = 'taxonomy'", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call() |>
    identify("oxyopes dingo") |>
    select(group = "taxonomy") |>
    collapse()
  y <- url_parse(x$url)$query
  fields <- strsplit(tolower(y$fields), ",")[[1]]
  expect_equal(fields,
               c("recordid",
                 "kingdom",
                 "phylum", 
                 "class",
                 "order",
                 "family",
                 "genus",
                 "species",
                 "subspecies"))
})

test_that("galah_select returns assertions + recordID when group = assertions", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call() |>
    identify("oxyopes dingo") |>
    select(group = "assertions") |>
    collapse()
  y <- url_parse(x$url)$query
  expect_equal(y$fields, "recordID")
  expect_equal(y$qa, "includeall")
})

test_that("galah_select combines requested columns and group columns", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call() |>
    identify("oxyopes dingo") |>
    select(year, basisOfRecord, group = "basic") |>
    collapse()
  y <- url_parse(x$url)$query
  expect_equal(strsplit(y$fields, ",")[[1]], 
               c(preset_groups("basic"), "year", "basisOfRecord"))
})

test_that("galah_select can use tidyselect::contains", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call() |>
    identify("oxyopes dingo") |>
    select(tidyselect::contains("el")) |>
    collapse()
  y <- url_parse(x$url)$query
  fields <- strsplit(tolower(y$fields), ",")[[1]]
  assertions <- strsplit(tolower(y$qa), ",")[[1]]
  expect_true(all(grepl("el", fields)))
  expect_true(all(grepl("el", assertions)))
})

test_that("galah_select can use tidyselect::starts_with", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call() |>
    identify("oxyopes dingo") |>
    select(tidyselect::starts_with("el")) |>
    collapse()
  y <- url_parse(x$url)$query
  fields <- strsplit(tolower(y$fields), ",")[[1]]
  assertions <- strsplit(tolower(y$qa), ",")[[1]]
  expect_true(all(grepl("^el", fields)))
  expect_true(all(grepl("^el", assertions)))
})

test_that("galah_select can use tidyselect::last_col", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call() |>
    identify("oxyopes dingo") |>
    select(tidyselect::last_col()) |>
    collapse()
  y <- url_parse(x$url)$query
  expect_equal(y$fields, "recordID")
  expect_equal(y$qa, "ZERO_COORDINATE")
})

test_that("galah_select can use tidyselect::last_col & user-defined queries", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call() |>
    identify("oxyopes dingo") |>
    select(year, basisOfRecord, tidyselect::last_col()) |>
    collapse()
  y <- url_parse(x$url)$query
  expect_equal(y$fields, "year,basisOfRecord")
  expect_equal(y$qa, "ZERO_COORDINATE")
})

test_that("galah_select can use tidyselect::last_col & group", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call() |>
    identify("oxyopes dingo") |>
    select(tidyselect::last_col(), group = "basic") |>
    collapse()
  y <- url_parse(x$url)$query
  expect_equal(strsplit(y$fields, ",")[[1]], 
               preset_groups("basic"))
  expect_equal(y$qa, "ZERO_COORDINATE")
})

test_that("galah_select warns for invalid field names when type = 'species'", {
  skip_if_offline(); skip_on_ci()
  expect_warning({galah_call(type = "species") |>
    identify("Crinia") |>
    select(an_unrecognised_field_name) |>
    collapse()})
})

test_that("galah_select works for type = 'species' with no arguments", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call(type = "species") |>
    identify("Crinia") |>
    select() |>
    collect()
  expect_equal(colnames(x), "taxon_concept_id")
  expect_gt(nrow(x), 10)
})

test_that("galah_select works for type = 'species'", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call(type = "species") |>
      identify("Crinia") |>
      select(counts) |>
      collect()
  expect_equal(colnames(x), c("taxon_concept_id", "count"))
  expect_gt(nrow(x), 10)
})

test_that("galah_select works for type = 'species' with group = 'taxonomy'", {
  skip_if_offline(); skip_on_ci()
  x <- galah_call(type = "species") |>
    identify("Crinia") |>
    select(counts, lists, group = "taxonomy") |>
    collect()
  expect_true(all(c("taxon_concept_id", "count", "kingdom", "phylum") %in% colnames(x)))
  expect_gt(nrow(x), 10)
})
AtlasOfLivingAustralia/galah documentation built on Feb. 8, 2025, 9:25 a.m.