tests/testthat/test-total.R

# Tests for total emissions aggregation (calc_total_emissions)

test_that("calc_total_emissions aggregates correctly with standard fields", {
  e1 <- list(source = "enteric", co2eq_kg = 1000)
  e2 <- list(source = "manure", co2eq_kg = 500)
  e3 <- list(source = "soil", co2eq_kg = 300)

  result <- calc_total_emissions(e1, e2, e3)

  expect_s3_class(result, "cf_total")
  expect_equal(result$total_co2eq, 1800)
  expect_equal(result$n_sources, 3)
})

test_that("calc_total_emissions supports alternative CO2eq field names", {
  e1 <- list(source = "enteric", co2eq_kg = 1000)
  e2 <- list(source = "manure", total_co2eq_kg = 500)
  e3 <- list(source = "soil", total_co2eq = 300)

  result <- calc_total_emissions(e1, e2, e3)

  expect_s3_class(result, "cf_total")
  expect_equal(result$total_co2eq, 1800)
})

test_that("calc_total_emissions is monotonic (increasing one source increases total)", {
  base <- calc_total_emissions(
    list(source = "enteric", co2eq_kg = 1000),
    list(source = "manure", co2eq_kg = 500)
  )

  more <- calc_total_emissions(
    list(source = "enteric", co2eq_kg = 1100),
    list(source = "manure", co2eq_kg = 500)
  )

  expect_gt(more$total_co2eq, base$total_co2eq)
})

test_that("calc_total_emissions errors on invalid input (specific message)", {
  expect_error(
    calc_total_emissions(),
    regexp = "at least|no sources|missing",
    ignore.case = TRUE
  )

  expect_error(
    calc_total_emissions("not a list"),
    regexp = "list|cf_|source|invalid",
    ignore.case = TRUE
  )
})

Try the cowfootR package in your browser

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

cowfootR documentation built on Jan. 13, 2026, 5:07 p.m.