tests/testthat/test-tcplggplot2Utils.R

#-------------------------------------------------------------------------------
# tests using drvr = "MySQL" and mocking
#-------------------------------------------------------------------------------
# Format
# test_that("something works", {
# data("mc_test")
# mocked <- mc_test$mc0_by_m0id # change this
# local_mocked_bindings(
#   tcplQuery = function(query, db, tbl) {
#     if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") mc_test$tcplConfQuery
#     else mocked[query][[1]]
#   }
# )
# tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
# })

pdf(NULL) # prevent automatic RPlots.pdf output due to not storing gtable in object

#-------------------------------------------------------------------------------
# Test MORELETTERS
#-------------------------------------------------------------------------------
test_that("MORELETTERS works", {
  expect_error(MORELETTERS(0))
  expect_equal(MORELETTERS(1), "A")
  expect_equal(MORELETTERS(10), "J")
  expect_equal(MORELETTERS(27), "AA")
  expect_equal(MORELETTERS(100), "CV")
  expect_equal(MORELETTERS(1000), "ALL")
  expect_equal(MORELETTERS(1:26), LETTERS)
})


#-------------------------------------------------------------------------------
# Test tcplfit2_fun
#-------------------------------------------------------------------------------
test_that("tcplfit2_fun works", {
  data("mc_test")
  mocked <- mc_test$plot_single_m4id
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") mc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(val = mocked$m4id, flags = TRUE)
  model_vals <- tcplfit2_fun(dat, dat$modl, 1:10)
  expect_true(is.numeric(model_vals))
  expect_equal(length(model_vals[!is.na(model_vals)]), 10)
})


#-------------------------------------------------------------------------------
# Test round_n
#-------------------------------------------------------------------------------
test_that("round_n works", {
  expect_equal(round_n(0.00001),"1.0e-05")
  expect_equal(round_n(0.0001),"1.0e-04")
  expect_equal(round_n(0.001),"0.001")
  expect_equal(round_n(0.01),"0.010")
  expect_equal(round_n(0.1),"0.100")
  expect_equal(round_n(1),"1.000")
  expect_equal(round_n(10),"10.000")
  expect_equal(round_n(100),"100.000")
  expect_equal(round_n(1000),"1.0e+03")
  expect_equal(round_n(10000),"1.0e+04")
  expect_equal(round_n(c(.0001,.0003,.001,.003,.01,.03,.1,.3,1,3,10,30,100,300,1000,3000,10000)),
               c('1.0e-04', '3.0e-04', '0.001', '0.003', '0.010', '0.030', '0.100', '0.300', '1.000', 
                 '3.000', '10.000', '30.000', '100.000', '300.000', '1.0e+03', '3.0e+03', '1.0e+04'))
})


#-------------------------------------------------------------------------------
# Test get_plot_title
#-------------------------------------------------------------------------------
test_that("get_plot_title creates full title for single plot mc", {
  data("mc_test")
  mocked <- mc_test$plot_single_m4id
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") mc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(val = mocked$m4id, flags = TRUE)
  title <- get_plot_title(dat = dat, verbose = FALSE)
  expected_title <- trimws(paste0(dat$dsstox_substance_id, " ", dat$chnm, "\nSPID:", dat$spid, 
                           "  AEID:", dat$aeid, "  AENM:", dat$aenm, "\nM4ID:", dat$m4id, 
                           "\nHITC:", format(round(dat$hitc, 3), nsmall = 3)))
  expect_equal(title, expected_title)
  title <- get_plot_title(dat = dat, verbose = TRUE)
  expected_title <- trimws(paste0(dat$dsstox_substance_id, " ", dat$chnm, "\nSPID:", dat$spid, 
                           "  AEID:", dat$aeid, "  AENM:", dat$aenm, "\nM4ID:", dat$m4id))
  expect_equal(title, expected_title)
})

test_that("get_plot_title creates full title for aeid compare plot mc", {
  data("mc_test")
  mocked <- mc_test$plot_multiple_m4id
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") mc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(val = mocked$m4id, flags = TRUE)
  title <- get_plot_title(dat = dat, compare = "aeid", verbose = FALSE)
  expected_title <- trimws(paste0("AEID:", unique(dat$aeid), "  AENM:", unique(dat$aenm)))
  expect_equal(title, expected_title)
  title <- get_plot_title(dat = dat, compare = "aeid", verbose = TRUE)
  expect_equal(title, expected_title)
})

