mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-07-09 10:06:11 +00:00

* feat: add flowy-database2 * chore: config type option data * chore: impl type option * feat: config group * fix: group compile * feat: add sort * chore: setting * chore: insert with specific type * chore: custom group * chore: rename any map * chore: use group setting * chore: update * chore: open database event * chore: update database editor * chore: update * chore: update view editor * chore: update * chore: update view editor * chore: sort feat * chore: update handler * chore: update * chore: config handler event * feat: impl handlers * feat: impl handlers * chore: layout setting * feat: impl handlers * chore: remove flowy-folder ref * chore: integrate flowy-database2 * feat: get cell * chore: create database with data * chore: create view * chore: fix dart compile * fix: some bugs * chore: update * chore: merge develop * chore: fix warning * chore: integrate rocksdb * fix: rocksdb compile errros * fix: update cell * chore: update the bundle identifier * fix: create row * fix: switch to field * fix: duplicate grid * test: migrate tests * test: migrate tests * test: update test * test: migrate tests * chore: add patch
489 lines
11 KiB
Rust
489 lines
11 KiB
Rust
use flowy_database2::services::field::SelectOption;
|
|
|
|
use crate::database::group_test::script::DatabaseGroupTest;
|
|
use crate::database::group_test::script::GroupScript::*;
|
|
|
|
#[tokio::test]
|
|
async fn group_init_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let scripts = vec![
|
|
AssertGroupCount(4),
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 2,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 2,
|
|
row_count: 2,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 3,
|
|
row_count: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 0,
|
|
row_count: 0,
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_move_row_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let group = test.group_at_index(1).await;
|
|
let scripts = vec![
|
|
// Move the row at 0 in group0 to group1 at 1
|
|
MoveRow {
|
|
from_group_index: 1,
|
|
from_row_index: 0,
|
|
to_group_index: 1,
|
|
to_row_index: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 2,
|
|
},
|
|
AssertRow {
|
|
group_index: 1,
|
|
row_index: 1,
|
|
row: group.rows.get(0).unwrap().clone(),
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_move_row_to_other_group_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let group = test.group_at_index(1).await;
|
|
let scripts = vec![
|
|
MoveRow {
|
|
from_group_index: 1,
|
|
from_row_index: 0,
|
|
to_group_index: 2,
|
|
to_row_index: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 2,
|
|
row_count: 3,
|
|
},
|
|
AssertRow {
|
|
group_index: 2,
|
|
row_index: 1,
|
|
row: group.rows.get(0).unwrap().clone(),
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_move_two_row_to_other_group_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let group_1 = test.group_at_index(1).await;
|
|
let scripts = vec![
|
|
// Move row at index 0 from group 1 to group 2 at index 1
|
|
MoveRow {
|
|
from_group_index: 1,
|
|
from_row_index: 0,
|
|
to_group_index: 2,
|
|
to_row_index: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 2,
|
|
row_count: 3,
|
|
},
|
|
AssertRow {
|
|
group_index: 2,
|
|
row_index: 1,
|
|
row: group_1.rows.get(0).unwrap().clone(),
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
|
|
let group_1 = test.group_at_index(1).await;
|
|
// Move row at index 0 from group 1 to group 2 at index 1
|
|
let scripts = vec![
|
|
MoveRow {
|
|
from_group_index: 1,
|
|
from_row_index: 0,
|
|
to_group_index: 2,
|
|
to_row_index: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 0,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 2,
|
|
row_count: 4,
|
|
},
|
|
AssertRow {
|
|
group_index: 2,
|
|
row_index: 1,
|
|
row: group_1.rows.get(0).unwrap().clone(),
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_move_row_to_other_group_and_reorder_from_up_to_down_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let group_1 = test.group_at_index(1).await;
|
|
let group_2 = test.group_at_index(2).await;
|
|
let scripts = vec![
|
|
MoveRow {
|
|
from_group_index: 1,
|
|
from_row_index: 0,
|
|
to_group_index: 2,
|
|
to_row_index: 1,
|
|
},
|
|
AssertRow {
|
|
group_index: 2,
|
|
row_index: 1,
|
|
row: group_1.rows.get(0).unwrap().clone(),
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
|
|
let scripts = vec![
|
|
MoveRow {
|
|
from_group_index: 2,
|
|
from_row_index: 0,
|
|
to_group_index: 2,
|
|
to_row_index: 2,
|
|
},
|
|
AssertRow {
|
|
group_index: 2,
|
|
row_index: 2,
|
|
row: group_2.rows.get(0).unwrap().clone(),
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_move_row_to_other_group_and_reorder_from_bottom_to_up_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let scripts = vec![MoveRow {
|
|
from_group_index: 1,
|
|
from_row_index: 0,
|
|
to_group_index: 2,
|
|
to_row_index: 1,
|
|
}];
|
|
test.run_scripts(scripts).await;
|
|
|
|
let group = test.group_at_index(2).await;
|
|
let scripts = vec![
|
|
AssertGroupRowCount {
|
|
group_index: 2,
|
|
row_count: 3,
|
|
},
|
|
MoveRow {
|
|
from_group_index: 2,
|
|
from_row_index: 2,
|
|
to_group_index: 2,
|
|
to_row_index: 0,
|
|
},
|
|
AssertRow {
|
|
group_index: 2,
|
|
row_index: 0,
|
|
row: group.rows.get(2).unwrap().clone(),
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
#[tokio::test]
|
|
async fn group_create_row_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let scripts = vec![
|
|
CreateRow { group_index: 1 },
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 3,
|
|
},
|
|
CreateRow { group_index: 2 },
|
|
CreateRow { group_index: 2 },
|
|
AssertGroupRowCount {
|
|
group_index: 2,
|
|
row_count: 4,
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_delete_row_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let scripts = vec![
|
|
DeleteRow {
|
|
group_index: 1,
|
|
row_index: 0,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 1,
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_delete_all_row_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let scripts = vec![
|
|
DeleteRow {
|
|
group_index: 1,
|
|
row_index: 0,
|
|
},
|
|
DeleteRow {
|
|
group_index: 1,
|
|
row_index: 0,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 0,
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_update_row_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let scripts = vec![
|
|
// Update the row at 0 in group0 by setting the row's group field data
|
|
UpdateGroupedCell {
|
|
from_group_index: 1,
|
|
row_index: 0,
|
|
to_group_index: 2,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 2,
|
|
row_count: 3,
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_reorder_group_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let scripts = vec![
|
|
// Update the row at 0 in group0 by setting the row's group field data
|
|
UpdateGroupedCell {
|
|
from_group_index: 1,
|
|
row_index: 0,
|
|
to_group_index: 2,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 2,
|
|
row_count: 3,
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_move_to_default_group_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let scripts = vec![
|
|
UpdateGroupedCell {
|
|
from_group_index: 1,
|
|
row_index: 0,
|
|
to_group_index: 0,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 0,
|
|
row_count: 1,
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_move_from_default_group_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
// Move one row from group 1 to group 0
|
|
let scripts = vec![
|
|
UpdateGroupedCell {
|
|
from_group_index: 1,
|
|
row_index: 0,
|
|
to_group_index: 0,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 0,
|
|
row_count: 1,
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
|
|
// Move one row from group 0 to group 1
|
|
let scripts = vec![
|
|
UpdateGroupedCell {
|
|
from_group_index: 0,
|
|
row_index: 0,
|
|
to_group_index: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 2,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 0,
|
|
row_count: 0,
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_move_group_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let group_0 = test.group_at_index(0).await;
|
|
let group_1 = test.group_at_index(1).await;
|
|
let scripts = vec![
|
|
MoveGroup {
|
|
from_group_index: 0,
|
|
to_group_index: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 0,
|
|
row_count: 2,
|
|
},
|
|
AssertGroup {
|
|
group_index: 0,
|
|
expected_group: group_1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 0,
|
|
},
|
|
AssertGroup {
|
|
group_index: 1,
|
|
expected_group: group_0,
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_move_group_row_after_move_group_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let group_1 = test.group_at_index(1).await;
|
|
let group_2 = test.group_at_index(2).await;
|
|
let scripts = vec![
|
|
MoveGroup {
|
|
from_group_index: 1,
|
|
to_group_index: 2,
|
|
},
|
|
AssertGroup {
|
|
group_index: 1,
|
|
expected_group: group_2,
|
|
},
|
|
AssertGroup {
|
|
group_index: 2,
|
|
expected_group: group_1,
|
|
},
|
|
MoveRow {
|
|
from_group_index: 1,
|
|
from_row_index: 0,
|
|
to_group_index: 2,
|
|
to_row_index: 0,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 1,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 2,
|
|
row_count: 3,
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_move_group_to_default_group_pos_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let group_0 = test.group_at_index(0).await;
|
|
let group_3 = test.group_at_index(3).await;
|
|
let scripts = vec![
|
|
MoveGroup {
|
|
from_group_index: 3,
|
|
to_group_index: 0,
|
|
},
|
|
AssertGroup {
|
|
group_index: 0,
|
|
expected_group: group_3,
|
|
},
|
|
AssertGroup {
|
|
group_index: 1,
|
|
expected_group: group_0,
|
|
},
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_insert_single_select_option_test() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let new_option_name = "New option";
|
|
let scripts = vec![
|
|
AssertGroupCount(4),
|
|
UpdateSingleSelectSelectOption {
|
|
inserted_options: vec![SelectOption::new(new_option_name)],
|
|
},
|
|
AssertGroupCount(5),
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
let new_group = test.group_at_index(1).await;
|
|
assert_eq!(new_group.desc, new_option_name);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn group_group_by_other_field() {
|
|
let mut test = DatabaseGroupTest::new().await;
|
|
let multi_select_field = test.get_multi_select_field().await;
|
|
let scripts = vec![
|
|
GroupByField {
|
|
field_id: multi_select_field.id.clone(),
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 1,
|
|
row_count: 3,
|
|
},
|
|
AssertGroupRowCount {
|
|
group_index: 2,
|
|
row_count: 2,
|
|
},
|
|
AssertGroupCount(4),
|
|
];
|
|
test.run_scripts(scripts).await;
|
|
}
|