tests/testthat/test-parse.R

test_that("data parser preserves genuine missing values", {
  csv <- paste(
    c(
      "indicator_id;snapshot_id;period;value",
      "X1;;20200101;1.5",
      "X1;;20200102;"
    ),
    collapse = "\r\n"
  )

  data <- aradR:::arad_parse_data_response(charToRaw(csv), encoding = "UTF-8")

  expect_equal(nrow(data), 2L)
  expect_equal(data$value[[1]], 1.5)
  expect_true(is.na(data$value[[2]]))
  expect_s3_class(data$period, "Date")
})

test_that("parser accepts raw responses carrying request diagnostics", {
  raw <- charToRaw(paste(
    c(
      "indicator_id;snapshot_id;period;value",
      "X1;;20200101;1.5"
    ),
    collapse = "\r\n"
  ))
  attr(raw, "arad_cache_hit") <- FALSE

  data <- aradR:::arad_parse_data_response(raw, encoding = "UTF-8")

  expect_equal(nrow(data), 1L)
  expect_equal(data$value[[1]], 1.5)
  expect_false(isTRUE(attr(raw, "arad_cache_hit")))
})

test_that("identical duplicate observations are collapsed", {
  csv <- paste(
    c(
      "indicator_id;snapshot_id;period;value",
      "X1;;20200101;1.5",
      "X1;;20200101;1.5",
      "X1;;20200102;"
    ),
    collapse = "\r\n"
  )

  data <- aradR:::arad_parse_data_response(charToRaw(csv), encoding = "UTF-8")

  expect_equal(nrow(data), 2L)
  expect_equal(data$period, as.Date(c("2020-01-01", "2020-01-02")))
  expect_equal(data$value[[1]], 1.5)
  expect_true(is.na(data$value[[2]]))
})

test_that("non-missing invalid numeric values fail loudly", {
  csv <- paste(
    c(
      "indicator_id;snapshot_id;period;value",
      "X1;;20200101;not-a-number"
    ),
    collapse = "\r\n"
  )

  expect_error(
    aradR:::arad_parse_data_response(charToRaw(csv), encoding = "UTF-8"),
    class = "arad_parse_error"
  )
})

test_that("invalid periods and conflicting duplicate observation keys fail loudly", {
  bad_date <- paste(
    c(
      "indicator_id;snapshot_id;period;value",
      "X1;;20201340;1"
    ),
    collapse = "\r\n"
  )
  expect_error(
    aradR:::arad_parse_data_response(charToRaw(bad_date), encoding = "UTF-8"),
    class = "arad_parse_error"
  )

  duplicate <- paste(
    c(
      "indicator_id;snapshot_id;period;value",
      "X1;;20200101;1",
      "X1;;20200101;2"
    ),
    collapse = "\r\n"
  )
  expect_error(
    aradR:::arad_parse_data_response(charToRaw(duplicate), encoding = "UTF-8"),
    class = "arad_integrity_error"
  )
})

test_that("updates parser exposes typed date boundaries", {
  csv <- paste(
    c(
      "indicator_id;snapshot_id;update_date;data_from;data_to",
      "X1;;20260824153045;19930131;20260731"
    ),
    collapse = "\r\n"
  )

  updates <- aradR:::arad_parse_updates_response(charToRaw(csv), encoding = "UTF-8")
  expect_identical(updates$data_from[[1]], as.Date("1993-01-31"))
  expect_identical(updates$data_to[[1]], as.Date("2026-07-31"))
  expect_s3_class(updates$update_date, "POSIXct")
})

Try the aradR package in your browser

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

aradR documentation built on Oct. 15, 2026, 5:08 p.m.