test_that("get_plot_title creates full title for chem compare plot mc", {
  data("mc_test")
  mocked <- mc_test$plot_multiple_aeid
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") mc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(fld = "aeid", val = mocked$aeid, flags = TRUE)
  dat <- dat[!is.na(chid)]
  dat <- dat[chnm == dat$chnm[1]]
  title <- get_plot_title(dat = dat, compare = "chnm", verbose = FALSE)
  expected_title <- trimws(paste(unique(dat$dsstox_substance_id), unique(dat$chnm)))
  if (lu(dat$spid) == 1) {
    expected_title <- paste0(expected_title, "\nSPID:", unique(dat$spid))
  }
  expect_equal(title, expected_title)
  title <- get_plot_title(dat = dat, compare = "chnm", verbose = TRUE)
  expect_equal(title, expected_title)
})

test_that("get_plot_title creates full title for other compare plot mc", {
  data("mc_test")
  mocked <- mc_test$plot_multiple_aeid
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") mc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(fld = "aeid", val = mocked$aeid, flags = TRUE)
  title <- get_plot_title(dat = dat, compare = "normalized_data_type", verbose = FALSE)
  expected_title <- trimws(paste0("normalized_data_type: ", unique(dat$normalized_data_type)))
  expect_equal(title, expected_title)
  title <- get_plot_title(dat = dat, compare = "normalized_data_type", verbose = TRUE)
  expect_equal(title, expected_title)
  # length of 2 compare
  title <- get_plot_title(dat = dat, compare = c("normalized_data_type", "conc_unit"), verbose = FALSE)
  expected_title <- trimws(paste0("normalized_data_type: ", unique(dat$normalized_data_type),
                                  "; conc_unit: ", unique(dat$conc_unit)))
  expect_equal(title, expected_title)
})

test_that("get_plot_title creates full title for single plot sc", {
  data("sc_test")
  mocked <- sc_test$plot_single_s2id
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") sc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(type = "sc", fld = "s2id", val = mocked$s2id)
  title <- get_plot_title(dat = dat, type = "sc", verbose = FALSE)
  expected_title <- trimws(paste0(dat$dsstox_substance_id, " ", dat$chnm, "\nSPID:", dat$spid, 
                                  "  AEID:", dat$aeid, "  AENM:", dat$aenm, "\nS2ID:", dat$s2id, 
                                  "\nHITC:", format(round(dat$hitc, 3), nsmall = 3)))
  expect_equal(title, expected_title)
  title <- get_plot_title(dat = dat, type = "sc", verbose = TRUE)
  expected_title <- trimws(paste0(dat$dsstox_substance_id, " ", dat$chnm, "\nSPID:", dat$spid, 
                                  "  AEID:", dat$aeid, "  AENM:", dat$aenm, "\nS2ID:", dat$s2id))
  expect_equal(title, expected_title)
})

test_that("get_plot_title creates full title for aeid compare plot sc", {
  data("sc_test")
  mocked <- sc_test$plot_multiple_s2id
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") sc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(type = "sc", fld = "s2id", val = mocked$s2id)
  title <- get_plot_title(dat = dat, type = "sc", compare = "aeid", verbose = FALSE)
  expected_title <- trimws(paste0("AEID:", unique(dat$aeid), "  AENM:", unique(dat$aenm)))
  expect_equal(title, expected_title)
  title <- get_plot_title(dat = dat, type = "sc", compare = "aeid", verbose = TRUE)
  expect_equal(title, expected_title)
})

test_that("get_plot_title creates full title for chem compare plot sc", {
  data("sc_test")
  mocked <- sc_test$plot_multiple_aeid
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") sc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(type = "sc", fld = "aeid", val = mocked$aeid)
  dat <- dat[!is.na(chid)]
  dat <- dat[chnm == dat$chnm[1]]
  title <- get_plot_title(dat = dat, type = "sc", compare = "chnm", verbose = FALSE)
  expected_title <- trimws(paste(unique(dat$dsstox_substance_id), unique(dat$chnm)))
  if (lu(dat$spid) == 1) {
    expected_title <- paste0(expected_title, "\nSPID:", unique(dat$spid))
  }
  expect_equal(title, expected_title)
  title <- get_plot_title(dat = dat, type = "sc", compare = "chnm", verbose = TRUE)
  expect_equal(title, expected_title)
})

