use pagetop::prelude::*;
#[pagetop::test]
async fn offers_every_supported_language_and_marks_the_selected_one() {
let mut field = form::SelectLanguage::new()
.with_name("language")
.with_selected("es-ES");
let html = field.render(&mut Context::default()).await.into_string();
for (langid, _) in Locale::supported_languages() {
assert!(html.contains(&format!(r#"value="{langid}""#)));
}
assert!(html.contains(r#""#));
assert!(!html.contains("Use the site language"));
}
#[pagetop::test]
async fn required_field_has_no_empty_option_when_a_language_is_selected() {
let mut field = form::SelectLanguage::new()
.with_required(true)
.with_selected("es-ES");
let html = field.render(&mut Context::default()).await.into_string();
assert!(!html.contains(r#"value="""#));
}
#[pagetop::test]
async fn language_aliases_select_their_canonical_language() {
for alias in ["es", "es-es", "ES-ES"] {
let mut field = form::SelectLanguage::new().with_selected(alias);
let html = field.render(&mut Context::default()).await.into_string();
assert!(html.contains(r#""#));
}
#[pagetop::test]
async fn languages_are_sorted_by_their_translated_name() {
let mut field = form::SelectLanguage::new();
let mut cx = Context::default().with_langid(&Locale::resolve("es-ES"));
let html = field.render(&mut cx).await.into_string();
let spanish = html
.find(">Español (España)")
.expect("Spanish name");
let english = html
.find(">Inglés (Estados Unidos)")
.expect("English name");
assert!(spanish < english);
let mut cx = Context::default().with_langid(&Locale::resolve("en-US"));
let html = field.render(&mut cx).await.into_string();
let spanish = html
.find(">Spanish (Spain)")
.expect("Spanish name");
let english = html
.find(">English (United States)")
.expect("English name");
assert!(english < spanish);
}