test_that("wta_player_url composes canonical URLs", { expect_equal( wta_player_url(320301, "katerina-siniakova"), "https://www.wtatennis.com/players/320301/katerina-siniakova" ) expect_equal( wta_player_url(320301), "https://www.wtatennis.com/players/320301" ) expect_equal( wta_player_url(320301, "katerina-siniakova", "matches"), "https://www.wtatennis.com/players/320301/katerina-siniakova/matches" ) expect_error(wta_player_url(320301, section = "stats")) }) test_that(".abs_url resolves relative, protocol-relative and absolute URLs", { expect_equal( matchpointR:::.abs_url("/flags/cz.svg"), "https://www.wtatennis.com/flags/cz.svg" ) expect_equal( matchpointR:::.abs_url("//cdn.example.com/x.png"), "https://cdn.example.com/x.png" ) expect_equal( matchpointR:::.abs_url("https://cdn.example.com/x.png"), "https://cdn.example.com/x.png" ) expect_true(is.na(matchpointR:::.abs_url(NA_character_))) expect_true(is.na(matchpointR:::.abs_url(""))) }) test_that(".text_or_na / .attr_or_na return NA for missing nodes", { page <- xml2::read_html( "
hi
"
)
expect_equal(matchpointR:::.text_or_na(page, ".x"), "hi")
expect_true(is.na(matchpointR:::.text_or_na(page, ".missing")))
expect_equal(matchpointR:::.attr_or_na(page, ".y", "src"), "/f.png")
expect_true(is.na(matchpointR:::.attr_or_na(page, ".missing", "src")))
})
test_that(".extract_jsonld finds the right schema.org block", {
page <- xml2::read_html(paste0(
'',
'',
'',
''
))
person <- matchpointR:::.extract_jsonld(page, "Person")
expect_equal(person$name, "Y")
org <- matchpointR:::.extract_jsonld(page, "Organization")
expect_equal(org$name, "X")
expect_null(matchpointR:::.extract_jsonld(page, "Event"))
})
test_that(".prop_value picks the named value from additionalProperty", {
props <- list(
list(name = "Plays", value = "Right-Handed"),
list(name = "WTA Singles Rank", value = "42")
)
expect_equal(matchpointR:::.prop_value(props, "Plays"), "Right-Handed")
expect_equal(matchpointR:::.prop_value(props, "WTA Singles Rank"), "42")
expect_true(is.na(matchpointR:::.prop_value(props, "Missing")))
expect_true(is.na(matchpointR:::.prop_value(NULL, "Plays")))
})
test_that(".bio_info reads content by title", {
page <- xml2::read_html(testthat::test_path("fixtures", "player_profile.html"))
expect_equal(matchpointR:::.bio_info(page, "Height"), "5' 9\" (1.74m)")
expect_equal(matchpointR:::.bio_info(page, "Career High"), "27")
expect_true(is.na(matchpointR:::.bio_info(page, "Missing")))
})