tests/testthat/test-etox.R

up <- ping_service("etox")
test_that("examples in the article are unchanged", {
  skip_on_cran()
  skip_if_not(up, "ETOX service is down")

  utils::data("jagst", package = "webchem")
  subs <- utils::head(unique(jagst$substance))
  ids <- get_etoxid(subs, match = "best")
  etox_data <- etox_basic(ids$etoxid)
  #values go to test-pubchem
  etox_cas <- cas(etox_data)
  eqs <- etox_targets(c("8397", "7240", "8836", "7442", "7571", "8756"))
  macs <- suppressWarnings(sapply(eqs, function(y) {
    if (length(y) == 1 && is.na(y)) {
      return(NA)
    } else {
      res <- y$res
      min(res[res$Country_or_Region == "EEC / EU" &
                res$Designation == "MAC-EQS", "Value_Target_LR"])
    }
  }))

  expect_s3_class(ids, "data.frame")
  expect_equal(names(ids), c("query", "match", "etoxid"))
  expect_equal(ids$etoxid,
               c("8668", "8494", NA, "8397", "7240", "7331"),
               ignore_attr = TRUE)
  expect_equal(
    ids$match,
    c("2,4-Xylenol", "4-Chlor-2-methylphenol", NA,
      "Atrazin", "Benzol", "Desethylatrazin"))
  expect_equal(ids$query,
               c("2,4-Dimethylphenol", "4-Chlor-2-methylphenol",
                 "4-para-nonylphenol", "Atrazin", "Benzol", "Desethylatrazin"))

  expect_type(etox_cas, "character")
  expect_equal(names(etox_cas),
               c("8668", "8494", NA, "8397", "7240", "7331"))
  expect_equal(unname(etox_cas),c("105-67-9", "1570-64-5", NA, "1912-24-9",
                                  "71-43-2", "6190-65-4"))
  expect_equal(unname(macs), c(2.000, 50.000, 0.016, 1.000, 4.000, 0.034),
               tolerance = 10^-4)
})

test_that("get_etoxid returns correct results", {
  skip_on_cran()
  skip_if_not(up, "ETOX service is down")

  # test general
  comps <- c("Triclosan", "Glyphosate")
  o1 <- suppressWarnings(get_etoxid(comps, match = "best"))
  o2 <- suppressWarnings(get_etoxid(comps, match = "all"))
  o3 <- get_etoxid("Triclosan", match = "first")
  o4 <- get_etoxid("Triclosan", match = "na")
  o5 <- get_etoxid("1071-83-6", from = 'cas', match = 'first')
  o6 <- get_etoxid("133483", from = "gsbl")
  o7 <- get_etoxid("203-157-5", from = "ec")
  do2 <- get_etoxid("Thiamethoxam")

  expect_s3_class(o1, "data.frame")
  expect_s3_class(o2, "data.frame")
  expect_s3_class(o3, "data.frame")
  expect_s3_class(o4, "data.frame")
  expect_s3_class(o5, "data.frame")
  expect_s3_class(o6, "data.frame")
  expect_s3_class(o7, "data.frame")
  expect_s3_class(do2, "data.frame")

  expect_equal(o1$etoxid, c("20179", "7419"), ignore_attr = TRUE)
  expect_equal(o2$etoxid, c("89236", "20179", "7419", "9051"),
               ignore_attr = TRUE)
})

test_that("examples from webchem article run", {
  skip_on_cran()
  skip_if_not(up, "ETOX service is down")

  # tests for the article
  utils::data("jagst")
  ids <- get_etoxid(utils::head(unique(jagst$substance),6), match = "best")

  expect_s3_class(ids, "data.frame")
  expect_equal(ids$etoxid, c("8668","8494",NA,"8397","7240","7331"),
               ignore_attr = TRUE)
  expect_equal(ids$match, c(
    "2,4-Xylenol",
    "4-Chlor-2-methylphenol",
    NA,
    "Atrazin",
    "Benzol",
    "Desethylatrazin"
  ), ignore_attr = TRUE)
  expect_equal(ids$query, c(
    "2,4-Dimethylphenol",
    "4-Chlor-2-methylphenol",
    "4-para-nonylphenol",
    "Atrazin",
    "Benzol",
    "Desethylatrazin"
  ), ignore_attr = TRUE)

})

