use anyhow::{Context, Result};
pub fn extract_raw_header_url(html: &str) -> Result<&str> {
let lhs_search = r#"<meta name="bmstable" content=""#;
let lhs = html.find(lhs_search).context("missing bmstable meta")?;
let html = &html[lhs + lhs_search.len()..];
let rhs = html.find('"').context("missing bmstable meta rhs")?;
Ok(&html[..rhs])
}
#[cfg(test)]
mod tests {
use test_log::test;
#[test]
fn test_extract_header_url() {
use super::extract_raw_header_url;
assert_eq!(
extract_raw_header_url(
r#"<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head>
<meta name"blahblah" /><meta name="bmstable" content="header.json" />"#
)
.ok(),
Some("header.json")
);
assert_eq!(
extract_raw_header_url(r#"<meta name="bmstable" content="header.json"/>"#).ok(),
Some("header.json")
);
assert_eq!(
format!("{}", extract_raw_header_url("").unwrap_err()),
"missing bmstable meta"
);
assert_eq!(
format!(
"{}",
extract_raw_header_url(r#"<meta name="bmstable" content="header.json"#)
.unwrap_err()
),
"missing bmstable meta rhs"
);
assert_eq!(
format!(
"{}",
extract_raw_header_url(r#"<meta name="bmstable" content="header.json" />"#)
.unwrap_err()
),
"missing bmstable meta"
);
}
#[test]
fn test_json_table_header_score_url() {
use crate::ResolvedUrl;
assert_eq!(
ResolvedUrl::try_from("https://stellabms.xyz/fr/table.html")
.unwrap()
.resolve_json_url("score.json")
.ok()
.map(|url| url.0)
.as_deref(),
Some("https://stellabms.xyz/fr/score.json")
);
assert_eq!(
ResolvedUrl::try_from("http://flowermaster.web.fc2.com/lrnanido/gla/LN.html")
.unwrap()
.resolve_json_url("http://flowermaster.web.fc2.com/lrnanido/gla/score.json")
.ok()
.map(|url| url.0)
.as_deref(),
Some("http://flowermaster.web.fc2.com/lrnanido/gla/score.json")
);
}
}