# =================================================================
# Tests for value_box_render.R
# =================================================================
test_that("render_value_box produces HTML output", {
# Capture cat() output
output <- capture.output({
result <- render_value_box("Users", "1,234")
})
html <- paste(output, collapse = "\n")
# Should contain raw HTML markers
expect_true(grepl("```\\{=html\\}", html))
expect_true(grepl("```$", html))
# Should contain the value box content
expect_true(grepl("Users", html))
expect_true(grepl("1,234", html))
})
test_that("render_value_box uses default background color", {
output <- capture.output({
render_value_box("Test", "Value")
})
html <- paste(output, collapse = "\n")
# Default color is #2c3e50
expect_true(grepl("#2c3e50", html))
})
test_that("render_value_box accepts custom background color", {
output <- capture.output({
render_value_box("Test", "Value", bg_color = "#ff0000")
})
html <- paste(output, collapse = "\n")
expect_true(grepl("#ff0000", html))
})
test_that("render_value_box includes logo_url when provided", {
output <- capture.output({
render_value_box("Test", "Value", logo_url = "https://example.com/logo.png")
})
html <- paste(output, collapse = "\n")
expect_true(grepl("
0)
})
test_that("render_value_box has correct CSS styling", {
output <- capture.output({
render_value_box("Test", "Value")
})
html <- paste(output, collapse = "\n")
# Key CSS properties
expect_true(grepl("border-radius: 12px", html))
expect_true(grepl("padding: 2rem", html))
expect_true(grepl("color: white", html))
expect_true(grepl("display: flex", html))
expect_true(grepl("box-shadow", html))
})
# --- render_value_box_row() ---
test_that("render_value_box_row produces HTML output", {
boxes <- list(
list(title = "Users", value = "100", bg_color = "#3498db"),
list(title = "Sales", value = "$500", bg_color = "#2ecc71")
)
output <- capture.output({
render_value_box_row(boxes)
})
html <- paste(output, collapse = "\n")
# Should contain raw HTML markers
expect_true(grepl("```\\{=html\\}", html))
# Should contain both boxes
expect_true(grepl("Users", html))
expect_true(grepl("100", html))
expect_true(grepl("Sales", html))
expect_true(grepl("\\$500", html))
# Should have both colors
expect_true(grepl("#3498db", html))
expect_true(grepl("#2ecc71", html))
})
test_that("render_value_box_row creates flex container", {
boxes <- list(
list(title = "A", value = "1", bg_color = "#333")
)
output <- capture.output({
render_value_box_row(boxes)
})
html <- paste(output, collapse = "\n")
# Container styles
expect_true(grepl("display: flex", html))
expect_true(grepl("gap: 1.5rem", html))
expect_true(grepl("flex-wrap: wrap", html))
})
test_that("render_value_box_row handles logo_url in boxes", {
boxes <- list(
list(title = "Test", value = "100", bg_color = "#333",
logo_url = "https://example.com/icon.png")
)
output <- capture.output({
render_value_box_row(boxes)
})
html <- paste(output, collapse = "\n")
expect_true(grepl("