R/logger_screen_test.R

Defines functions logger_screen_all logger_screen_summary logger_screen_results logger_screen_test

Documented in logger_screen_all logger_screen_results logger_screen_summary logger_screen_test

#' logger_screen_test
#'
#' Test the logger exports against the schema to see if the event name has the correct screen_name
#' @param log_data The output of the logger
#' @param schema The schema
#' @export

logger_screen_test <- function(log_data,schema) {

  require(tidyverse)

  log_data2 <- log_data %>%
    rename(screen_log = screen_name) %>%
    filter(!event_name == 'screen_view')

  schema2 <- schema %>%
    select(firebase_event_name,screen_name) %>%
    rename(screen_schema = screen_name) %>%
    mutate(multiple_locations = str_detect(screen_schema,' / |(multiple)'))

  final_names <- c("app_version", "app_package", "operating_system", "os_version",
                     "device_model", "screen_log", "time", "type", "tracker", "event_name",
                     "app_session_hit_count", "app_session_id", "date",
                     "timestamp", "screen_schema", "multiple_locations", "matching_screen",
                     "pass_ct")

  final <- log_data2 %>%
      left_join(schema2,by=c('event_name'='firebase_event_name')) %>%
      filter(!screen_schema == '(depends on location)') %>%
      mutate(matching_screen = screen_log == screen_schema,
             matching_screen = ifelse(multiple_locations == TRUE & matching_screen == FALSE,screen_log %in% unlist(str_split(screen_schema, ' / ')),matching_screen),
             matching_screen = ifelse(is.na(screen_log),FALSE,matching_screen),
             pass_ct = ifelse(matching_screen == TRUE,1,0)) %>%
      select(all_of(final_names))

  return(final)

}

#' logger_screen_fails
#'
#' Pull out all the failed screen names
#' @param df The data-frame of test results
#' @param test Either 'pass' or 'fail'
#' @export

logger_screen_results <- function(df,test) {

  require(tidyverse)

  match_type = ifelse(test == 'fail',FALSE,TRUE)

  df <- df %>%
    group_by(event_name) %>%
    mutate(pct_passed = sum(pass_ct) / n(),
            tests = n()) %>%
    ungroup() %>%
    filter(matching_screen == match_type) %>%
    select(event_name,screen_schema,screen_log,pct_passed,tests) %>%
    distinct() %>%
    rename(expected_screen = 2,
          actual_screen = 3) %>%
    arrange(event_name,actual_screen)

    return(df)

}

#' logger_screen_summary
#'
#' Get the results for each event
#' @param df The data-frame of test results
#' @param test Pass 'total' if you want the whole set summarized
#' @export

logger_screen_summary <- function(df,test) {

  require(tidyverse)

  df <- df %>%
    group_by(event_name) %>%
    summarize(tests = n(),
              passed = sum(pass_ct),
              failed = tests - passed,
              pct_passed = passed / tests,
              pct_failed = failed / tests) %>%
    ungroup() %>%
    arrange(event_name)

  if (test == 'total') {

    df2 <- df %>%
      summarize(tests = sum(tests),
              passed = sum(passed),
              failed = sum(failed),
              pct_passed = passed / tests,
              pct_failed = failed / tests)

    return(df2)

  } else {

    return(df)

  }

}

#' logger_screen_all
#'
#' Get tall test results in one list
#' @param log_data The output of the logger
#' @param schema The schema
#' @param os The operating system
#' @export

logger_screen_all <- function(log_data,schema,os) {

  require(tidyverse)

  test <- logger_screen_test(log_data,schema,os)

  logger_list <- list()

  logger_list$summary_overall <- logger_screen_summary(test,'total')

  logger_list$summary_events <- logger_screen_summary(test,'events')

  logger_list$tests_failed <- logger_screen_results(test,'fail')

  logger_list$tests_passed <- logger_screen_results(test,'pass')

return(logger_list)

}
neugelb/neugelbtools documentation built on July 7, 2020, 1:17 a.m.