test_that("etox_basic returns correct results", {
  skip_on_cran()
  skip_if_not(up, "ETOX service is down")

  ids <- c("20179", "9051", "xxxxx", NA)
  o1 <- etox_basic(ids)

  expect_s3_class(o1, 'list')
  expect_equal(length(o1), 4)
  expect_equal(o1[['20179']]$cas, "3380-34-5")
  expect_equal(length(o1[['20179']]), 5)
  expect_s3_class(o1[['20179']]$synonyms, 'data.frame')
  expect_true(is.na(o1[[3]]))
  expect_true(is.na(o1[[4]]))
})

test_that("etox_targets returns correct results", {
  skip_on_cran()
  skip_if_not(up, "ETOX service is down")

  ids <- c("20179", "9051", "xxxxx", NA)
  o1 <- etox_targets(ids)

  expect_type(o1, 'list')
  expect_equal(length(o1), 4)
  expect_equal(o1[['20179']]$res$Substance[1], "Triclosan")
  expect_equal(ncol(o1[['20179']]$res), 33)
  expect_s3_class(o1[['20179']]$res, 'data.frame')
  expect_true(is.na(o1[[3]]))
  expect_true(is.na(o1[[4]]))
})

test_that("etox_tests returns correct results", {
  skip_on_cran()
  skip_if_not(up, "ETOX service is down")

  ids <- c("20179", "9051", "xxxxx", NA)
  o1 <- etox_tests(ids)

  expect_type(o1, 'list')
  expect_equal(length(o1), 4)
  expect_equal(o1[['20179']]$res$Substance[1], "Triclosan")
  expect_equal(ncol(o1[['20179']]$res), 41)
  expect_s3_class(o1[['20179']]$res, 'data.frame')
  expect_true(is.na(o1[[3]]))
  expect_true(is.na(o1[[4]]))
})


test_that("etox integration tests", {
  skip_on_cran()
  skip_if_not(up, "ETOX service is down")

  comps <- c('Triclosan', 'Glyphosate', 'xxxx')
  ids_b <- get_etoxid(comps, match = 'best')
  ids_a <- get_etoxid(comps, match = 'all')

  int1 <- etox_basic(ids_b$etoxid)
  int2 <- etox_targets(ids_b$etoxid)
  int3 <- etox_tests(ids_b$etoxid)

  expect_type(int1, 'list')
  expect_equal(length(int1), 3)
  expect_equal(int1[['20179']]$cas, "3380-34-5")
  expect_equal(length(int1[['20179']]), 5)
  expect_s3_class(int1[['20179']]$synonyms, 'data.frame')
  expect_true(is.na(int1[[3]]))

  expect_type(int2, 'list')
  expect_equal(length(int2), 3)
  expect_equal(int2[['20179']]$res$Substance[1], "Triclosan")
  expect_equal(ncol(int2[['20179']]$res), 33)
  expect_s3_class(int2[['20179']]$res, 'data.frame')
  expect_true(is.na(int2[[3]]))

  expect_type(int3, 'list')
  expect_equal(length(int3), 3)
  expect_equal(int3[['20179']]$res$Substance[1], "Triclosan")
  expect_equal(ncol(int3[['20179']]$res), 41)
  expect_s3_class(int3[['20179']]$res, 'data.frame')
  expect_true(is.na(int3[[3]]))
})


test_that("etox functions handle NAs", {
  expect_equal(is.na(get_etoxid(NA)$match), TRUE)
})

Try the webchem package in your browser

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

webchem documentation built on July 9, 2023, 5:30 p.m.