Lines
100 %
Functions
Branches
use super::*;
fn config_wire(id: i64, config_val: &str) -> String {
format!(r#"(:id {id} :value "(:config-value \"{config_val}\")")"#)
}
fn error_wire(id: i64, code: &str, msg: &str) -> String {
format!(r#"(:id {id} :error (:code {code} :message "{msg}"))"#)
#[test]
fn on_reply_loaded_maps_to_loaded_value() {
let mut tab = ConfigTab::new();
tab.set_loading("locale", 1);
tab.on_reply("locale", &config_wire(1, "en_US"));
let (_, cell) = tab.entries.iter().find(|(k, _)| k == "locale").unwrap();
assert!(matches!(cell, ConfigCell::Loaded(v) if v == "en_US"));
fn on_reply_nil_value_maps_to_unset() {
// An unset key returns a successful `(:config-value nil)`, not an error.
tab.set_loading("locale", 2);
tab.on_reply("locale", r#"(:id 2 :value "(:config-value nil)")"#);
assert!(matches!(cell, ConfigCell::Unset), "got {cell:?}");
fn on_reply_server_error_maps_to_error() {
// A genuine server failure must surface as Error, NOT be hidden as unset.
tab.on_reply("locale", &error_wire(2, "db", "connection refused"));
assert!(matches!(cell, ConfigCell::Error(_)), "got {cell:?}");
fn on_reply_only_affects_keyed_entry() {
tab.set_loading("locale", 3);
tab.set_loading("userregistrytimeout", 4);
tab.on_reply("locale", &config_wire(3, "fr_FR"));
let (_, timeout_cell) = tab
.entries
.iter()
.find(|(k, _)| k == "userregistrytimeout")
.unwrap();
assert!(matches!(timeout_cell, ConfigCell::Loading { id: 4 }));
fn build_set_config_form_basic() {
let form = build_set_config_form("locale", "en_US");
assert_eq!(form, r#"(set-config "locale" "en_US")"#);
fn build_set_config_form_escapes_quotes() {
let form = build_set_config_form("key", r#"val"with"quotes"#);
assert!(form.contains(r#"\"with\""#));
fn selected_key_returns_first_by_default() {
let tab = ConfigTab::new();
assert_eq!(tab.selected_key(), Some("locale"));
fn select_next_and_prev_stay_in_bounds() {
tab.select_prev();
assert_eq!(tab.selected, 0);
for _ in 0..100 {
tab.select_next();
assert_eq!(tab.selected, KNOWN_CONFIG_KEYS.len() - 1);
fn reset_clears_all_entries_to_unset() {
tab.on_reply("locale", &config_wire(5, "de_DE"));
tab.reset();
assert!(
tab.entries
.all(|(_, c)| matches!(c, ConfigCell::Unset))
);
fn is_idle_true_only_when_all_unset() {
assert!(tab.is_idle());
assert!(!tab.is_idle());
fn selected_value_returns_loaded_string() {
tab.on_reply("locale", &config_wire(1, "ja_JP"));
assert_eq!(tab.selected_value(), "ja_JP");
fn selected_value_empty_when_unset() {
assert_eq!(tab.selected_value(), "");
fn any_loading_tracks_in_flight_requests() {
assert!(!tab.any_loading());
tab.set_loading("locale", 7);
assert!(tab.any_loading());
tab.on_reply("locale", &config_wire(7, "en"));