Fixed workspace tests

This commit is contained in:
Mikayla Maki 2022-11-21 09:30:41 -08:00
parent e1eff3f4cd
commit cf4c103660

View file

@ -147,6 +147,11 @@ impl WorkspaceDb {
DELETE FROM panes WHERE workspace_id = ?1;"})?(workspace.id) DELETE FROM panes WHERE workspace_id = ?1;"})?(workspace.id)
.context("Clearing old panes")?; .context("Clearing old panes")?;
self.exec_bound(indoc! {"
DELETE FROM workspaces WHERE workspace_location = ? AND workspace_id != ?
"})?((&workspace.location, workspace.id))
.context("clearing out old locations")?;
// Update or insert // Update or insert
self.exec_bound(indoc! { self.exec_bound(indoc! {
"INSERT INTO "INSERT INTO
@ -154,7 +159,7 @@ impl WorkspaceDb {
VALUES VALUES
(?1, ?2, ?3, ?4, CURRENT_TIMESTAMP) (?1, ?2, ?3, ?4, CURRENT_TIMESTAMP)
ON CONFLICT DO UPDATE SET ON CONFLICT DO UPDATE SET
workspace_location = ?2, dock_visible = ?3, dock_anchor = ?4, timestamp = CURRENT_TIMESTAMP" workspace_location = ?2, dock_visible = ?3, dock_anchor = ?4, timestamp = CURRENT_TIMESTAMP"
})?((workspace.id, &workspace.location, workspace.dock_position)) })?((workspace.id, &workspace.location, workspace.dock_position))
.context("Updating workspace")?; .context("Updating workspace")?;
@ -372,11 +377,83 @@ impl WorkspaceDb {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::sync::Arc;
use db::open_memory_db; use db::open_memory_db;
use settings::DockAnchor; use settings::DockAnchor;
use super::*; use super::*;
#[test]
fn test_workspace_id_stability() {
env_logger::try_init().ok();
let db = WorkspaceDb(open_memory_db(Some("test_workspace_id_stability")));
db.migrate(
"test_table",
&["CREATE TABLE test_table(
text TEXT,
workspace_id INTEGER,
FOREIGN KEY(workspace_id) REFERENCES workspaces(workspace_id)
ON DELETE CASCADE
) STRICT;"],
)
.unwrap();
let mut workspace_1 = SerializedWorkspace {
id: 1,
location: (["/tmp", "/tmp2"]).into(),
dock_position: crate::dock::DockPosition::Shown(DockAnchor::Bottom),
center_group: Default::default(),
dock_pane: Default::default(),
};
let mut workspace_2 = SerializedWorkspace {
id: 2,
location: (["/tmp"]).into(),
dock_position: crate::dock::DockPosition::Hidden(DockAnchor::Expanded),
center_group: Default::default(),
dock_pane: Default::default(),
};
db.save_workspace(&workspace_1);
db.exec_bound("INSERT INTO test_table(text, workspace_id) VALUES (?, ?)")
.unwrap()(("test-text-1", 1))
.unwrap();
db.save_workspace(&workspace_2);
db.exec_bound("INSERT INTO test_table(text, workspace_id) VALUES (?, ?)")
.unwrap()(("test-text-2", 2))
.unwrap();
workspace_1.location = (["/tmp", "/tmp3"]).into();
db.save_workspace(&workspace_1);
db.save_workspace(&workspace_1);
workspace_2.dock_pane.children.push(SerializedItem {
kind: Arc::from("Test"),
item_id: 10,
});
db.save_workspace(&workspace_2);
let test_text_1 = db
.select_row_bound::<_, String>("SELECT text FROM test_table WHERE workspace_id = ?")
.unwrap()(2)
.unwrap()
.unwrap();
assert_eq!(test_text_1, "test-text-2");
let test_text_2 = db
.select_row_bound::<_, String>("SELECT text FROM test_table WHERE workspace_id = ?")
.unwrap()(1)
.unwrap()
.unwrap();
assert_eq!(test_text_2, "test-text-1");
}
#[test] #[test]
fn test_full_workspace_serialization() { fn test_full_workspace_serialization() {
env_logger::try_init().ok(); env_logger::try_init().ok();