# Test basic functionality
test_that("get_ly_legislator_cosign_bills basic functionality", {
# Test basic retrieval
bills <- get_ly_legislator_cosign_bills(
term = 9,
name = "王金平",
limit = 5
)
# Check basic structure
expect_type(bills, "list")
expect_named(bills, c("metadata", "bills"))
expect_s3_class(bills$bills, "data.frame")
# Check metadata
expect_type(bills$metadata, "list")
expect_named(bills$metadata,
c("total", "total_page", "current_page", "per_page"))
})
# Test data structure
test_that("get_ly_legislator_cosign_bills returns correct data structure", {
bills <- get_ly_legislator_cosign_bills(
term = 9,
name = "王金平",
limit = 1
)
# Check required columns
expected_columns <- c(
"billNo", "議案名稱", "提案單位", "議案狀態",
"議案類別", "提案來源", "meet_id", "會期",
"字號", "提案編號", "屆期", "mtime"
)
expect_true(all(expected_columns %in% names(bills$bills)))
})
# Test parameter validation
test_that("get_ly_legislator_cosign_bills validates parameters", {
# Test missing parameters
expect_error(get_ly_legislator_cosign_bills())
expect_error(get_ly_legislator_cosign_bills(term = 9))
expect_error(get_ly_legislator_cosign_bills(name = "王金平"))
# Test invalid parameter types
expect_error(get_ly_legislator_cosign_bills(term = "9", name = "王金平"))
expect_error(get_ly_legislator_cosign_bills(term = 9, name = 123))
})
# Test pagination
test_that("get_ly_legislator_cosign_bills pagination works", {
# Get two consecutive pages
page1 <- get_ly_legislator_cosign_bills(
term = 9,
name = "王金平",
page = 1,
limit = 3
)
page2 <- get_ly_legislator_cosign_bills(
term = 9,
name = "王金平",
page = 2,
limit = 3
)
# Check pagination metadata
expect_equal(page1$metadata$current_page, 1)
expect_equal(page2$metadata$current_page, 2)
expect_equal(nrow(page1$bills), 3)
# Check different content on different pages
if(nrow(page2$bills) > 0) {
expect_false(identical(page1$bills$billNo[1], page2$bills$billNo[1]))
}
})
# Test data types
test_that("get_ly_legislator_cosign_bills returns correct data types", {
bills <- get_ly_legislator_cosign_bills(
term = 9,
name = "王金平",
limit = 1
)
if(nrow(bills$bills) > 0) {
# Check column types
expect_type(bills$bills$billNo, "character")
expect_type(bills$bills$議案名稱, "character")
expect_type(bills$bills$提案單位, "character")
expect_type(bills$bills$會期, "integer")
expect_type(bills$bills$屆期, "integer")
}
})
# Test empty results
test_that("get_ly_legislator_cosign_bills handles empty results", {
# Test with unlikely term/name combination
result <- get_ly_legislator_cosign_bills(
term = 9,
name = "不太可能存在的立委",
limit = 5
)
# Check empty structure
expect_equal(nrow(result$bills), 0)
expect_equal(result$metadata$total, 0)
})
# Test content validation
test_that("get_ly_legislator_cosign_bills returns valid content", {
bills <- get_ly_legislator_cosign_bills(
term = 9,
name = "王金平",
limit = 5
)
if(nrow(bills$bills) > 0) {
# Validate content
expect_true(all(!is.na(bills$bills$billNo)))
expect_true(all(!is.na(bills$bills$議案名稱)))
expect_true(all(!is.na(bills$bills$屆期)))
expect_true(all(bills$bills$屆期 == 9)) # Should match requested term
}
})
# Test error handling
test_that("get_ly_legislator_cosign_bills handles errors properly", {
# Test non-existent term/name
expect_error(
get_ly_legislator_cosign_bills(term = 999, name = "不存在的立委")
)
# Test invalid page number
expect_error(
get_ly_legislator_cosign_bills(
term = 9,
name = "王金平",
page = -1
)
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.