tests/testthat/test-00-validate.R

test_that("error - invalid px object", {
  expect_error(px_validate(1),
               regexp = "px object must be a list"
               )

  base_px <- get_base_px()
  base_px$cells1 <- NULL

  expect_error(px_validate(base_px),
               regexp = "missing these names:"
               )

  base_px2 <- get_base_px()
  base_px2$fisk <- data.frame()

  expect_error(px_validate(base_px2),
               regexp = "invalid names:"
               )

  base_px3 <- get_base_px()
  base_px3$languages <- c("en")

  expect_error(px_validate(base_px3),
               regexp = "list of data frames"
               )

  base_px4 <- get_base_px()
  base_px4$table1 <- data.frame(Keyword = as.character())

  expect_error(px_validate(base_px4),
               regexp = "px object: 'table1' is missing these columns: keyword"
               )

  base_px5 <- get_base_px()

  base_px5$table1 <- data.frame(keyword = "LAST-UPDATED",
                                value   = "2020-01-01 10:00"
                                )

  expect_error(px_validate(base_px5),
               regexp = "'table1' contains misplaced keywords"
               )

  base_px6 <- get_base_px()
  base_px6$table2 <-
    data.frame(keyword = "NEXT-UPDATE",
               value   = "2020-01-01 10:00"
               ) %>%
    align_data_frames(get_base_table2())

  expect_error(px_validate(base_px6),
               regexp = "'table2' contains misplaced keywords"
               )

  base_px7 <- get_base_px()

  base_px7$languages <-
    data.frame(language = "en") %>%
    align_data_frames(get_base_languages())

  base_px7$table2 <-
    dplyr::bind_rows(base_px7$table2,
                     data.frame(keyword = "TITLE", language = "dk")
                     )

  expect_error(px_validate(base_px7),
               regexp = "languages that are not defined"
               )

  bexsta <- px(get_data_path('BEXSTA'))

  bexsta1 <- bexsta
  bexsta1$variables1 <- dplyr::bind_rows(bexsta1$variables1,
                                         dplyr::tibble(`variable-code` = "fisk")
                                         )

  expect_error(px_validate(bexsta1), regexp = "variables1.*not in x\\$data:\\s*fisk")

  bexsta2 <- bexsta
  bexsta2$variables2 <- dplyr::bind_rows(bexsta2$variables2,
                                         dplyr::tibble(`variable-code` = "ost",
                                                       `variable-label` = "Ost")
                                         )

  expect_error(px_validate(bexsta2), regexp = c("variables2.*not in x\\$data:\\s*ost"))

  bexsta3 <- bexsta
  bexsta3$cells1 <- dplyr::bind_rows(bexsta3$cells1,
                                         dplyr::tibble(`variable-code` = "sovs",
                                                       code = "1"
                                                       )
                                         )

  expect_error(px_validate(bexsta3), regexp = "cells1.*not in x\\$data:\\s*sovs")

  bexsta4 <- bexsta
  bexsta4$cells2 <- dplyr::bind_rows(bexsta4$cells2,
                                         dplyr::tibble(`variable-code` = "ice",
                                                       code = "1"
                                                       )
                                         )

  expect_error(px_validate(bexsta4), regexp = "cells2.*not in x\\$data:\\s*ice")

  bexsta5 <- bexsta
  bexsta5$data$new_variable <- 1

  expect_error(px_validate(bexsta5), regexp = "not defined in x\\$variables1:\\s*new_variable")

  bexsta5$variables1 <- dplyr::bind_rows(bexsta5$variables1,
                                         dplyr::tibble(`variable-code` = "new_variable",
                                                       pivot = "STUB")
                                         )

  expect_error(px_validate(bexsta5), regexp = "not defined in x\\$variables2:\\s*new_variable")

  bexsta5$variables2 <- dplyr::bind_rows(bexsta5$variables2,
                                         dplyr::tibble(`variable-code` = "new_variable",
                                                       `variable-label` = "New variable"
                                                       )
                                         )

  expect_identical(px_validate(bexsta5), bexsta5)
})

Try the pxmake package in your browser

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

pxmake documentation built on April 11, 2025, 6:06 p.m.