1 parent
5b22add1f3
commit
2c98b8f925
38 files changed
+915
-87
No files matched your search
@@ -14,6 +14,7 @@ pub mod pgp;
|
||||
pub mod pool;
|
||||
pub mod response_templates;
|
||||
pub mod search_outbox;
|
||||
pub mod settings;
|
||||
pub mod special_folders;
|
||||
pub mod tags;
|
||||
pub mod trusted_senders;
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
use crate::db::pool::Connection;
|
||||
|
||||
pub fn reset_all(conn: &mut Connection) -> Result<(), String> {
|
||||
let transaction = conn
|
||||
.transaction()
|
||||
.map_err(|error| format!("Failed to start settings reset: {error}"))?;
|
||||
|
||||
for sql in [
|
||||
"DELETE FROM folder_preferences",
|
||||
"DELETE FROM special_folders",
|
||||
"DELETE FROM display_preferences",
|
||||
"DELETE FROM mail_preferences",
|
||||
"DELETE FROM notification_preferences",
|
||||
"DELETE FROM calendar_settings",
|
||||
"DELETE FROM pgp_preferences",
|
||||
"INSERT INTO display_preferences (id) VALUES (1)",
|
||||
"INSERT INTO mail_preferences (id) VALUES (1)",
|
||||
"INSERT INTO notification_preferences (id) VALUES (1)",
|
||||
"INSERT INTO calendar_settings (id) VALUES (1)",
|
||||
"INSERT INTO pgp_preferences (id) VALUES (1)",
|
||||
] {
|
||||
transaction
|
||||
.execute(sql, [])
|
||||
.map_err(|error| format!("Failed to reset settings: {error}"))?;
|
||||
}
|
||||
|
||||
transaction
|
||||
.commit()
|
||||
.map_err(|error| format!("Failed to commit settings reset: {error}"))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::db::display_preferences::{self, UpdateDisplayPreferences};
|
||||
use crate::db::folder_preferences::{self, UpdateFolderPreferences};
|
||||
use crate::db::folders;
|
||||
use crate::db::mail_preferences::{self, UpdateMailPreferences};
|
||||
use crate::db::pool::open_test_db;
|
||||
|
||||
#[test]
|
||||
fn reset_restores_defaults_and_folder_overrides() {
|
||||
let mut conn = open_test_db();
|
||||
display_preferences::update_preferences(
|
||||
&conn,
|
||||
&UpdateDisplayPreferences {
|
||||
theme: Some("light".to_string()),
|
||||
..Default::default()
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
mail_preferences::update_preferences(
|
||||
&conn,
|
||||
&UpdateMailPreferences {
|
||||
messages_per_page: Some(100),
|
||||
mark_read_delay_ms: None,
|
||||
remote_images: None,
|
||||
preferred_body: None,
|
||||
thread_mode: None,
|
||||
collapse_quotes: None,
|
||||
show_snippets: None,
|
||||
default_sort: None,
|
||||
flagged_on_top: None,
|
||||
sync_imap_keywords: None,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
folders::insert_folder_if_new(&conn, "INBOX", Some("/"), "").unwrap();
|
||||
folder_preferences::update_preferences(
|
||||
&conn,
|
||||
"INBOX",
|
||||
&UpdateFolderPreferences {
|
||||
flagged_on_top: Some(true),
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
reset_all(&mut conn).unwrap();
|
||||
|
||||
assert_eq!(
|
||||
display_preferences::get_preferences(&conn).unwrap().theme,
|
||||
"system"
|
||||
);
|
||||
assert_eq!(
|
||||
mail_preferences::get_preferences(&conn)
|
||||
.unwrap()
|
||||
.messages_per_page,
|
||||
50
|
||||
);
|
||||
assert_eq!(
|
||||
folder_preferences::get_preferences(&conn, "INBOX")
|
||||
.unwrap()
|
||||
.flagged_on_top,
|
||||
None
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user