tests/testthat/test-mutates.R

test_that("Test that update_tomic can update a table", {
  expect_equal(
    update_tomic(
      simple_tidy,
      get_tomic_table(simple_tidy, "samples") %>%
        dplyr::mutate(new_entry = LETTERS[1:dplyr::n()])
    )$design$samples %>%
      dim(),
    c(2,2)
  )
})


test_that("center_tomic centers selected variables in a tomic", {

  centered_tomic <- center_tomic(brauer_2008_tidy)

  centered_tomic$data %>%
    dplyr::summarize(mean_val = mean(expression, na.rm = TRUE), .by = "name") %>%
    {abs(.$mean_val)} %>%
    {all(. < 1e-15)} %>%
    expect_true()

  centered_tomic <- center_tomic(brauer_2008_tidy, measurement_vars = "expression")

  centered_tomic$data %>%
    dplyr::summarize(mean_val = mean(expression, na.rm = TRUE), .by = "name") %>%
    {abs(.$mean_val)} %>%
    {all(. < 1e-15)} %>%
    expect_true()

  expect_snapshot(center_tomic(brauer_2008_tidy, measurement_vars = "foo"), error = TRUE)

})


test_that("Sort tables and update primary keys with new sort", {

  sort_triple_hclust(brauer_2008_triple, "samples", "expression") %>%
    expect_snapshot()

  sort_triple_hclust(brauer_2008_triple, "samples", "bar") %>%
    expect_snapshot(error = TRUE)
})

test_that("Sort tomic applies a sort to features and/or samples", {

  expect_equal(tomic_sort_status(brauer_2008_triple), "unsorted")

  sorted_samples <- sort_tomic(
    brauer_2008_triple,
    sort_type = "arrange",
    sort_table = "samples",
    sort_variables = c("nutrient", "DR")
  )

  expect_equal(tomic_sort_status(sorted_samples), "sorted_samples, unsorted features")

  sorted_features <- sort_tomic(
    brauer_2008_tidy,
    sort_type = "hclust",
    sort_table = "features",
    value_var = "expression"
    )

  expect_equal(tomic_sort_status(sorted_features), "sorted features, unsorted samples")

  sorted_features %>%
    sort_tomic(
      sort_type = "arrange",
      sort_table = "samples",
      sort_variables = c("nutrient", "DR")
    ) %>%
    tomic_sort_status() %>%
    expect_equal("fully sorted")
})

test_that("Factor levels can be updated using a list of factor orders", {

  NUTRIENT_ORDER <- c("G", "N", "P", "S", "L", "U")

  reordered_tidy <- update_sample_factors(
    brauer_2008_tidy,
    list(nutrient = NUTRIENT_ORDER)
    )

  expect_equal(levels(reordered_tidy$data$nutrient), NUTRIENT_ORDER)

  # test NA handling
  brauer_samples <- get_tomic_table(brauer_2008_tidy, "samples")
  brauer_samples$nutrient[1:2] <- NA

  brauer_2008_tidy_w_NAs <- update_tomic(
    brauer_2008_tidy,
    brauer_samples
  )

  expect_snapshot(
    brauer_w_mystery_nutrients <- update_sample_factors(
      brauer_2008_tidy_w_NAs,
      list(nutrient = NUTRIENT_ORDER)
    )
  )

  expect_equal(
    levels(brauer_w_mystery_nutrients$data$nutrient),
    c(NUTRIENT_ORDER, "unspecified")
  )

  # W/ unexpected levels

  CONFUSED_NUTRIENT_ORDER <- c("C", "N", "P", "S", "L", "U")

  expect_snapshot(
    reordered_tidy <- update_sample_factors(
      brauer_2008_tidy,
      list(nutrient = CONFUSED_NUTRIENT_ORDER)
    ))

  expect_equal(levels(reordered_tidy$data$nutrient), c(CONFUSED_NUTRIENT_ORDER, "G"))

  # invalid factor specifications

  expect_snapshot(
    update_sample_factors(brauer_2008_tidy, list(nutrient = 1:5)),
    error = TRUE
  )

  expect_snapshot(
    update_sample_factors(brauer_2008_tidy, list(nutrient = c("G", "G", "N", "L"))),
    error = TRUE
  )

  expect_snapshot(
    update_sample_factors(brauer_2008_tidy, list(DR = seq(0.05, 0.3, by = 0.05))),
    error = TRUE
  )

})

test_that("Update tidy omics with new added variables", {

  tidy_omic <- brauer_2008_tidy
  updated_tidy_data <- tidy_omic$data %>%
    dplyr::mutate(new_sample_var = "foo") %>%
    dplyr::select(-DR)

  new_variable_tables <- c("new_sample_var" = "samples")

  tidy_w_updated_samples <- update_tidy_omic(tidy_omic, updated_tidy_data, new_variable_tables)
  expect_equal(
    tidy_w_updated_samples$design$samples$variable,
    c('sample', "nutrient", "new_sample_var")
  )

  expect_snapshot(
    update_tidy_omic(tidy_omic, updated_tidy_data, c()),
    error = TRUE
    )

})
calico/romic documentation built on Sept. 27, 2024, 7:16 p.m.