chore: add filter feature flag & enable filter tests

This commit is contained in:
appflowy
2022-07-09 23:28:15 +08:00
parent ec1113b134
commit 24f2bf398e
14 changed files with 195 additions and 34 deletions

View File

@ -0,0 +1,2 @@
mod script;
mod test;

View File

@ -0,0 +1,91 @@
#![cfg_attr(rustfmt, rustfmt::skip)]
#![allow(clippy::all)]
#![allow(dead_code)]
#![allow(unused_imports)]
use flowy_grid::entities::{CreateGridFilterPayload, GridLayoutType, GridSetting};
use flowy_grid::services::setting::GridSettingChangesetBuilder;
use flowy_grid_data_model::revision::FieldTypeRevision;
use flowy_sync::entities::grid::{CreateGridFilterParams, DeleteFilterParams, GridSettingChangesetParams};
use crate::grid::script::GridEditorTest;
pub enum FilterScript {
#[allow(dead_code)]
UpdateGridSetting {
params: GridSettingChangesetParams,
},
InsertGridTableFilter {
payload: CreateGridFilterPayload,
},
AssertTableFilterCount {
count: i32,
},
DeleteGridTableFilter {
filter_id: String,
field_type_rev: FieldTypeRevision,
},
#[allow(dead_code)]
AssertGridSetting {
expected_setting: GridSetting,
},
}
pub struct GridFilterTest {
pub editor_test: GridEditorTest,
}
impl GridFilterTest {
pub async fn new() -> Self {
let editor_test = GridEditorTest::new().await;
Self {
editor_test
}
}
pub async fn run_scripts(&mut self, scripts: Vec<FilterScript>) {
for script in scripts {
self.run_script(script).await;
}
}
pub async fn run_script(&mut self, script: FilterScript) {
match script {
FilterScript::UpdateGridSetting { params } => {
let _ = self.editor.update_grid_setting(params).await.unwrap();
}
FilterScript::InsertGridTableFilter { payload } => {
let params: CreateGridFilterParams = payload.try_into().unwrap();
let layout_type = GridLayoutType::Table;
let params = GridSettingChangesetBuilder::new(&self.grid_id, &layout_type)
.insert_filter(params)
.build();
let _ = self.editor.update_grid_setting(params).await.unwrap();
}
FilterScript::AssertTableFilterCount { count } => {
let layout_type = GridLayoutType::Table;
let filters = self.editor.get_grid_filter(&layout_type).await.unwrap();
assert_eq!(count as usize, filters.len());
}
FilterScript::DeleteGridTableFilter { filter_id ,field_type_rev} => {
let layout_type = GridLayoutType::Table;
let params = GridSettingChangesetBuilder::new(&self.grid_id, &layout_type)
.delete_filter(DeleteFilterParams { filter_id, field_type_rev })
.build();
let _ = self.editor.update_grid_setting(params).await.unwrap();
}
FilterScript::AssertGridSetting { expected_setting } => {
let setting = self.editor.get_grid_setting().await.unwrap();
assert_eq!(expected_setting, setting);
}
}
}
}
impl std::ops::Deref for GridFilterTest {
type Target = GridEditorTest;
fn deref(&self) -> &Self::Target {
&self.editor_test
}
}

View File

@ -1,41 +1,41 @@
use crate::grid::script::EditorScript::*;
use crate::grid::script::*;
use flowy_grid::entities::CreateGridFilterPayload;
use crate::grid::filter_test::script::FilterScript::*;
use crate::grid::filter_test::script::*;
use flowy_grid::entities::{CreateGridFilterPayload, TextFilterCondition};
use flowy_grid_data_model::revision::FieldRevision;
#[tokio::test]
async fn grid_filter_create_test() {
let test = GridEditorTest::new().await;
let mut test = GridFilterTest::new().await;
let field_rev = test.text_field();
let payload = CreateGridFilterPayload::new(field_rev, TextFilterCondition::TextIsEmpty, Some("abc".to_owned()));
let scripts = vec![InsertGridTableFilter { payload }, AssertTableFilterCount { count: 1 }];
GridEditorTest::new().await.run_scripts(scripts).await;
test.run_scripts(scripts).await;
}
#[tokio::test]
#[should_panic]
async fn grid_filter_invalid_condition_panic_test() {
let test = GridEditorTest::new().await;
let field_rev = test.text_field();
let mut test = GridFilterTest::new().await;
// 100 is not a valid condition, so this test should be panic.
let payload = CreateGridFilterPayload::new(field_rev, 100, Some("abc".to_owned()));
let payload = create_filter(&test, "abc");
let scripts = vec![InsertGridTableFilter { payload }];
GridEditorTest::new().await.run_scripts(scripts).await;
test.run_scripts(scripts).await;
}
#[tokio::test]
async fn grid_filter_delete_test() {
let mut test = GridEditorTest::new().await;
let field_rev = test.text_field().clone();
let payload = CreateGridFilterPayload::new(&field_rev, TextFilterCondition::TextIsEmpty, Some("abc".to_owned()));
let mut test = GridFilterTest::new().await;
let payload = create_filter(&test, "abc");
let scripts = vec![InsertGridTableFilter { payload }, AssertTableFilterCount { count: 1 }];
test.run_scripts(scripts).await;
let filter = test.grid_filters().await.pop().unwrap();
test.run_scripts(vec![
DeleteGridTableFilter {
filter_id: filter.id,
field_type: field_rev.field_type.clone(),
field_type_rev: field_rev.field_type_rev.clone(),
},
AssertTableFilterCount { count: 0 },
])
@ -44,3 +44,8 @@ async fn grid_filter_delete_test() {
#[tokio::test]
async fn grid_filter_get_rows_test() {}
fn create_filter(grid_filter_test: &GridFilterTest, s: &str) -> CreateGridFilterPayload {
let field_rev = grid_filter_test.text_field();
CreateGridFilterPayload::new(&field_rev, TextFilterCondition::TextIsEmpty, Some(s.to_owned()))
}

View File

@ -2,7 +2,7 @@ mod block_test;
mod cell_test;
mod field_test;
mod field_util;
// mod filter_test;
mod filter_test;
mod row_test;
mod row_util;
mod script;

View File

@ -82,7 +82,7 @@ pub enum EditorScript {
},
DeleteGridTableFilter {
filter_id: String,
field_type: FieldType,
field_type_rev: FieldTypeRevision,
},
#[allow(dead_code)]
AssertGridSetting {
@ -271,10 +271,10 @@ impl GridEditorTest {
let filters = self.editor.get_grid_filter(&layout_type).await.unwrap();
assert_eq!(count as usize, filters.len());
}
EditorScript::DeleteGridTableFilter { filter_id ,field_type} => {
EditorScript::DeleteGridTableFilter { filter_id ,field_type_rev} => {
let layout_type = GridLayoutType::Table;
let params = GridSettingChangesetBuilder::new(&self.grid_id, &layout_type)
.delete_filter(DeleteFilterParams { filter_id, field_type_rev: field_type.into() })
.delete_filter(DeleteFilterParams { filter_id, field_type_rev })
.build();
let _ = self.editor.update_grid_setting(params).await.unwrap();
}