Fixed workspace tests
This commit is contained in:
parent
e1eff3f4cd
commit
cf4c103660
1 changed files with 79 additions and 2 deletions
|
@ -147,14 +147,19 @@ impl WorkspaceDb {
|
|||
DELETE FROM panes WHERE workspace_id = ?1;"})?(workspace.id)
|
||||
.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
|
||||
self.exec_bound(indoc! {
|
||||
"INSERT INTO
|
||||
workspaces(workspace_id, workspace_location, dock_visible, dock_anchor, timestamp)
|
||||
VALUES
|
||||
(?1, ?2, ?3, ?4, CURRENT_TIMESTAMP)
|
||||
ON CONFLICT DO UPDATE SET
|
||||
workspace_location = ?2, dock_visible = ?3, dock_anchor = ?4, timestamp = CURRENT_TIMESTAMP"
|
||||
ON CONFLICT DO UPDATE SET
|
||||
workspace_location = ?2, dock_visible = ?3, dock_anchor = ?4, timestamp = CURRENT_TIMESTAMP"
|
||||
})?((workspace.id, &workspace.location, workspace.dock_position))
|
||||
.context("Updating workspace")?;
|
||||
|
||||
|
@ -372,11 +377,83 @@ impl WorkspaceDb {
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
||||
use std::sync::Arc;
|
||||
|
||||
use db::open_memory_db;
|
||||
use settings::DockAnchor;
|
||||
|
||||
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]
|
||||
fn test_full_workspace_serialization() {
|
||||
env_logger::try_init().ok();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue