chore: fix some bugs and add more tests

This commit is contained in:
appflowy
2022-08-19 11:56:47 +08:00
parent a0753cea2d
commit 659ae5d523
29 changed files with 243 additions and 75 deletions

View File

@ -97,7 +97,7 @@ impl<'a> GridRowTestBuilder<'a> {
self.field_revs
.iter()
.find(|field_rev| {
let t_field_type: FieldType = field_rev.field_type_rev.into();
let t_field_type: FieldType = field_rev.ty.into();
&t_field_type == field_type
})
.unwrap()

View File

@ -18,7 +18,7 @@ async fn grid_cell_update() {
let mut scripts = vec![];
for (_, row_rev) in row_revs.iter().enumerate() {
for field_rev in field_revs {
let field_type: FieldType = field_rev.field_type_rev.into();
let field_type: FieldType = field_rev.ty.into();
let data = match field_type {
FieldType::RichText => "".to_string(),
FieldType::Number => "123".to_string(),
@ -40,7 +40,7 @@ async fn grid_cell_update() {
grid_id: block_id.to_string(),
row_id: row_rev.id.clone(),
field_id: field_rev.id.clone(),
content: Some(data),
content: data,
},
is_err: false,
});

View File

@ -12,7 +12,7 @@ pub fn create_text_field(grid_id: &str) -> (InsertFieldParams, FieldRevision) {
let cloned_field_rev = field_rev.clone();
let type_option_data = field_rev
.get_type_option_entry::<RichTextTypeOptionPB>(field_rev.field_type_rev)
.get_type_option_entry::<RichTextTypeOptionPB>(field_rev.ty)
.unwrap()
.protobuf_bytes()
.to_vec();
@ -21,7 +21,7 @@ pub fn create_text_field(grid_id: &str) -> (InsertFieldParams, FieldRevision) {
id: field_rev.id,
name: field_rev.name,
desc: field_rev.desc,
field_type: field_rev.field_type_rev.into(),
field_type: field_rev.ty.into(),
frozen: field_rev.frozen,
visibility: field_rev.visibility,
width: field_rev.width,
@ -45,7 +45,7 @@ pub fn create_single_select_field(grid_id: &str) -> (InsertFieldParams, FieldRev
let field_rev = FieldBuilder::new(single_select).name("Name").visibility(true).build();
let cloned_field_rev = field_rev.clone();
let type_option_data = field_rev
.get_type_option_entry::<SingleSelectTypeOptionPB>(field_rev.field_type_rev)
.get_type_option_entry::<SingleSelectTypeOptionPB>(field_rev.ty)
.unwrap()
.protobuf_bytes()
.to_vec();
@ -54,7 +54,7 @@ pub fn create_single_select_field(grid_id: &str) -> (InsertFieldParams, FieldRev
id: field_rev.id,
name: field_rev.name,
desc: field_rev.desc,
field_type: field_rev.field_type_rev.into(),
field_type: field_rev.ty.into(),
frozen: field_rev.frozen,
visibility: field_rev.visibility,
width: field_rev.width,

View File

@ -68,7 +68,7 @@ impl GridFilterTest {
FilterScript::DeleteGridTableFilter { filter_id, field_rev} => {
let layout_type = GridLayout::Table;
let params = GridSettingChangesetBuilder::new(&self.grid_id, &layout_type)
.delete_filter(DeleteFilterParams { field_id: field_rev.id, filter_id, field_type_rev: field_rev.field_type_rev })
.delete_filter(DeleteFilterParams { field_id: field_rev.id, filter_id, field_type_rev: field_rev.ty })
.build();
let _ = self.editor.update_grid_setting(params).await.unwrap();
}

View File

@ -96,7 +96,7 @@ impl GridEditorTest {
self.field_revs
.iter()
.filter(|field_rev| {
let t_field_type: FieldType = field_rev.field_type_rev.into();
let t_field_type: FieldType = field_rev.ty.into();
t_field_type == field_type
})
.collect::<Vec<_>>()

View File

@ -1,5 +1,7 @@
use crate::grid::grid_editor::GridEditorTest;
use flowy_grid::entities::{GroupPB, MoveRowParams, RowPB};
use flowy_grid::entities::{CreateRowParams, FieldType, GridLayout, GroupPB, MoveRowParams, RowPB};
use flowy_grid::services::cell::insert_select_option_cell;
use flowy_grid_data_model::revision::RowChangeset;
pub enum GroupScript {
AssertGroup {
@ -7,7 +9,7 @@ pub enum GroupScript {
row_count: usize,
},
AssertGroupCount(usize),
AssertGroupRow {
AssertRow {
group_index: usize,
row_index: usize,
row: RowPB,
@ -18,6 +20,18 @@ pub enum GroupScript {
to_group_index: usize,
to_row_index: usize,
},
CreateRow {
group_index: usize,
},
DeleteRow {
group_index: usize,
row_index: usize,
},
UpdateRow {
from_group_index: usize,
row_index: usize,
to_group_index: usize,
},
}
pub struct GridGroupTest {
@ -62,7 +76,7 @@ impl GridGroupTest {
self.editor.move_row(params).await.unwrap();
}
GroupScript::AssertGroupRow {
GroupScript::AssertRow {
group_index,
row_index,
row,
@ -73,6 +87,44 @@ impl GridGroupTest {
assert_eq!(row.id, compare_row.id);
}
GroupScript::CreateRow { group_index } => {
//
let group = self.group_at_index(group_index).await;
let params = CreateRowParams {
grid_id: self.editor.grid_id.clone(),
start_row_id: None,
group_id: Some(group.group_id.clone()),
layout: GridLayout::Board,
};
let _ = self.editor.create_row(params).await.unwrap();
}
GroupScript::DeleteRow { group_index, row_index } => {
let row = self.row_at_index(group_index, row_index).await;
self.editor.delete_row(&row.id).await.unwrap();
}
GroupScript::UpdateRow {
from_group_index,
row_index,
to_group_index,
} => {
let from_group = self.group_at_index(from_group_index).await;
let to_group = self.group_at_index(to_group_index).await;
let field_id = from_group.field_id;
let field_rev = self.editor.get_field_rev(&field_id).await.unwrap();
let field_type: FieldType = field_rev.ty.into();
let cell_rev = match field_type {
FieldType::SingleSelect => insert_select_option_cell(to_group.group_id.clone(), &field_rev),
FieldType::MultiSelect => insert_select_option_cell(to_group.group_id.clone(), &field_rev),
_ => {
panic!("Unsupported group field type");
}
};
let row_id = self.row_at_index(from_group_index, row_index).await.id;
let mut row_changeset = RowChangeset::new(row_id);
row_changeset.cell_by_field_id.insert(field_id, cell_rev);
self.editor.update_row(row_changeset).await.unwrap();
}
}
}
@ -80,6 +132,11 @@ impl GridGroupTest {
let groups = self.editor.load_groups().await.unwrap().items;
groups.get(index).unwrap().clone()
}
pub async fn row_at_index(&self, group_index: usize, row_index: usize) -> RowPB {
let groups = self.group_at_index(group_index).await;
groups.rows.get(row_index).unwrap().clone()
}
}
impl std::ops::Deref for GridGroupTest {

View File

@ -27,6 +27,7 @@ async fn board_move_row_test() {
let mut test = GridGroupTest::new().await;
let group = test.group_at_index(0).await;
let scripts = vec![
// Move the row at 0 in group0 to group1 at 1
MoveRow {
from_group_index: 0,
from_row_index: 0,
@ -37,7 +38,7 @@ async fn board_move_row_test() {
group_index: 0,
row_count: 2,
},
AssertGroupRow {
AssertRow {
group_index: 0,
row_index: 1,
row: group.rows.get(0).unwrap().clone(),
@ -65,7 +66,7 @@ async fn board_move_row_to_other_group_test() {
group_index: 1,
row_count: 3,
},
AssertGroupRow {
AssertRow {
group_index: 1,
row_index: 1,
row: group.rows.get(0).unwrap().clone(),
@ -91,7 +92,7 @@ async fn board_move_row_to_other_group_and_reorder_test() {
to_group_index: 1,
to_row_index: 2,
},
AssertGroupRow {
AssertRow {
group_index: 1,
row_index: 2,
row: group.rows.get(0).unwrap().clone(),
@ -99,3 +100,102 @@ async fn board_move_row_to_other_group_and_reorder_test() {
];
test.run_scripts(scripts).await;
}
#[tokio::test]
async fn board_create_row_test() {
let mut test = GridGroupTest::new().await;
let scripts = vec![
CreateRow { group_index: 0 },
AssertGroup {
group_index: 0,
row_count: 3,
},
CreateRow { group_index: 1 },
CreateRow { group_index: 1 },
AssertGroup {
group_index: 1,
row_count: 4,
},
];
test.run_scripts(scripts).await;
}
#[tokio::test]
async fn board_delete_row_test() {
let mut test = GridGroupTest::new().await;
let scripts = vec![
DeleteRow {
group_index: 0,
row_index: 0,
},
AssertGroup {
group_index: 0,
row_count: 1,
},
];
test.run_scripts(scripts).await;
}
#[tokio::test]
async fn board_delete_all_row_test() {
let mut test = GridGroupTest::new().await;
let scripts = vec![
DeleteRow {
group_index: 0,
row_index: 0,
},
DeleteRow {
group_index: 0,
row_index: 0,
},
AssertGroup {
group_index: 0,
row_count: 0,
},
];
test.run_scripts(scripts).await;
}
#[tokio::test]
async fn board_update_row_test() {
let mut test = GridGroupTest::new().await;
let scripts = vec![
// Update the row at 0 in group0 by setting the row's group field data
UpdateRow {
from_group_index: 0,
row_index: 0,
to_group_index: 1,
},
AssertGroup {
group_index: 0,
row_count: 1,
},
AssertGroup {
group_index: 1,
row_count: 3,
},
];
test.run_scripts(scripts).await;
}
#[tokio::test]
async fn board_reorder_group_test() {
let mut test = GridGroupTest::new().await;
let scripts = vec![
// Update the row at 0 in group0 by setting the row's group field data
UpdateRow {
from_group_index: 0,
row_index: 0,
to_group_index: 1,
},
AssertGroup {
group_index: 0,
row_count: 1,
},
AssertGroup {
group_index: 1,
row_count: 3,
},
];
test.run_scripts(scripts).await;
}