tests/testthat/test_that.r

check_db <- function() {
  if (!check_ecotox_availability()) {
    skip("ECOTOX database not available")
  }
}

simple_search1 <- if (check_ecotox_availability()) {
  suppressMessages(suppressWarnings(search_ecotox(
    list(latin_name = list(terms = "Daphnia magna"), chemical_name = list(terms = "benzene")),
    c(list_ecotox_fields(), "results.result_id", "results.test_id", "tests.reference_number"),
    compute = TRUE)))
} else NULL

simple_search2 <- if (check_ecotox_availability()) {
  suppressMessages(suppressWarnings({search_ecotox(list(test_id = list(terms = "1", method = "exact")))}))
} else NULL

simple_search3 <- if (check_ecotox_availability()) {
  suppressMessages(suppressWarnings({search_ecotox(list(latin_name = list(terms = "perdix perdix"),
                                                       test_cas = list(terms = "1336363")),
  c(list_ecotox_fields(), "results.result_id", "results.test_id", "tests.reference_number"))}))
} else NULL

search_q <- if (check_ecotox_availability()) {
  suppressMessages(suppressWarnings({search_query_ecotox(list(test_id = list(terms = "1", method = "exact")))}))
} else NULL

throws_errors <- function(expression) {
  result <- FALSE
  tryCatch(expression, error = function(e) {result <<- T}, warning = function(w) {invisible(NULL)})
  result
}

#################################
#################################
####                         ####
####         TEST 01         ####
####                         ####
#################################
#################################


test_that("All tables in the database are specified", {
  check_db()
  expect_true({
    dbcon <- suppressWarnings(dbConnectEcotox())
    test <- all(dbListTables(dbcon) %in% ECOTOXr:::.db_specs$table)
    dbDisconnectEcotox(dbcon)
    test
  })
})

#################################
#################################
####                         ####
####         TEST 02         ####
####                         ####
#################################
#################################

test_that("All specified tables are in the database", {
  check_db()
  expect_true({
    dbcon            <- suppressWarnings(dbConnectEcotox())
    tables_not_in_db <- ECOTOXr:::.db_specs$table[!ECOTOXr:::.db_specs$table %in% dbListTables(dbcon)]
    e_file           <- suppressWarnings({get_ecotox_sqlite_file()})
    e_date           <- as.Date(substr(e_file, nchar(e_file) - 16, nchar(e_file) - 7), format = "%m_%d_%Y")
    test             <-
      length(tables_not_in_db) == 0 ||
      (all(tables_not_in_db %in% c("length_unit_codes", "length_unit_codes", "length_type_codes", "length_type_codes")) &&
                                  e_date <= as.Date("2023-06-15"))
    dbDisconnectEcotox(dbcon)
    test
  })
})

#################################
#################################
####                         ####
####         TEST 03         ####
####                         ####
#################################
#################################

test_that("All fields in the database are specified", {
  check_db()
  expect_true({
    dbcon <- suppressWarnings(dbConnectEcotox())
    tables <- dbListTables(dbcon)
    test <- all(unlist(lapply(tables, function(tab) {
      all(dbListFields(dbcon, tab) %in% subset(ECOTOXr:::.db_specs, table == tab)$field_name)
    })))
    dbDisconnectEcotox(dbcon)
    test
  })
})

#################################
#################################
####                         ####
####         TEST 04         ####
####                         ####
#################################
#################################

test_that("All specified fields are in the database", {
  check_db()
  expect_true({
    dbcon <- suppressWarnings(dbConnectEcotox())
    tables <- dbListTables(dbcon)
    test <- all(unlist(lapply(tables, function(tab) {
      all(subset(ECOTOXr:::.db_specs, table == tab)$field_name %in% dbListFields(dbcon, tab))
    })))
    dbDisconnectEcotox(dbcon)
    test
  })
})

#################################
#################################
####                         ####
####         TEST 05         ####
####                         ####
#################################
#################################

