tests/testthat/test_consolidate.R

# input data
data1 <- dplyr::tibble(manyID = c("NZL", "BRA", "CHF"),
                       date = messydates::as_messydate(c("1990-01-01", "1990-01-02",
                                "1990-01-01:1990-01-31")),
                       number = c(100, 1000, 10000))
data2 <- dplyr::tibble(manyID = c("NZL", "BRA"),
                       date = messydates::as_messydate(c("1990-01-01", "1990-01-03")))
data3 <- dplyr::tibble(manyID = c("NZL", "BRA", "CHF", "OTH"),
                       date = messydates::as_messydate(c("1990-01-01", "1990-01-02",
                                "1990-01-01:1990-01-31", NA)),
                       number = c(100, 1200, 12222, 21))
test <- list(a = data1, b = data2, c = data3)

dat1 <- dplyr::tibble(manyID = c("NZL", "BRA", "CHF"),
                      date = messydates::as_messydate(c("1990-01-01",
                                                        "1990-01-02",
                                                        "1990-01-01:1990-01-31")),
                      number = c(100, 1000, 10000))
dat2 <- dplyr::tibble(manyID = c("NZL", "BRA"),
                      date = messydates::as_messydate(c("1990-01-01",
                                                        "1990-01-03")))
dat3 <- dplyr::tibble(manyID = c("NZL", "BRA", "CHF", "OTH"),
                      date = messydates::as_messydate(c("1990-01-01",
                                                        "1990-01-02",
                                                        "1990-01-01:1990-01-31",
                                                        NA)),
                      number = c(100, 1200, 12222, 21))
test2 <- list(a = dat1, b = dat2, c = dat3)

# expected output data
data.con.con <- dplyr::tibble(manyID = c("NZL", "BRA"),
                                date = mdate(c("1990-01-01",
                                         "1990-01-02")))
data.favour <- dplyr::tibble(manyID = c("NZL", "BRA"),
                             date = mdate(c("1990-01-01",
                                      "1990-01-03")))
data.con.any <- dplyr::tibble(manyID = c("NZL", "BRA"),
                              date = mdate(c("1990-01-01",
                                       "1990-01-02")),
                              number = c(100, 1000)) %>% arrange(date)
data.13.any <- dplyr::tibble(manyID = c("NZL", "BRA", "CHF", "OTH"),
                                date = mdate(c("1990-01-01", "1990-01-02",
                                         "1990-01-01..1990-01-31", NA)),
                                number = c(100, 1000, 10000, 21))
data.dup <- dplyr::tibble(manyID = c("NZL", "BRA", "CHF", "OTH",
                                  "NZL", "BRA", "CHF", "OTH"),
                          date = mdate(c("1990-01-01", "1990-01-02",
                                   "1990-01-01:1990-01-31", NA,
                                   "1990-01-01", "1990-01-02",
                                   "1990-01-01:1990-01-31", NA)),
                          number = c(100, 1000, 10000, 21,
                                     100, 1000, 10000, 21))
data.con.min <- dplyr::tibble(manyID = c("NZL", "BRA"),
                              date = mdate(c("1990-01-01",
                                       "1990-01-02")),
                              number = c(100, 1000))
data.con.max <- dplyr::tibble(manyID = c("NZL", "BRA"),
                              date = mdate(c("1990-01-01",
                                       "1990-01-03")),
                              number = c(100, 1200)) %>% arrange(date)
data.con.median <- dplyr::tibble(manyID = c("NZL", "BRA"),
                              date = mdate(c("1990-01-01",
                                       "1990-01-02")),
                              number = c(100, 1100))
data.multi <- dplyr::tibble(manyID = c("NZL", "BRA", "CHF", "OTH"),
                            date = mdate(c("1990-01-01", "1990-01-02",
                                     "1990-01-01", NA)),
                            number = c(100, 1200, 12222, 21))
data.many <- dplyr::tibble(manyID = c("NZL", "BRA", "CHF", "OTH"),
                           number = c(100, 1100, 11111, 21),
                           date = mdate(c("1990-01-01", "1990-01-02",
                                    "1990-01-16", NA)))

test_that("pluck works", {
  expect_equal(pluck(test, "a"), data1)
  expect_equal(pluck(test, "b"), data2)
  expect_equal(pluck(test, "c"), data3)
})

test_that("consolidate methods work", {
  # expect_equal(consolidate(test, join = "inner", resolve = "coalesce"),
  #              data.con.con[order(data.con.con$manyID),])
  expect_equal(consolidate(test, join = "inner", resolve = "coalesce"),
               data.con.any)
  expect_equal(consolidate(test, join = "full", resolve = "coalesce"),
               data.13.any[order(data.13.any$manyID),])
  expect_equal(consolidate(datacube = test, join = "inner", resolve = "min"),
               data.con.min)
  expect_equal(consolidate(test, join = "inner", resolve = "max"),
               data.con.max)
  # expect_equal(consolidate(test, join = "inner", resolve = "median"),
  #              data.con.median[order(data.con.median$manyID),])
  # expect_equal(consolidate(datacube = test, join = "inner", resolve = "mean"),
  #                data.con.median[order(data.con.median$manyID),])
  expect_length(consolidate(test, join = "inner", resolve = "random"), 3)
  expect_equal(unname(unlist(lapply(consolidate(
    datacube = test2, join = "inner", resolve = "min"), class))),
               c("character", "mdate", "numeric"))
  expect_equal(unname(unlist(lapply(consolidate(
    datacube = test2, join = "inner", resolve = "max"), class))),
    c("character", "mdate", "numeric"))
  # expect_equal(dim(consolidate(test2, join = "inner", resolve = "median")), c(2,3))
  # expect_equal(dim(consolidate(datacube = test2, join = "inner", resolve = "mean")), c(2,3))
  expect_length(consolidate(test2, join = "inner", resolve = "random"), 3)
  # expect_equal(consolidate(datacube = test2, join = "full", resolve = c(date = "min", number = "max")),
  #              data.multi[order(data.multi$manyID),])
  # expect_equal(consolidate(test2, join = "full", resolve = c(date = "mean", number = "median")),
  #              data.many[order(data.many$manyID),])
  # expect_length(consolidate(test2, join = "full", resolve = c(date = "coalesce",
  #                                       number = "random")), 3)
  # expect_length(consolidate(test2, join = "full", resolve = "coalesce", key = c("manyID", "date")), 3)
})

# test_that("favouring a dataset works", {
#   expect_equal(consolidate(favour(test, "b"), "inner", "every",
#                            resolve = "coalesce"),
#                data.favour[order(data.favour$manyID),])
#   expect_equal(consolidate(favor(test, "b"), "inner", "every",
#                            resolve = "coalesce"),
#                data.favour[order(data.favour$manyID),])
#   expect_equal(consolidate(favor(test, c("c", "a", "b")), "inner", "every",
#                            resolve = "coalesce"),
#                data.favour[order(data.favour$manyID),])
# })
globalgov/qDatr documentation built on June 12, 2025, 5:40 a.m.