test_that("get_plot_title creates full title for other compare plot sc", {
  data("sc_test")
  mocked <- sc_test$plot_multiple_aeid
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") sc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(type = "sc", fld = "aeid", val = mocked$aeid)
  title <- get_plot_title(dat = dat, type = "sc", compare = "normalized_data_type", verbose = FALSE)
  expected_title <- trimws(paste0("normalized_data_type: ", unique(dat$normalized_data_type)))
  expect_equal(title, expected_title)
  title <- get_plot_title(dat = dat, type = "sc", compare = "normalized_data_type", verbose = TRUE)
  expect_equal(title, expected_title)
  # length of 2 compare
  title <- get_plot_title(dat = dat, compare = c("normalized_data_type", "conc_unit"), verbose = FALSE)
  expected_title <- trimws(paste0("normalized_data_type: ", unique(dat$normalized_data_type),
                                  "; conc_unit: ", unique(dat$conc_unit)))
  expect_equal(title, expected_title)
})


#-------------------------------------------------------------------------------
# Test get_plot_caption
#-------------------------------------------------------------------------------
test_that("get_plot_caption returns list of flags for a single plot", {
  data("mc_test")
  mocked <- mc_test$plot_single_m4id
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") mc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(val = mocked$m4id, flags = TRUE)
  caption <- get_plot_caption(dat)
  expected_caption <- paste0("\nFlags(", dat$flag_count, "): ", dat$flag)
  expect_equal(caption, expected_caption)
})

test_that("get_plot_caption returns list of flags for a compare plot", {
  data("mc_test")
  mocked <- mc_test$plot_multiple_aeid
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") mc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(fld = "aeid", val = mocked$aeid, flags = TRUE)
  dat$index <- MORELETTERS(1:nrow(dat))
  caption <- get_plot_caption(dat)
  expect_true(stringr::str_detect(caption, "^Flags:\n.*\\|.*"))
  expect_true(all(stringr::str_detect(caption, as.character(dat$flag_count))))
  expect_true(all(stringr::str_detect(caption, dat$flag)))
})


#-------------------------------------------------------------------------------
# Test dynamic_table_trunc
#-------------------------------------------------------------------------------
test_that("dynamic_table_trunc works", {
  all_cols <- c("index","m4id","dsstox_substance_id","chnm","spid","aeid","aenm","color")
  tbl <- data.table(index = LETTERS[1:4], 
                    m4id = c(8353147, 8353148, 8353576, 8353577),
                    dsstox_substance_id = c('DTXSID8031077', 'DTXSID00872663', 'DTXSID8031077', 'DTXSID00872663'),
                    chnm = c("A Chemical Name", "A Longer Chemical Name", "A Much Longer Chemical Name That is Too Long", 
                             "An Even Longer Chemical Name Which Will Not Survive Truncation No Matter What"),
                    spid = c("A Sample Id", "A Longer Sample Id", "A Slightly Long Sample Id", 
                             "A Sample Id So Long It Can't Survive Truncation"),
                    aeid = c(2649, 2649, 2652, 2652),
                    aenm = c("An Assay Endpoint Name", "A Longer Assay Endpoint Name", "A Significantly Longer Assay Endpoint Name", 
                             "An Assay Endpoint Name So Long It Exceeds The 40 Character Limit But Fits When Chem/Spid Are Removed"),
                    color = c('#455BCDFF', '#39A4FBFF', '#19E3BAFF', '#71FE5FFF'))
  truncated <- dynamic_table_trunc(copy(tbl), all_cols)
  expect_true(is.data.table(truncated))
  expect_equal(str_detect(truncated$chnm,"[...]"), c(F,F,T,T))
  expect_equal(str_detect(truncated$spid,"[...]"), c(F,F,T,T))
  expect_equal(str_detect(truncated$aenm,"[...]"), c(F,F,T,T))
  truncated <- dynamic_table_trunc(tbl[,-c("aeid","aenm")], all_cols) # removed when all are the same endpoint
  expect_true(is.data.table(truncated))
  expect_equal(str_detect(truncated$chnm,"[...]"), c(F,F,F,T))
  expect_equal(str_detect(truncated$spid,"[...]"), c(F,F,F,T))
  truncated <- dynamic_table_trunc(tbl[,-c("dsstox_substance_id","chnm")], all_cols) # removed when all are the same chemical
  expect_true(is.data.table(truncated))
  expect_equal(str_detect(truncated$spid,"[...]"), c(F,F,F,T))
  expect_equal(str_detect(truncated$aenm,"[...]"), c(F,F,F,T))
  truncated <- dynamic_table_trunc(tbl[,-c("dsstox_substance_id","chnm","spid")], all_cols) # removed when all are the same chemical/spid
  expect_true(is.data.table(truncated))
  expect_equal(str_detect(truncated$aenm,"[...]"), c(F,F,F,F))
  colnames(tbl)[2] <- all_cols[2] <- "s2id" # sc test
  truncated <- dynamic_table_trunc(copy(tbl), all_cols)
  expect_true(is.data.table(truncated))
  expect_equal(str_detect(truncated$chnm,"[...]"), c(F,F,T,T))
  expect_equal(str_detect(truncated$spid,"[...]"), c(F,F,T,T))
  expect_equal(str_detect(truncated$aenm,"[...]"), c(F,F,T,T))
})


