tests/testthat/test-group_by.R

library(dplyr)
library(dtrackr)

graphContains = function(g, .strata, .message) {
  return(g$nodes %>% filter(.strata==.strata, .label %>% stringr::str_detect(paste0("(^|>)",stringr::fixed(.message),"<"))) %>% nrow() > 0)
}

graphContainsExactly = function(g, .strata, .message, .count) {
  return(g$nodes %>% filter(.strata==.strata, .label %>% stringr::str_detect(paste0("(^|>)",stringr::fixed(.message),"<"))) %>% nrow() == .count)
}


test_that("group by works", {

  # expect_silent({
  iris %>%
    dtrackr::track() %>%
    group_by(Species) %>%
    summarise(across(ends_with("Width"), mean), .messages = "sepals: {Sepal.Width}; petals: {Petal.Width}") %>%
    dtrackr::flowchart()
  # })

  expect_error({
    iris %>%
      dtrackr::track() %>%
      group_by(NotPresent) %>%
      summarise(across(ends_with("Width"), mean )) %>%
      dtrackr::flowchart()
  },regexp = "Must group by variables found in `.data`")

  expect_message({
    opt = options(dtrackr.verbose=TRUE)
    iris %>%
      dtrackr::track() %>%
      group_by(across(ends_with("Length"))) %>%
      summarise(across(ends_with("Width"), mean )) %>%
      dtrackr::comment("test") %>%
      dtrackr::flowchart()
    options(opt)
  },regexp = "This group_by\\(\\) has created more than the maximum number of supported groupings")
})

test_that("group by not nested structure ok", {

  # Check graph grouping
  tmp = ggplot2::diamonds %>%
    dtrackr::track() %>%
    group_by(cut) %>%
    comment("test_comment_1")

  expect_true({
    tmp %>%
      dtrackr::p_get() %>%
      graphContainsExactly(.message = "stratify by cut",.count = 1)
  })

  expect_true({
    tmp %>%
      dtrackr::p_get() %>%
      graphContainsExactly(.message = "test_comment_1", .count = 5)
  })

  # Check graph grouping - second level not nested
  tmp2 = tmp %>%
    group_by(color) %>%
    comment("test_comment_2")

  expect_true({
    tmp2 %>%
      dtrackr::p_get() %>%
      graphContainsExactly(.message = "stratify by color",.count = 1)
  })

  expect_true({
    tmp2 %>%
      dtrackr::p_get() %>%
      graphContainsExactly(.message = "test_comment_2", .count = 7)
  })

})


test_that("group by nested structure ok", {

  tmp = iris %>%
    mutate(longer = Petal.Length > mean(Petal.Length)) %>%
    dtrackr::track() %>%
    group_by(Species) %>%
    comment("test_comment_1") %>%
    group_by(longer,.add = TRUE) %>%
    comment("test_comment_2")

  expect_true({
    tmp %>%
      dtrackr::p_get() %>%
      graphContainsExactly(.message = "stratify by Species",.count = 1)
  })

  # this shoudl not appear due to the .add in the group by.
  expect_true({
    tmp %>%
      dtrackr::p_get() %>%
      graphContainsExactly(.message = "stratify by longer",.count = 0)
  })

  expect_true({
    tmp %>%
      dtrackr::p_get() %>%
      graphContainsExactly(.message = "stratify by Species, longer",.count = 3)
  })

  expect_true({
    tmp %>%
      dtrackr::p_get() %>%
      graphContainsExactly(.message = "test_comment_1", .count = 3)
  })

  # Not all combinations are present hence this is 4 not 6.
  expect_true({
    tmp %>%
      dtrackr::p_get() %>%
      graphContainsExactly(.message = "test_comment_2", .count = 4)
  })

})

# test_that("filtering works", {
#
#   library(tidyverse)
#
#   expect_silent({
#     iris %>%
#       dtrackr::track() %>%
#       dtrackr::filter(across(ends_with("Width"), ~ .x < 3 )) %>%
#       dtrackr::flowchart()
#   })
#
#
# })
terminological/dtrackr documentation built on Oct. 20, 2024, 6:11 a.m.