tests/testthat/test-get_les.R

test_that("LES classic House data", {
  skip_if_offline()

  hr_classic <- get_les("house", les_2 = FALSE)

  # data checks
  expect_s3_class(hr_classic, "tbl_df")
  expect_length(hr_classic, 60)
  expect_equal(nrow(hr_classic), 11158)
  expect_equal(unique(hr_classic$congress), 93:117)
  expect_equal(unique(hr_classic$year), seq(1973, 2021, 2))

  # chamber argument
  expect_equal(hr_classic, get_les("hr", les_2 = FALSE))
})

test_that("LES classic Senate data", {
  skip_if_offline()

  s_classic <- get_les("senate", les_2 = FALSE)

  # data checks
  expect_s3_class(s_classic, "tbl_df")
  expect_length(s_classic, 60)
  expect_equal(nrow(s_classic), 2533)
  expect_equal(unique(s_classic$congress), 93:117)
  expect_equal(unique(s_classic$year), seq(1972, 2020, 2))

  # chamber argument
  expect_equal(s_classic, get_les("s", les_2 = FALSE))
})

test_that("LES 2.0 House data", {
  skip_if_offline()

  hr_2 <- get_les("hr", les_2 = TRUE)

  # data checks
  expect_s3_class(hr_2, "tbl_df")
  expect_length(hr_2, 60)
  expect_equal(nrow(hr_2), 454)
  expect_equal(unique(hr_2$congress), 117)
  expect_equal(unique(hr_2$year), 2021)

  # chamber argument
  expect_equal(hr_2, get_les("h", les_2 = TRUE))
})

test_that("LES 2.0 Senate data", {
  skip_if_offline()

  s_2 <- get_les("sen", les_2 = TRUE)

  # data checks
  expect_s3_class(s_2, "tbl_df")
  expect_length(s_2, 60)
  expect_equal(nrow(s_2), 100)
  expect_equal(unique(s_2$congress), 117)
  expect_equal(unique(s_2$year), 2020)

  # chamber argument
  expect_equal(s_2, get_les("s", les_2 = TRUE))
})

test_that("column types", {
  skip_if_offline()

  # Senate, LES Classic
  s_1 <- get_les("s", les_2 = FALSE)
  expect_s3_class(s_1, "tbl_df")
  expect_length(s_1, 60)
  expect_equal(nrow(s_1), 2533)
  expect_length(dplyr::select(s_1, dplyr::where(is.integer)), 33)
  expect_length(dplyr::select(s_1, dplyr::where(is.double)), 9)
  expect_length(dplyr::select(s_1, dplyr::where(is.factor)), 2)
  expect_length(dplyr::select(s_1, dplyr::where(is.character)), 4)
  expect_length(dplyr::select(s_1, dplyr::where(is.logical)), 12)

  # House, LES 2
  hr_2 <- get_les("hr", les_2 = TRUE)
  expect_s3_class(hr_2, "tbl_df")
  expect_length(hr_2, 60)
  expect_equal(nrow(hr_2), 454)
  expect_length(dplyr::select(hr_2, dplyr::where(is.integer)), 33)
  expect_length(dplyr::select(hr_2, dplyr::where(is.double)), 9)
  expect_length(dplyr::select(hr_2, dplyr::where(is.factor)), 2)
  expect_length(dplyr::select(hr_2, dplyr::where(is.character)), 3)
  expect_length(dplyr::select(hr_2, dplyr::where(is.logical)), 13)
})

test_that("LES local reading and writing", {
  skip_if_offline()

  ## create temp file paths
  tmp_csv <- tempfile(fileext = ".csv")
  tmp_tab <- tempfile(fileext = ".tab")
  tmp_tsv <- tempfile(fileext = ".tsv")
  tmp_dta <- tempfile(fileext = ".dta")

  ## download data from online
  s1_online <- get_les("s", les_2 = FALSE)
  expect_s3_class(s1_online, "tbl_df")
  readr::write_csv(s1_online, tmp_csv)

  h1_online <- get_les("hr", les_2 = FALSE)
  expect_s3_class(h1_online, "tbl_df")
  readr::write_tsv(h1_online, tmp_tab)

  s2_online <- get_les("s", les_2 = TRUE)
  expect_s3_class(s1_online, "tbl_df")
  readr::write_tsv(s2_online, tmp_tsv)

  h2_online <- get_les("hr", les_2 = TRUE)
  expect_s3_class(h1_online, "tbl_df")
  haven::write_dta(h2_online, tmp_dta)

  ## check that local data matches
  s1_local <- get_les("s", les_2 = FALSE, local_path = tmp_csv)
  expect_s3_class(s1_local, "tbl_df")
  expect_equal(s1_local, haven::zap_label(haven::zap_formats(s1_online)))

  h1_local <- get_les("hr", les_2 = FALSE, local_path = tmp_tab)
  expect_s3_class(h1_local, "tbl_df")
  expect_equal(h1_local, haven::zap_label(haven::zap_formats(h1_online)))

  s2_local <- get_les("s", les_2 = TRUE, local_path = tmp_tsv)
  expect_s3_class(s2_local, "tbl_df")
  expect_equal(s2_local, haven::zap_label(haven::zap_formats(s2_online)))

  h2_local <- get_les("hr", les_2 = TRUE, local_path = tmp_dta)
  expect_s3_class(h2_local, "tbl_df")
  # don't need to zap label/formats since we saved data in a DTA file
  expect_equal(h2_local, h2_online)

  ## test that re-written data matches
  readr::write_csv(h1_local, tmp_csv)
  h1_rewritten <- get_les("hr", les_2 = FALSE, local_path = tmp_csv)
  expect_s3_class(h1_rewritten, "tbl_df")
  expect_equal(h1_rewritten, h1_local)

  haven::write_dta(s2_local, tmp_dta)
  s2_rewritten <- get_les("s", les_2 = TRUE, local_path = tmp_dta)
  expect_s3_class(s2_rewritten, "tbl_df")
  expect_equal(haven::zap_formats(s2_rewritten), s2_local)
})

Try the filibustr package in your browser

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

filibustr documentation built on April 4, 2025, 3:43 a.m.