# Global variables --------------------------------------------------------

# Cars
metadata <-
  jsonlite::fromJSON(get_data_location("ExampleProject_metadata.json"))

records <-
  jsonlite::fromJSON(get_data_location("ExampleProject_records.json"))

redcap_output_json <- REDCap_split(records, metadata, forms = "all")

# Longitudinal
file_paths <- vapply(
  c(records = "WARRIORtestForSoftwa_DATA_2018-06-21_1431.csv",
    metadata = "WARRIORtestForSoftwareUpgrades_DataDictionary_2018-06-21.csv"),
  FUN.VALUE = "character",
  get_data_location
)

redcap <- lapply(file_paths, read.csv, stringsAsFactors = FALSE)
redcap[["metadata"]] <- with(redcap, metadata[metadata[, 1] > "", ])
redcap_output_long <-
  with(redcap, REDCap_split(records, metadata, forms = "all"))
redcap_long_names <- names(redcap[[1]])

# Tests -------------------------------------------------------------------

test_that("Each form is an element in the list", {
  expect_length(redcap_output_json, 3L)
  expect_identical(names(redcap_output_json),
                   c("motor_trend_cars", "grouping", "sale"))

})

test_that("All variables land somewhere", {
  expect_true(setequal(names(records), Reduce(
    "union", lapply(redcap_output_json, names)
  )))

})


test_that("Primary table name is ignored", {
  expect_identical(REDCap_split(records, metadata, "HELLO", "all"),
                   redcap_output_json)
})

test_that("Supports longitudinal data", {
  expect_true(setequal(redcap_long_names, Reduce(
    "union", lapply(redcap_output_long, names)
  )))

})