Nothing
library(testthat)
library(tibble)
test_that("bid_notice returns a bid_stage object with correct structure", {
result <- bid_notice(
problem = "Users struggle to navigate cluttered dashboards",
evidence = "User testing showed increased time to locate key metrics."
)
# Check S3 class
expect_s3_class(result, "bid_stage")
expect_s3_class(result, "tbl_df")
# Check required columns
expected_cols <- c(
"stage",
"problem",
"theory",
"evidence",
"suggestions",
"timestamp"
)
expect_equal(sort(names(result)), sort(expected_cols))
expect_equal(result$stage, "Notice")
# Check S3 methods work
expect_equal(get_stage(result), "Notice")
expect_type(get_metadata(result), "list")
})
test_that("bid_notice respects provided theory and doesn't auto-suggest", {
result <- bid_notice(
problem = "Simple dashboard issue",
evidence = "Users are confused by the interface layout",
theory = "Custom Theory"
)
expect_equal(result$theory, "Custom Theory")
# Check metadata reflects manual theory selection
metadata <- get_metadata(result)
expect_false(metadata$auto_suggested_theory)
})
test_that("bid_notice auto-suggests theory when not provided", {
result <- bid_notice(
problem = "Users are overwhelmed with too many options in the dropdown",
evidence = "User testing shows confusion"
)
# Should suggest a theory
expect_false(is.na(result$theory))
# Check metadata reflects auto-suggestion
metadata <- get_metadata(result)
expect_true(metadata$auto_suggested_theory)
expect_type(metadata$theory_confidence, "double")
expect_true(metadata$theory_confidence > 0 && metadata$theory_confidence <= 1)
})
test_that("bid_notice warns for deprecated target_audience parameter", {
expect_warning(
result <- bid_notice(
problem = "Sales team struggles with complex filter combinations",
evidence = "Training sessions revealed confusion with multiple selections",
target_audience = "Sales representatives with varying technical skills"
),
"target_audience.*deprecated"
)
# target_audience should not be in result columns
expect_false("target_audience" %in% names(result))
})
test_that("bid_notice works correctly without target_audience", {
result <- bid_notice(
problem = "The chart is cluttered and confusing",
evidence = "Feedback indicates users are disoriented."
)
# target_audience should not be in columns at all
expect_false("target_audience" %in% names(result))
})
test_that("bid_notice warns for short problem description", {
expect_warning(
bid_notice(problem = "Short", evidence = "Sufficient evidence provided."),
"Problem description is very short"
)
})
test_that("bid_notice warns for short evidence description", {
expect_warning(
bid_notice(
problem = "A sufficiently detailed problem description",
evidence = "Short"
),
"Evidence description is very short"
)
})
test_that("bid_notice errors with proper validation messages", {
expect_error(
bid_notice(problem = 123, evidence = "Valid evidence"),
"'problem' must be a single character string"
)
expect_error(
bid_notice(problem = "Valid problem", evidence = 456),
"'evidence' must be a single character string"
)
expect_error(
bid_notice(
problem = "Valid problem",
evidence = "Valid evidence",
theory = 789
),
"'theory' must be a single character string"
)
# target_audience parameter is now deprecated and ignored with warning
expect_warning(
bid_notice(
problem = "Valid problem",
evidence = "Valid evidence",
target_audience = 101112
),
"target_audience.*deprecated"
)
})
test_that("bid_notice returns timestamp as a POSIXct object", {
result <- bid_notice(
problem = "A sufficiently detailed problem description.",
evidence = "Evidence with enough detail for proper matching of theories."
)
expect_s3_class(result$timestamp, "POSIXct")
})
test_that("bid_notice suggests appropriate theory based on problem description", {
result1 <- bid_notice(
problem = "Users are overwhelmed with too many options in the dropdown",
evidence = "User testing shows confusion"
)
expect_match(result1$theory, "Hick's Law", ignore.case = TRUE)
result2 <- bid_notice(
problem = "Dashboard layout is cluttered and disorganized",
evidence = "Users can't find important metrics"
)
expect_match(
result2$theory,
"Visual Hierarch|Cognitive Load",
ignore.case = TRUE,
perl = TRUE
)
})
test_that("bid_notice handles empty strings and validates properly", {
expect_error(
bid_notice(problem = "", evidence = "Valid evidence"),
"'problem' cannot be empty or contain only whitespace"
)
expect_error(
bid_notice(problem = " ", evidence = "Valid evidence"),
"'problem' cannot be empty or contain only whitespace"
)
expect_error(
bid_notice(problem = "Valid problem", evidence = ""),
"'evidence' cannot be empty or contain only whitespace"
)
expect_error(
bid_notice(problem = NULL, evidence = "Valid evidence"),
"'problem' cannot be NULL"
)
expect_error(
bid_notice(problem = "Valid problem", evidence = NULL),
"'evidence' cannot be NULL"
)
})
test_that("bid_notice handles edge cases in optional parameters", {
long_problem <- paste(
rep("This is a very long problem description. ", 20),
collapse = ""
)
long_evidence <- paste(
rep("This is detailed evidence. ", 20),
collapse = ""
)
result <- bid_notice(
problem = long_problem,
evidence = long_evidence
)
expect_s3_class(result, "bid_stage")
expect_equal(result$problem, long_problem)
expect_equal(result$evidence, long_evidence)
result <- bid_notice(
problem = "UI is confusing",
evidence = "Users report difficulties",
theory = "My Custom Theory Framework"
)
expect_equal(result$theory, "My Custom Theory Framework")
})
test_that("bid_notice metadata contains expected information", {
result <- bid_notice(
problem = "Complex dashboard with many options",
evidence = "User feedback indicates confusion and task abandonment"
)
metadata <- get_metadata(result)
# Check required metadata fields
expect_true("auto_suggested_theory" %in% names(metadata))
expect_true("theory_confidence" %in% names(metadata))
expect_true("problem_length" %in% names(metadata))
expect_true("evidence_length" %in% names(metadata))
# has_target_audience is no longer in metadata since target_audience was removed
expect_true("validation_status" %in% names(metadata))
expect_true("stage_number" %in% names(metadata))
expect_true("total_stages" %in% names(metadata))
expect_true("custom_mappings_used" %in% names(metadata))
# Check values
expect_equal(metadata$stage_number, 1)
expect_equal(metadata$total_stages, 5)
expect_equal(metadata$validation_status, "completed")
expect_false(metadata$custom_mappings_used)
})
test_that("bid_notice print method works correctly", {
result <- bid_notice(
problem = "Users struggle with complex data visualization",
evidence = "User testing revealed high task completion times",
target_audience = "Data analysts"
)
# Test that print method executes without error
expect_output(print(result), "BID Framework")
expect_output(print(result), "Notice Stage")
expect_output(print(result), "Problem:")
expect_output(print(result), "Theory:")
expect_output(print(result), "Evidence:")
# Target Audience is no longer displayed since it's been removed
})
test_that("bid_notice summary method works correctly", {
result <- bid_notice(
problem = "Complex interface overwhelms users",
evidence = "Analytics show high bounce rates"
)
# Test that summary method executes without error
expect_output(summary(result), "BID Framework:")
expect_output(summary(result), "Notice Stage Summary")
expect_output(summary(result), "Metadata:")
})
test_that("bid_notice as_tibble method works correctly", {
result <- bid_notice(
problem = "Interface complexity issue",
evidence = "User research indicates problems"
)
# Convert to tibble
tibble_result <- as_tibble(result)
# Should be a regular tibble without bid_stage class
expect_s3_class(tibble_result, "tbl_df")
expect_false(inherits(tibble_result, "bid_stage"))
# Should have same data
expect_equal(names(tibble_result), names(result))
expect_equal(nrow(tibble_result), nrow(result))
})
test_that("bid_notice theory confidence scoring works", {
# Test high-confidence match
result1 <- bid_notice(
problem = "Too many dropdown options overwhelm users",
evidence = "Users abandon tasks when faced with many choices"
)
metadata1 <- get_metadata(result1)
expect_true(metadata1$theory_confidence >= 0.8) # Should be high confidence
# Test lower confidence scenario
result2 <- bid_notice(
problem = "General usability issues",
evidence = "Some user complaints"
)
metadata2 <- get_metadata(result2)
expect_true(metadata2$theory_confidence > 0) # Should have some confidence
})
test_that("bid_notice generates appropriate suggestions", {
result <- bid_notice(
problem = "Mobile interface is difficult to use",
evidence = "Touch targets are too small"
)
# Should generate relevant suggestions
expect_true(nchar(result$suggestions) > 0)
expect_match(
result$suggestions,
"target audience|design solutions",
ignore.case = TRUE
)
result2 <- bid_notice(
problem = "Users struggle with too many choices",
evidence = "Decision time is very long"
)
# Should generate relevant suggestions
expect_true(nchar(result2$suggestions) > 0)
expect_match(
result2$suggestions,
"target audience|design solutions",
ignore.case = TRUE
)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.