#-------------------------------------------------------------------------------
# Test get_verbose_tables
#-------------------------------------------------------------------------------
test_that("get_verbose_tables returns two tables small compare mc", {
  data("mc_test")
  mocked <- mc_test$plot_multiple_aeid
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") mc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(fld = "aeid", val = mocked$aeid, flags = TRUE)
  dat$index <- MORELETTERS(1:nrow(dat))
  dat$color <- viridis::viridis(nrow(dat), begin = 0.1, end = 0.9, option = "turbo")
  expect_no_error(tbls <- get_verbose_tables(dat = dat, compare = "normalized_data_type", flags = TRUE))
  expect_length(tbls, 2)
  expect_true(gtable::is.gtable(tbls[[1]]))
  expect_true(gtable::is.gtable(tbls[[2]]))
  expect_no_error(tbls <- get_verbose_tables(dat = dat, compare = "normalized_data_type", flags = FALSE))
  expect_length(tbls, 2)
  expect_true(gtable::is.gtable(tbls[[1]]))
  expect_true(gtable::is.gtable(tbls[[2]]))
})

test_that("get_verbose_tables returns two tables large compare mc", {
  data("mc_test")
  mocked <- mc_test$plot_multiple_aeid_compare
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") mc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(fld = "aeid", val = mocked$aeid, flags = TRUE)
  dat$index <- MORELETTERS(1:nrow(dat))
  dat$color <- viridis::viridis(nrow(dat), begin = 0.1, end = 0.9, option = "turbo")
  expect_no_error(tbls <- get_verbose_tables(dat = dat, compare = "normalized_data_type", flags = TRUE))
  expect_length(tbls, 2)
  expect_true(gtable::is.gtable(tbls[[1]]))
  expect_true(gtable::is.gtable(tbls[[2]]))
  expect_no_error(tbls <- get_verbose_tables(dat = dat, compare = "normalized_data_type", flags = FALSE))
  expect_length(tbls, 2)
  expect_true(gtable::is.gtable(tbls[[1]]))
  expect_true(gtable::is.gtable(tbls[[2]]))
})

test_that("get_verbose_tables returns two tables small compare sc", {
  data("sc_test")
  mocked <- sc_test$plot_multiple_aeid
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") sc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(type = "sc", fld = "aeid", val = mocked$aeid)
  dat$index <- MORELETTERS(1:nrow(dat))
  dat$color <- viridis::viridis(nrow(dat), begin = 0.1, end = 0.9, option = "turbo")
  expect_no_error(tbls <- get_verbose_tables(dat = dat, type = "sc", compare = "normalized_data_type"))
  expect_length(tbls, 2)
  expect_true(gtable::is.gtable(tbls[[1]]))
  expect_true(gtable::is.gtable(tbls[[2]]))
})

test_that("get_verbose_tables returns two tables large compare sc", {
  data("sc_test")
  mocked <- sc_test$plot_multiple_aeid_compare
  local_mocked_bindings(
    tcplQuery = function(query, db, tbl) {
      if (query == "SHOW VARIABLES LIKE 'max_allowed_packet'") sc_test$tcplConfQuery
      else mocked[query][[1]]
    }
  )
  tcplConf(drvr = "MySQL", db = "invitrodb") # must include both
  dat <- tcplPlotLoadData(type = "sc", fld = "aeid", val = mocked$aeid)
  dat$index <- MORELETTERS(1:nrow(dat))
  dat$color <- viridis::viridis(nrow(dat), begin = 0.1, end = 0.9, option = "turbo")
  expect_no_error(tbls <- get_verbose_tables(dat = dat, type = "sc", compare = "normalized_data_type"))
  expect_length(tbls, 2)
  expect_true(gtable::is.gtable(tbls[[1]]))
  expect_true(gtable::is.gtable(tbls[[2]]))
})

Try the tcpl package in your browser

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

tcpl documentation built on June 8, 2025, 11:41 a.m.