# ---- helpers -----------------------------------------------------------------
make_sheet_xml <- function() {
xml2::read_xml(
'
0
9999
[ds].[Category]
[ds].[Sales]
'
)
}
# ---- twb_sheet_shelves -------------------------------------------------------
test_that("twb_sheet_shelves returns tibble with expected columns", {
xml <- make_sheet_xml()
out <- twb_sheet_shelves(xml)
expect_s3_class(out, "tbl_df")
expect_named(out, c("sheet", "shelf", "field_ref", "field_instance",
"field_clean", "datasource", "aggregation"),
ignore.order = TRUE)
})
test_that("twb_sheet_shelves detects rows, cols and encoding shelves", {
xml <- make_sheet_xml()
out <- twb_sheet_shelves(xml)
expect_true("rows" %in% out$shelf)
expect_true("cols" %in% out$shelf)
expect_true("color" %in% out$shelf)
expect_true("size" %in% out$shelf)
expect_true("label" %in% out$shelf)
})
test_that("twb_sheet_shelves filters to a single sheet", {
xml <- make_sheet_xml()
out <- twb_sheet_shelves(xml, sheet = "Sales")
expect_true(all(out$sheet == "Sales"))
# non-existent sheet returns empty
empty <- twb_sheet_shelves(xml, sheet = "NoSuchSheet")
expect_equal(nrow(empty), 0L)
})
test_that("twb_sheet_shelves returns empty tibble for empty workbook", {
xml <- xml2::read_xml("")
out <- twb_sheet_shelves(xml)
expect_s3_class(out, "tbl_df")
expect_equal(nrow(out), 0L)
})
# ---- twb_sheet_filters -------------------------------------------------------
test_that("twb_sheet_filters returns expected columns", {
xml <- make_sheet_xml()
out <- twb_sheet_filters(xml)
expect_s3_class(out, "tbl_df")
expect_named(out, c("sheet", "field_ref", "field_clean", "datasource",
"filter_class", "include_mode", "members",
"range_min", "range_max"),
ignore.order = TRUE)
})
test_that("twb_sheet_filters extracts categorical members", {
xml <- make_sheet_xml()
out <- twb_sheet_filters(xml)
cat_row <- out[out$filter_class == "categorical", ]
expect_equal(nrow(cat_row), 1L)
expect_true(grepl("Furniture", cat_row$members, fixed = TRUE))
expect_true(grepl("Technology", cat_row$members, fixed = TRUE))
expect_equal(cat_row$include_mode, "include")
})
test_that("twb_sheet_filters extracts range min/max", {
xml <- make_sheet_xml()
out <- twb_sheet_filters(xml)
rng_row <- out[out$filter_class == "range", ]
expect_equal(nrow(rng_row), 1L)
expect_equal(rng_row$range_min, "0")
expect_equal(rng_row$range_max, "9999")
})
test_that("twb_sheet_filters returns empty tibble when no filters present", {
xml <- xml2::read_xml(
'
'
)
out <- twb_sheet_filters(xml)
expect_equal(nrow(out), 0L)
})
# ---- twb_sheet_axes ----------------------------------------------------------
test_that("twb_sheet_axes returns expected columns", {
xml <- make_sheet_xml()
out <- twb_sheet_axes(xml)
expect_s3_class(out, "tbl_df")
expect_named(out, c("sheet", "axis", "field_ref", "field_clean",
"scale_type", "reversed", "include_zero"),
ignore.order = TRUE)
})
test_that("twb_sheet_axes parses reverse and include-zero flags", {
xml <- make_sheet_xml()
out <- twb_sheet_axes(xml)
expect_equal(nrow(out), 1L)
expect_false(out$reversed[[1L]])
expect_true(out$include_zero[[1L]])
})
test_that("twb_sheet_axes returns empty tibble when no axis rules present", {
xml <- xml2::read_xml(
'
'
)
out <- twb_sheet_axes(xml)
expect_equal(nrow(out), 0L)
})
# ---- twb_sheet_sorts ---------------------------------------------------------
test_that("twb_sheet_sorts returns expected columns", {
xml <- make_sheet_xml()
out <- twb_sheet_sorts(xml)
expect_s3_class(out, "tbl_df")
expect_named(out, c("sheet", "field_ref", "field_clean", "datasource",
"sort_order", "sort_by"),
ignore.order = TRUE)
})
test_that("twb_sheet_sorts extracts sort direction and method", {
xml <- make_sheet_xml()
out <- twb_sheet_sorts(xml)
expect_equal(nrow(out), 1L)
expect_equal(out$sort_order[[1L]], "descending")
expect_equal(out$sort_by[[1L]], "field")
})
test_that("twb_sheet_sorts returns empty tibble when no sorts present", {
xml <- xml2::read_xml(
'
'
)
out <- twb_sheet_sorts(xml)
expect_equal(nrow(out), 0L)
})