library(testthat) library(rainerosr) test_that("validate_rainfall_data detects missing columns", { data <- data.frame(time = 1:5, wrong_col = 1:5) result <- validate_rainfall_data(data, "time", "depth") expect_false(result$valid) expect_true(any(grepl("Depth column", result$issues))) }) test_that("validate_rainfall_data detects negative rainfall", { data <- data.frame( time = as.POSIXct(c("2024-01-01 10:00", "2024-01-01 10:15")), depth = c(5, -2) ) result <- validate_rainfall_data(data, "time", "depth") expect_false(result$valid) expect_true(any(grepl("Negative rainfall", result$issues))) }) test_that("validate_rainfall_data detects non-monotonic time", { data <- data.frame( time = as.POSIXct(c("2024-01-01 10:00", "2024-01-01 09:00")), depth = c(5, 3) ) result <- validate_rainfall_data(data, "time", "depth") expect_false(result$valid) expect_true(any(grepl("monotonically", result$issues))) }) test_that("validate_rainfall_data passes valid data", { data <- data.frame( time = as.POSIXct(c("2024-01-01 10:00", "2024-01-01 10:15", "2024-01-01 10:30")), depth = c(5.2, 3.1, 2.8) ) result <- validate_rainfall_data(data, "time", "depth") expect_true(result$valid) expect_length(result$issues, 0) }) test_that("validate_rainfall_data warns on very small rainfall", { data <- data.frame( time = as.POSIXct(c("2024-01-01 10:00", "2024-01-01 10:15")), depth = c(0.3, 0.2) ) result <- validate_rainfall_data(data, "time", "depth") expect_true(any(grepl("less than 1 mm", result$warnings))) })