Files
galaxy/app/src/drive/import/node_tests.rs
T

195 lines
5.4 KiB
Rust

use std::{collections::HashMap, path::PathBuf};
use crate::drive::import::nodes::{UploadResult, UploadStatus};
use super::{FileId, FileNode, FileType, FileUploadState, FolderId, FolderNode, ImportedNode};
fn mock_tree() -> FileUploadState {
let mut folder_id_to_node = HashMap::new();
let mut file_id_to_node = HashMap::new();
let mut root_folder = FolderNode::new(String::new(), FolderId(0));
let top_level_file = FileNode::new(
"top_level".to_string(),
FileType::Notebook,
PathBuf::new(),
FolderId(0),
);
let mut top_level_folder = FolderNode::new("top_folder".to_string(), FolderId::root_id());
let second_level_file = FileNode::new(
"second_level".to_string(),
FileType::Workflow,
PathBuf::new(),
FolderId(1),
);
top_level_folder
.children
.push(ImportedNode::File(FileId(1)));
root_folder.children.push(ImportedNode::File(FileId(0)));
root_folder.children.push(ImportedNode::Folder(FolderId(1)));
file_id_to_node.insert(FileId(1), second_level_file);
file_id_to_node.insert(FileId(0), top_level_file);
folder_id_to_node.insert(FolderId(1), top_level_folder);
folder_id_to_node.insert(FolderId(0), root_folder);
let state = FileUploadState {
folder_id_to_node,
file_id_to_node,
};
assert_eq!(state.debug_print(), "(top_folder(second_level), top_level)");
state
}
#[test]
fn test_state_update_in_tree() {
let mut state = mock_tree();
state.mark_folder_synced(
UploadResult::Success("mock-folder".to_string()),
FolderId(1),
);
// Only the second level file is loaded. Top-level folder should be loaded but
// root folder should still be loading.
state.update_tree_with_file_upload_result(
UploadResult::Success("mock-markdown".to_string()),
FileId(1),
);
assert_eq!(
state
.folder_id_to_node
.get(&FolderId(1))
.expect("Should exist")
.status,
UploadStatus::Loaded("mock-folder".to_string())
);
assert_eq!(
state
.folder_id_to_node
.get(&FolderId(0))
.expect("Should exist")
.status,
UploadStatus::Loading
);
// Top level file is also loaded. Root level folder should be marked as loaded.
state.update_tree_with_file_upload_result(
UploadResult::Success("mock-root".to_string()),
FileId(0),
);
assert_eq!(
state
.folder_id_to_node
.get(&FolderId(0))
.expect("Should exist")
.status,
UploadStatus::Loaded(String::new())
);
// Set second level file to be loading. All of the folders should be loading.
state.set_file_and_parent_to_loading(FileId(1));
assert_eq!(
state
.folder_id_to_node
.get(&FolderId(1))
.expect("Should exist")
.status,
UploadStatus::Loading
);
assert_eq!(
state
.folder_id_to_node
.get(&FolderId(0))
.expect("Should exist")
.status,
UploadStatus::Loading
);
// Second level file finished loading. All of the folders should be loaded.
state.update_tree_with_file_upload_result(
UploadResult::Success("mock-folder".to_string()),
FileId(1),
);
assert_eq!(
state
.folder_id_to_node
.get(&FolderId(1))
.expect("Should exist")
.status,
UploadStatus::Loaded("mock-folder".to_string())
);
assert_eq!(
state
.folder_id_to_node
.get(&FolderId(0))
.expect("Should exist")
.status,
UploadStatus::Loaded(String::new())
);
}
#[test]
fn test_empty_folders_update() {
let mut folder_id_to_node = HashMap::new();
let file_id_to_node = HashMap::new();
let mut root_folder = FolderNode::new(String::new(), FolderId(0));
let empty_folder_1 = FolderNode::new("empty".to_string(), FolderId(0));
let empty_folder_2 = FolderNode::new("empty1".to_string(), FolderId(0));
root_folder.children.push(ImportedNode::Folder(FolderId(1)));
root_folder.children.push(ImportedNode::Folder(FolderId(2)));
folder_id_to_node.insert(FolderId(0), root_folder);
folder_id_to_node.insert(FolderId(1), empty_folder_1);
folder_id_to_node.insert(FolderId(2), empty_folder_2);
let mut state = FileUploadState {
folder_id_to_node,
file_id_to_node,
};
assert_eq!(state.debug_print(), "(empty, empty1)");
state.mark_folder_synced(
UploadResult::Success("mock-folder".to_string()),
FolderId(1),
);
assert_eq!(
state
.folder_id_to_node
.get(&FolderId(1))
.expect("Should exist")
.status,
UploadStatus::Loaded("mock-folder".to_string())
);
assert_eq!(
state
.folder_id_to_node
.get(&FolderId(0))
.expect("Should exist")
.status,
UploadStatus::Loading
);
// Errored uploads should also be considered as completed uploads.
state.mark_folder_synced(UploadResult::Error("Failure".to_string()), FolderId(2));
assert_eq!(
state
.folder_id_to_node
.get(&FolderId(0))
.expect("Should exist")
.status,
UploadStatus::Loaded(String::new())
);
}