visualizeR/tests/testthat/test-reorder_by.R

160 lines
4.8 KiB
R

test_that("reorder_by works with character columns", {
test_data <- data.frame(
category = c("B", "A", "D", "C", "E"),
value = c(25, 40, 15, 35, 30),
group = c("Group 1", "Group 2", "Group 1", "Group 2", "Group 1"),
stringsAsFactors = FALSE
)
# Test order by values (y)
result <- reorder_by(test_data, "category", "value", order = "y")
expected_order <- c("D", "B", "E", "C", "A")
expect_equal(as.character(result$category), expected_order)
# Test reversed order
result_rev <- reorder_by(
test_data,
"category",
"value",
order = "y",
dir_order = -1
)
expect_equal(as.character(result_rev$category), rev(expected_order))
# Test alphabetical order
result_alpha <- reorder_by(test_data, "category", "value", order = "x")
expect_equal(as.character(result_alpha$category), c("A", "B", "C", "D", "E"))
})
test_that("reorder_by works with factor columns", {
test_data <- data.frame(
category = factor(c("B", "A", "D", "C", "E")),
value = c(25, 40, 15, 35, 30),
group = factor(c("Group 1", "Group 2", "Group 1", "Group 2", "Group 1"))
)
# Test order by values (y)
result <- reorder_by(test_data, "category", "value", order = "y")
expect_true(is.factor(result$category))
expect_equal(as.character(result$category), c("D", "B", "E", "C", "A"))
# Test factor levels
expect_equal(levels(result$category), c("D", "B", "E", "C", "A"))
})
test_that("reorder_by handles grouped ordering correctly", {
test_data <- data.frame(
category = c("B", "A", "D", "C", "E"),
value = c(25, 40, 15, 35, 30),
group = c("Group 1", "Group 2", "Group 1", "Group 2", "Group 1"),
stringsAsFactors = FALSE
)
# Test grouped_y ordering
result <- reorder_by(
test_data,
"category",
"value",
group = "group",
order = "grouped_y"
)
# Group 1 items should be ordered by value within Group 1
group1_items <- result[result$group == "Group 1", "category"]
group1_values <- result[result$group == "Group 1", "value"]
expect_true(all(group1_values == sort(group1_values)))
# Group 2 items should be ordered by value within Group 2
group2_items <- result[result$group == "Group 2", "category"]
group2_values <- result[result$group == "Group 2", "value"]
expect_true(all(group2_values == sort(group2_values)))
# Test grouped_x ordering
result_x <- reorder_by(
test_data,
"category",
"value",
group = "group",
order = "grouped_x"
)
# Groups should remain intact, and items should be ordered alphabetically within groups
group1_items_x <- as.character(result_x[
result_x$group == "Group 1",
"category"
])
expect_equal(group1_items_x, sort(group1_items_x))
})
test_that("reorder_by handles fallback cases", {
test_data <- data.frame(
category = c("B", "A", "D", "C", "E"),
value = c(25, 40, 15, 35, 30),
stringsAsFactors = FALSE
)
# Test empty group with grouped_y
expect_warning(
result <- reorder_by(
test_data,
"category",
"value",
group = "",
order = "grouped_y"
),
"Group is empty"
)
# Should fall back to ordering by y
expect_equal(as.character(result$category), c("D", "B", "E", "C", "A"))
# Test empty group with grouped_x
expect_warning(
result_x <- reorder_by(
test_data,
"category",
"value",
group = "",
order = "grouped_x"
),
"Group is empty"
)
# Should fall back to alphabetical ordering
expect_equal(as.character(result_x$category), c("A", "B", "C", "D", "E"))
})
test_that("reorder_by preserves row data correctly", {
test_data <- data.frame(
category = c("B", "A", "D", "C", "E"),
value = c(25, 40, 15, 35, 30),
extra = c("x1", "x2", "x3", "x4", "x5"),
stringsAsFactors = FALSE
)
# Test that reordering preserves all columns and their associations
result <- reorder_by(test_data, "category", "value", order = "y")
# Values should correspond to the correct categories
expect_equal(result$value[result$category == "A"], 40)
expect_equal(result$value[result$category == "B"], 25)
expect_equal(result$value[result$category == "C"], 35)
expect_equal(result$value[result$category == "D"], 15)
expect_equal(result$value[result$category == "E"], 30)
# Extra column should maintain its associations
expect_equal(result$extra[result$category == "A"], "x2")
expect_equal(result$extra[result$category == "B"], "x1")
})
test_that("reorder_by handles no reordering case", {
test_data <- data.frame(
category = c("B", "A", "D", "C", "E"),
value = c(25, 40, 15, 35, 30),
stringsAsFactors = FALSE
)
# Test no reordering
result <- reorder_by(test_data, "category", "value", order = "none")
# Order should be preserved from the original data
expect_equal(as.character(result$category), c("B", "A", "D", "C", "E"))
})