test_that( "amr_trend calculates monthly trends", { dat <- data.frame( date = as.Date(c( "2025-01-05", "2025-01-15", "2025-02-05", "2025-02-15", "2025-03-05" )), AMP = c( "R", "S", "R", "R", "S" ) ) result <- amr_trend( data = dat, date = date, outcome = AMP ) expect_s3_class( result, "data.frame" ) expect_equal( result$time, c( "2025-01", "2025-02", "2025-03" ) ) expect_equal( result$tested, c(2, 2, 1) ) expect_equal( result$resistant, c(1, 2, 0) ) expect_equal( result$resistance_percent, c(50, 100, 0) ) } ) test_that( "amr_trend supports quarterly aggregation", { dat <- data.frame( date = as.Date(c( "2025-01-01", "2025-02-01", "2025-04-01", "2025-07-01" )), AMP = c( "R", "S", "R", "S" ) ) result <- amr_trend( data = dat, date = date, outcome = AMP, period = "quarter" ) expect_equal( result$time, c( "2025-Q1", "2025-Q2", "2025-Q3" ) ) expect_equal( result$tested, c(2, 1, 1) ) } ) test_that( "amr_trend supports annual aggregation", { dat <- data.frame( date = as.Date(c( "2024-01-01", "2024-06-01", "2025-01-01" )), AMP = c( "R", "S", "R" ) ) result <- amr_trend( data = dat, date = date, outcome = AMP, period = "year" ) expect_equal( result$time, c( "2024", "2025" ) ) expect_equal( result$tested, c(2, 1) ) } ) test_that( "amr_trend removes missing outcomes", { dat <- data.frame( date = as.Date(c( "2025-01-01", "2025-01-02", "2025-02-01" )), AMP = c( "R", NA, "S" ) ) result <- amr_trend( data = dat, date = date, outcome = AMP ) expect_equal( result$tested, c(1, 1) ) expect_equal( result$resistant, c(1, 0) ) } ) test_that( "amr_trend rejects invalid period", { dat <- data.frame( date = as.Date("2025-01-01"), AMP = "R" ) expect_error( amr_trend( data = dat, date = date, outcome = AMP, period = "week" ) ) } ) test_that( "amr_trend rejects missing columns", { dat <- data.frame( date = as.Date("2025-01-01"), AMP = "R" ) expect_error( amr_trend( data = dat, date = wrong_date, outcome = AMP ), "Date column" ) expect_error( amr_trend( data = dat, date = date, outcome = wrong_outcome ), "Outcome column" ) } ) test_that( "amr_trend rejects invalid dates", { dat <- data.frame( date = c( "not-a-date", "2025-01-01" ), AMP = c( "R", "S" ) ) expect_error( amr_trend( data = dat, date = date, outcome = AMP ), "invalid or missing dates" ) } )