tests/testthat/helper-mockdata.R

library(dplyr)
# tests/testthat/helper-mockdata.R

mock_pbs_df <- data.frame(
  activity_id = c("1", "2", "3", "4"),
  activity_date = lubridate::ymd_hms(c("2023-01-01 10:00:00", "2023-01-15 10:00:00", "2023-02-01 10:00:00", "2023-02-15 10:00:00")),
  distance = rep(c(5000, 10000), each = 2),
  time_seconds = c(1500, 1450, 3200, 3100),
  cumulative_pb_seconds = c(1500, 1450, 3200, 3100),
  is_pb = c(TRUE, TRUE, TRUE, TRUE),
  distance_label = factor(rep(c("5k", "10k"), each = 2), levels = c("5k", "10k")),
  stringsAsFactors = FALSE
)

mock_acwr_df <- data.frame(
    date = seq(lubridate::ymd("2023-01-01"), lubridate::ymd("2023-02-10"), by="day"),
    atl = round(runif(41, 30, 70) + sin(seq(0, 4*pi, length.out=41))*10, 1),
    ctl = round(runif(41, 40, 60) + sin(seq(0, 2*pi, length.out=41))*5, 1)
) %>%
  dplyr::mutate(
    ctl_safe = ifelse(ctl <= 0, 1, ctl),
    acwr = round(atl / ctl_safe, 2),
    acwr_smooth = acwr 
  ) %>%
  dplyr::select(date, atl, ctl, acwr, acwr_smooth) 

latlng_list <- lapply(1:3601, function(i) c(runif(1, 40, 41), runif(1, -75, -74)))

mock_activity_streams <- data.frame(
  time = seq(0, 3600, by = 1),
  latlng = I(latlng_list),
  distance = seq(0, 10000, length.out = 3601),
  altitude = rnorm(3601, 100, 10),
  velocity_smooth = rnorm(3601, 3, 0.5),
  heartrate = round(runif(3601, 130, 170) + sin(seq(0, 4 * pi, length.out = 3601)) * 10),
  cadence = round(runif(3601, 85, 95)),
  watts = round(runif(3601, 150, 250) + sin(seq(0, 2 * pi, length.out = 3601)) * 20),
  grade_smooth = rnorm(3601, 0, 1),
  moving = sample(c(TRUE, FALSE), 3601, replace = TRUE, prob = c(0.95, 0.05)),
  temp = rnorm(3601, 20, 3)
)

mock_ef_df <- data.frame(
  activity_id = c("1", "2", "3", "4", "5"),
  date = lubridate::ymd(c("2023-01-01", "2023-01-15", "2023-02-01", "2023-02-15", "2023-03-01")),
  activity_type = rep("Run", 5),
  ef_value = round(rnorm(5, 1.5, 0.1), 2), 
  ef_metric = rep("Pace_HR", 5),
  stringsAsFactors = FALSE
)

mock_exposure_df <- data.frame(
  date = seq(lubridate::ymd("2023-01-01"), lubridate::ymd("2023-02-10"), by="day"),
  atl = round(runif(41, 30, 70) + sin(seq(0, 4*pi, length.out=41))*10, 1),
  ctl = round(runif(41, 40, 60) + sin(seq(0, 2*pi, length.out=41))*5, 1)
) %>%
  dplyr::mutate(
    ctl_safe = ifelse(ctl <= 0, 1, ctl),
    acwr = round(atl / ctl_safe, 2)
  ) 

mock_activity_list_df <- data.frame(
  id = c(1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010),
  name = paste("Activity", 1:10),
  start_date_local = seq.POSIXt(as.POSIXct("2023-10-01 08:00:00", tz = "UTC"), 
                              by = "-2 days", length.out = 10),
  type = rep(c("Run", "Ride"), length.out = 10),
  distance = c(5050, 20100, 10200, 30500, 8030, 15200, 12100, 40300, 6050, 25400),
  moving_time = c(1800, 3600, 3000, 5400, 2400, 2700, 3300, 7200, 1900, 4500),
  elapsed_time = c(1850, 3700, 3060, 5500, 2450, 2780, 3380, 7350, 1950, 4600),
  total_elevation_gain = c(50, 150, 100, 250, 80, 120, 110, 300, 60, 200),
  average_heartrate = c(150, 140, 155, 145, 152, 142, 158, 148, 151, 141),
  max_heartrate = c(170, 160, 175, 165, 172, 162, 178, 168, 171, 161),
  average_watts = c(NA, 200, NA, 220, NA, 190, NA, 230, NA, 210),
  stringsAsFactors = FALSE
)

mock_activity_list_df$start_date_local <- as.POSIXct(mock_activity_list_df$start_date_local, tz = "UTC")

# Adjust the date of the second "Run" activity (original index 3) to be within the test range
# The test expects two runs between 2023-10-01 and 2023-10-03
# Original dates: 2023-10-01 (Run), 2023-09-29 (Ride), 2023-09-27 (Run)
# Change 2023-09-27 to 2023-10-02 for the second Run
mock_activity_list_df$start_date_local[3] <- as.POSIXct("2023-10-02 09:00:00", tz = "UTC")

mock_activity_list_df$duration_mins <- mock_activity_list_df$elapsed_time / 60
mock_activity_list_df$distance_km <- mock_activity_list_df$distance / 1000

mock_activity_list_df_for_list <- mock_activity_list_df %>%
  dplyr::mutate(start_date_local = format(start_date_local, "%Y-%m-%d %H:%M:%S"))

mock_activity_list_list <- purrr::transpose(mock_activity_list_df_for_list)

Try the Athlytics package in your browser

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

Athlytics documentation built on June 8, 2025, 1:11 p.m.