test_that("Getting the path to the ECOTOX database doesn't throw errors", {
  expect_false(throws_errors({get_ecotox_path()}))
})

#################################
#################################
####                         ####
####         TEST 06         ####
####                         ####
#################################
#################################

test_that("Getting SQLite file location doesn't throw errors", {
  check_db()
  expect_false(throws_errors({get_ecotox_sqlite_file()}))
})

#################################
#################################
####                         ####
####         TEST 07         ####
####                         ####
#################################
#################################

test_that("A simple search results in expected table", {
  check_db()
  expect_true({
    ## Compare result with anticipated ids:
    all(
      c("1020021", "1020022", "1020023", "1022155", "1031085", "1031086", "1031087", "1031088", "1031196", "1031197",
        "1064409", "1072942", "1072943", "1072944", "1083684", "1083685", "1083686", "1098939", "1098940", "1098941",
        "1098942", "1098943", "1098944", "1098945", "1098946", "1098947", "1098948", "1098949", "1098950", "1125798",
        "1136665", "1136666", "1142641", "1152541", "1187783", "1189253", "1237724", "2113979", "2114101", "2194929") %in%
        simple_search1$test_id
    )
  })
})

#################################
#################################
####                         ####
####         TEST 08         ####
####                         ####
#################################
#################################

test_that("A simple search results in unique result ids", {
  check_db()
  expect_true({
    ## Compare result with anticipated ids:
    all(!duplicated(simple_search1$result_id))
  })
})

#################################
#################################
####                         ####
####         TEST 09         ####
####                         ####
#################################
#################################

test_that("In a simple search test that there is a publication year when there is a reference number.", {
  check_db()
  expect_false({
    any(is.na(simple_search1$publication_year) & !is.na(simple_search1$reference_number))
  })
})

#################################
#################################
####                         ####
####         TEST 10         ####
####                         ####
#################################
#################################

test_that("A simple search does not necessarily result in unique result ids when chemical carriers are added to output", {
  check_db()
  expect_false({
    results <- suppressWarnings(
      search_ecotox(
        list(test_id = list(terms = "1000260")),
        c("tests.test_id", "results.result_id", "chemical_carriers.carrier_id"),
        group_by_results = FALSE)
    )
    ## Compare result with anticipated ids:
    all(!duplicated(results$result_id))
  })
})

#################################
#################################
####                         ####
####         TEST 11         ####
####                         ####
#################################
#################################

test_that("Default field names are fewer than all field names", {
  expect_true({
    length(list_ecotox_fields("default")) < length(list_ecotox_fields("all"))
  })
})

#################################
#################################
####                         ####
####         TEST 12         ####
####                         ####
#################################
#################################

test_that("A simple search query returns a single element of type character", {
  check_db()
  expect_true({
    length(search_q) == 1 && typeof(search_q) == "character"
  })
})

#################################
#################################
####                         ####
####         TEST 13         ####
####                         ####
#################################
#################################

test_that("A query doesn't mistakenly returns field name as value", {
  check_db()
  expect_false({
    (is.null(simple_search2$test_grade) || all(simple_search2$test_grade == "test_grade"))
  })
})

#################################
#################################
####                         ####
####         TEST 14         ####
####                         ####
#################################
#################################

test_that("No duplicated results are returned when searching for test id", {
  check_db()
  expect_false({
    any(duplicated(simple_search2))
  })
})

#################################
#################################
####                         ####
####         TEST 15         ####
####                         ####
#################################
#################################

test_that("When multiple doses are linked to a result, no duplicates are returned", {
  check_db()
  expect_false({
    any(duplicated(simple_search3))
  })
})

#################################
#################################
####                         ####
####         TEST 16         ####
####                         ####
#################################
#################################

test_that("get_ecotox_info doesn't throw an error.", {
  expect_false({ throws_errors(suppressMessages(get_ecotox_info())) })
})

Try the ECOTOXr package in your browser

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

ECOTOXr documentation built on Sept. 20, 2024, 5:06 p.m.