From 2a78940c7b6b1779cc5e17146c87aae03fe2b95d Mon Sep 17 00:00:00 2001 From: mitokic Date: Tue, 4 Aug 2026 02:21:12 +0100 Subject: [PATCH 1/2] test: cover check_input_data validation error branches Add focused testthat coverage for previously untested check_input_data validation branches: missing combo/target/external-regressor columns, non-numeric target, missing and non-date-formatted Date column, uneven day-of-month spacing for month data (and week bypass), fiscal_year_start range, and duplicate combo-Date rows. --- tests/testthat/test-input_checks.R | 193 +++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) diff --git a/tests/testthat/test-input_checks.R b/tests/testthat/test-input_checks.R index cfa0539d..bbc99af0 100644 --- a/tests/testthat/test-input_checks.R +++ b/tests/testthat/test-input_checks.R @@ -142,6 +142,199 @@ test_that("check_input_data rejects date-formatted combo variable", { ) }) +# * Missing combo / target / external regressor columns ---- + +test_that("check_input_data rejects combo variables missing from input data", { + expect_error( + check_input_data( + input_data = valid_data, + combo_variables = c("missing_combo"), + target_variable = "value", + external_regressors = NULL, + date_type = "month", + fiscal_year_start = 1, + parallel_processing = NULL + ), + "combo variables do not match column headers.*Missing columns: missing_combo" + ) +}) + +test_that("check_input_data rejects a target variable missing from input data", { + expect_error( + check_input_data( + input_data = valid_data, + combo_variables = c("id"), + target_variable = "missing_target", + external_regressors = NULL, + date_type = "month", + fiscal_year_start = 1, + parallel_processing = NULL + ), + "target variable 'missing_target' does not match a column header" + ) +}) + +test_that("check_input_data rejects external regressors missing from input data", { + expect_error( + check_input_data( + input_data = valid_data, + combo_variables = c("id"), + target_variable = "value", + external_regressors = c("missing_xreg"), + date_type = "month", + fiscal_year_start = 1, + parallel_processing = NULL + ), + "external regressors do not match column headers.*Missing columns: missing_xreg" + ) +}) + +# * Non-numeric target variable ---- + +test_that("check_input_data rejects a non-numeric target variable", { + data_char_target <- valid_data + data_char_target$value <- as.character(data_char_target$value) + expect_error( + check_input_data( + input_data = data_char_target, + combo_variables = c("id"), + target_variable = "value", + external_regressors = NULL, + date_type = "month", + fiscal_year_start = 1, + parallel_processing = NULL + ), + "Target variable in input data needs to be numeric" + ) +}) + +# * Date column presence and formatting ---- + +test_that("check_input_data requires a column named 'Date'", { + data_no_date <- valid_data + names(data_no_date)[names(data_no_date) == "Date"] <- "when" + expect_error( + check_input_data( + input_data = data_no_date, + combo_variables = c("id"), + target_variable = "value", + external_regressors = NULL, + date_type = "month", + fiscal_year_start = 1, + parallel_processing = NULL + ), + "date column in input data needs to be named as 'Date'" + ) +}) + +test_that("check_input_data requires the 'Date' column to be date-formatted", { + data_bad_date <- valid_data + data_bad_date$Date <- as.character(data_bad_date$Date) + expect_error( + check_input_data( + input_data = data_bad_date, + combo_variables = c("id"), + target_variable = "value", + external_regressors = NULL, + date_type = "month", + fiscal_year_start = 1, + parallel_processing = NULL + ), + "date column in input data needs to be formatted as a date value" + ) +}) + +# * Even day-of-month spacing for month/quarter/year data ---- + +test_that("check_input_data rejects uneven day-of-month spacing for month data", { + data_uneven <- valid_data + data_uneven$Date <- as.Date(c( + "2020-01-01", "2020-02-02", "2020-03-03", "2020-04-04", + "2020-05-05", "2020-06-06", "2020-07-07", "2020-08-08", + "2020-09-09", "2020-10-10", "2020-11-11", "2020-12-12" + )) + expect_error( + check_input_data( + input_data = data_uneven, + combo_variables = c("id"), + target_variable = "value", + external_regressors = NULL, + date_type = "month", + fiscal_year_start = 1, + parallel_processing = NULL + ), + "historical date values are not evenly spaced.*day of the month" + ) +}) + +test_that("check_input_data does not apply day-of-month spacing check to week data", { + data_uneven <- valid_data + data_uneven$Date <- as.Date(c( + "2020-01-01", "2020-02-02", "2020-03-03", "2020-04-04", + "2020-05-05", "2020-06-06", "2020-07-07", "2020-08-08", + "2020-09-09", "2020-10-10", "2020-11-11", "2020-12-12" + )) + expect_no_error( + check_input_data( + input_data = data_uneven, + combo_variables = c("id"), + target_variable = "value", + external_regressors = NULL, + date_type = "week", + fiscal_year_start = 1, + parallel_processing = NULL + ) + ) +}) + +# * fiscal_year_start range ---- + +test_that("check_input_data rejects fiscal_year_start outside 1-12", { + expect_error( + check_input_data( + input_data = valid_data, + combo_variables = c("id"), + target_variable = "value", + external_regressors = NULL, + date_type = "month", + fiscal_year_start = 13, + parallel_processing = NULL + ), + "fiscal year start should be a number from 1 to 12" + ) + + expect_error( + check_input_data( + input_data = valid_data, + combo_variables = c("id"), + target_variable = "value", + external_regressors = NULL, + date_type = "month", + fiscal_year_start = 0, + parallel_processing = NULL + ), + "fiscal year start should be a number from 1 to 12" + ) +}) + +# * Duplicate combo-Date rows ---- + +test_that("check_input_data rejects duplicate combo-Date rows", { + data_dup <- rbind(valid_data, valid_data[1, ]) + expect_error( + check_input_data( + input_data = data_dup, + combo_variables = c("id"), + target_variable = "value", + external_regressors = NULL, + date_type = "month", + fiscal_year_start = 1, + parallel_processing = NULL + ), + "duplicate rows have been detected in the input data" + ) +}) + # * Test set_run_info input change detection ---- test_that("set_run_info error lists changed inputs", { From 5d4b383209410b732d09bdda66a0ed4bd8e6e5c9 Mon Sep 17 00:00:00 2001 From: Mike Tokic Date: Mon, 3 Aug 2026 18:41:06 -0700 Subject: [PATCH 2/2] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- tests/testthat/test-input_checks.R | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/testthat/test-input_checks.R b/tests/testthat/test-input_checks.R index bbc99af0..4e07cb7e 100644 --- a/tests/testthat/test-input_checks.R +++ b/tests/testthat/test-input_checks.R @@ -269,11 +269,7 @@ test_that("check_input_data rejects uneven day-of-month spacing for month data", test_that("check_input_data does not apply day-of-month spacing check to week data", { data_uneven <- valid_data - data_uneven$Date <- as.Date(c( - "2020-01-01", "2020-02-02", "2020-03-03", "2020-04-04", - "2020-05-05", "2020-06-06", "2020-07-07", "2020-08-08", - "2020-09-09", "2020-10-10", "2020-11-11", "2020-12-12" - )) + data_uneven$Date <- seq.Date(as.Date("2020-01-01"), by = "week", length.out = 12) expect_no_error( check_input_data( input_data = data_uneven,