tests/testthat/test-owid_get.R

test_that("owid_get basic functionality works", {
  skip_if_offline()

  result <- owid_get("life-expectancy")
  expect_true(is.data.frame(result))
  expect_true("entity_id" %in% names(result))
  expect_true(any(grepl("year|date", names(result))))
  expect_true(nrow(result) > 0)
})

test_that("owid_get filters entities correctly", {
  skip_if_offline()

  entities <- c("USA", "DEU")
  result <- owid_get("life-expectancy", entities = entities)
  expect_true(is.data.frame(result))
  expect_true(all(unique(result$entity_id) %in% entities))
})

test_that("owid_get filters dates correctly", {
  skip_if_offline()

  start_year <- 1960
  end_year <- 1965
  result <- owid_get(
    "life-expectancy",
    entities = "USA",
    start_date = start_year,
    end_date = end_year
  )
  expect_true(is.data.frame(result))
  expect_true(all(result$year >= start_year & result$year <= end_year))

  start_date <- "2020-12-28"
  end_date <- "2020-12-31"
  result <- owid_get(
    "daily-covid-vaccination-doses-per-capita",
    entities = "DEU",
    start_date = start_date,
    end_date = end_date
  )
  expect_true(is.data.frame(result))
  expect_true(
    all(
      as.Date(result$day) >= as.Date(start_date) &
        as.Date(result$day) <= as.Date(end_date)
    )
  )
})


test_that("owid_get handles URLs directly", {
  skip_if_offline()

  url <- "https://ourworldindata.org/grapher/civil-liberties-score-fh?tab=chart"
  result <- owid_get(url = url)
  expect_true(is.data.frame(result))
  expect_true(nrow(result) > 0)
})

test_that("owid_get handles column name formatting", {
  skip_if_offline()

  result_uppercase <- owid_get("life-expectancy", snake_case = FALSE)
  expect_true(any(grepl("[A-Z]", names(result_uppercase))))

  result_lowercase <- owid_get("life-expectancy", snake_case = TRUE)
  expect_true(all(grepl("^[a-z]", names(result_lowercase))))
})

test_that("owid_get handles column short names", {
  skip_if_offline()

  result_short <- owid_get("life-expectancy", use_column_short_names = TRUE)

  result_long <- owid_get("life-expectancy", use_column_short_names = FALSE)

  expect_true(is.data.frame(result_short))
  expect_true(is.data.frame(result_long))
})

test_that("owid_get handles errors appropriately", {
  expect_error(owid_get("non-existent-dataset-12345"))

  expect_error(owid_get(url = "https://ourworldindata.org/invalid-url"))
})

test_that("convert_day_columns handles lowercase 'day' column", {
  test_data <- data.frame(
    id = 1:3,
    day = c("2023-01-01", "2023-01-02", "2023-01-03"),
    value = c(10, 20, 30)
  )
  result <- convert_day_columns(test_data)
  expect_true(inherits(result$day, "Date"))
  expect_equal(
    as.character(result$day),
    c("2023-01-01", "2023-01-02", "2023-01-03")
  )
  expect_equal(result$id, test_data$id)
  expect_equal(result$value, test_data$value)
})

test_that("convert_day_columns handles uppercase 'Day' column", {
  test_data <- data.frame(
    id = 1:3,
    Day = c("2023-01-01", "2023-01-02", "2023-01-03"),
    value = c(10, 20, 30)
  )
  result <- convert_day_columns(test_data)
  expect_true(inherits(result$Day, "Date"))
  expect_equal(
    as.character(result$Day),
    c("2023-01-01", "2023-01-02", "2023-01-03")
  )
  expect_equal(result$id, test_data$id)
  expect_equal(result$value, test_data$value)
})

test_that("convert_day_columns handles data without day column", {
  test_data <- data.frame(
    id = 1:3,
    value = c(10, 20, 30)
  )
  result <- convert_day_columns(test_data)
  expect_identical(result, test_data)
})

test_that("convert_day_columns handles different date formats", {
  test_data <- data.frame(
    id = 1:3,
    day = c("2023/01/01", "01/02/2023", "2023-01-03"),
    stringsAsFactors = FALSE
  )
  result <- convert_day_columns(test_data)
  expect_true(inherits(result$day, "Date"))
})

test_that("convert_day_columns preserves row order", {
  test_data <- data.frame(
    id = c(3, 1, 2),
    day = c("2023-01-03", "2023-01-01", "2023-01-02"),
    value = c(30, 10, 20)
  )
  result <- convert_day_columns(test_data)
  expect_equal(result$value, c(30, 10, 20))
  expect_equal(
    as.character(result$day),
    c("2023-01-03", "2023-01-01", "2023-01-02")
  )
})

test_that("convert_day_columns handles empty dataframe", {
  test_data <- data.frame(day = character(0))
  result <- convert_day_columns(test_data)
  expect_true(is.data.frame(result))
  expect_true(inherits(result$day, "Date"))
  expect_equal(nrow(result), 0)
})

Try the owidapi package in your browser

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

owidapi documentation built on April 12, 2025, 2:22 a.m.