|
@@ -17,14 +17,21 @@ use flowy_grid::services::filter::FilterType;
|
|
use flowy_grid::services::view_editor::GridViewChanged;
|
|
use flowy_grid::services::view_editor::GridViewChanged;
|
|
use crate::grid::grid_editor::GridEditorTest;
|
|
use crate::grid::grid_editor::GridEditorTest;
|
|
|
|
|
|
|
|
+pub struct FilterRowChanged {
|
|
|
|
+ pub(crate) showing_num_of_rows: usize,
|
|
|
|
+ pub(crate) hiding_num_of_rows: usize,
|
|
|
|
+}
|
|
|
|
+
|
|
pub enum FilterScript {
|
|
pub enum FilterScript {
|
|
UpdateTextCell {
|
|
UpdateTextCell {
|
|
row_id: String,
|
|
row_id: String,
|
|
text: String,
|
|
text: String,
|
|
|
|
+ changed: Option<FilterRowChanged>,
|
|
},
|
|
},
|
|
UpdateSingleSelectCell {
|
|
UpdateSingleSelectCell {
|
|
row_id: String,
|
|
row_id: String,
|
|
option_id: String,
|
|
option_id: String,
|
|
|
|
+ changed: Option<FilterRowChanged>,
|
|
},
|
|
},
|
|
InsertFilter {
|
|
InsertFilter {
|
|
payload: AlterFilterPayloadPB,
|
|
payload: AlterFilterPayloadPB,
|
|
@@ -32,24 +39,29 @@ pub enum FilterScript {
|
|
CreateTextFilter {
|
|
CreateTextFilter {
|
|
condition: TextFilterConditionPB,
|
|
condition: TextFilterConditionPB,
|
|
content: String,
|
|
content: String,
|
|
|
|
+ changed: Option<FilterRowChanged>,
|
|
},
|
|
},
|
|
UpdateTextFilter {
|
|
UpdateTextFilter {
|
|
filter: FilterPB,
|
|
filter: FilterPB,
|
|
condition: TextFilterConditionPB,
|
|
condition: TextFilterConditionPB,
|
|
content: String,
|
|
content: String,
|
|
|
|
+ changed: Option<FilterRowChanged>,
|
|
},
|
|
},
|
|
CreateNumberFilter {
|
|
CreateNumberFilter {
|
|
condition: NumberFilterConditionPB,
|
|
condition: NumberFilterConditionPB,
|
|
content: String,
|
|
content: String,
|
|
|
|
+ changed: Option<FilterRowChanged>,
|
|
},
|
|
},
|
|
CreateCheckboxFilter {
|
|
CreateCheckboxFilter {
|
|
condition: CheckboxFilterConditionPB,
|
|
condition: CheckboxFilterConditionPB,
|
|
|
|
+ changed: Option<FilterRowChanged>,
|
|
},
|
|
},
|
|
CreateDateFilter{
|
|
CreateDateFilter{
|
|
condition: DateFilterConditionPB,
|
|
condition: DateFilterConditionPB,
|
|
start: Option<i64>,
|
|
start: Option<i64>,
|
|
end: Option<i64>,
|
|
end: Option<i64>,
|
|
timestamp: Option<i64>,
|
|
timestamp: Option<i64>,
|
|
|
|
+ changed: Option<FilterRowChanged>,
|
|
},
|
|
},
|
|
CreateMultiSelectFilter {
|
|
CreateMultiSelectFilter {
|
|
condition: SelectOptionConditionPB,
|
|
condition: SelectOptionConditionPB,
|
|
@@ -58,9 +70,11 @@ pub enum FilterScript {
|
|
CreateSingleSelectFilter {
|
|
CreateSingleSelectFilter {
|
|
condition: SelectOptionConditionPB,
|
|
condition: SelectOptionConditionPB,
|
|
option_ids: Vec<String>,
|
|
option_ids: Vec<String>,
|
|
|
|
+ changed: Option<FilterRowChanged>,
|
|
},
|
|
},
|
|
CreateChecklistFilter {
|
|
CreateChecklistFilter {
|
|
condition: ChecklistFilterConditionPB,
|
|
condition: ChecklistFilterConditionPB,
|
|
|
|
+ changed: Option<FilterRowChanged>,
|
|
},
|
|
},
|
|
AssertFilterCount {
|
|
AssertFilterCount {
|
|
count: i32,
|
|
count: i32,
|
|
@@ -68,6 +82,7 @@ pub enum FilterScript {
|
|
DeleteFilter {
|
|
DeleteFilter {
|
|
filter_id: String,
|
|
filter_id: String,
|
|
filter_type: FilterType,
|
|
filter_type: FilterType,
|
|
|
|
+ changed: Option<FilterRowChanged>,
|
|
},
|
|
},
|
|
AssertFilterContent {
|
|
AssertFilterContent {
|
|
filter_type: FilterType,
|
|
filter_type: FilterType,
|
|
@@ -77,10 +92,6 @@ pub enum FilterScript {
|
|
AssertNumberOfVisibleRows {
|
|
AssertNumberOfVisibleRows {
|
|
expected: usize,
|
|
expected: usize,
|
|
},
|
|
},
|
|
- AssertFilterChanged{
|
|
|
|
- visible_row_len:usize,
|
|
|
|
- hide_row_len: usize,
|
|
|
|
- },
|
|
|
|
#[allow(dead_code)]
|
|
#[allow(dead_code)]
|
|
AssertGridSetting {
|
|
AssertGridSetting {
|
|
expected_setting: GridSettingPB,
|
|
expected_setting: GridSettingPB,
|
|
@@ -118,20 +129,23 @@ impl GridFilterTest {
|
|
|
|
|
|
pub async fn run_script(&mut self, script: FilterScript) {
|
|
pub async fn run_script(&mut self, script: FilterScript) {
|
|
match script {
|
|
match script {
|
|
- FilterScript::UpdateTextCell { row_id, text} => {
|
|
|
|
|
|
+ FilterScript::UpdateTextCell { row_id, text, changed} => {
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
|
|
+ self.assert_future_changed(changed).await;
|
|
self.update_text_cell(row_id, &text).await;
|
|
self.update_text_cell(row_id, &text).await;
|
|
}
|
|
}
|
|
- FilterScript::UpdateSingleSelectCell { row_id, option_id} => {
|
|
|
|
|
|
+ FilterScript::UpdateSingleSelectCell { row_id, option_id, changed} => {
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
|
|
+ self.assert_future_changed(changed).await;
|
|
self.update_single_select_cell(row_id, &option_id).await;
|
|
self.update_single_select_cell(row_id, &option_id).await;
|
|
}
|
|
}
|
|
FilterScript::InsertFilter { payload } => {
|
|
FilterScript::InsertFilter { payload } => {
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.insert_filter(payload).await;
|
|
self.insert_filter(payload).await;
|
|
}
|
|
}
|
|
- FilterScript::CreateTextFilter { condition, content} => {
|
|
|
|
|
|
+ FilterScript::CreateTextFilter { condition, content, changed} => {
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
|
|
+ self.assert_future_changed(changed).await;
|
|
let field_rev = self.get_first_field_rev(FieldType::RichText);
|
|
let field_rev = self.get_first_field_rev(FieldType::RichText);
|
|
let text_filter= TextFilterPB {
|
|
let text_filter= TextFilterPB {
|
|
condition,
|
|
condition,
|
|
@@ -143,8 +157,9 @@ impl GridFilterTest {
|
|
field_rev, text_filter);
|
|
field_rev, text_filter);
|
|
self.insert_filter(payload).await;
|
|
self.insert_filter(payload).await;
|
|
}
|
|
}
|
|
- FilterScript::UpdateTextFilter { filter, condition, content} => {
|
|
|
|
|
|
+ FilterScript::UpdateTextFilter { filter, condition, content, changed} => {
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
|
|
+ self.assert_future_changed(changed).await;
|
|
let params = AlterFilterParams {
|
|
let params = AlterFilterParams {
|
|
view_id: self.view_id(),
|
|
view_id: self.view_id(),
|
|
field_id: filter.field_id,
|
|
field_id: filter.field_id,
|
|
@@ -155,8 +170,9 @@ impl GridFilterTest {
|
|
};
|
|
};
|
|
self.editor.create_or_update_filter(params).await.unwrap();
|
|
self.editor.create_or_update_filter(params).await.unwrap();
|
|
}
|
|
}
|
|
- FilterScript::CreateNumberFilter {condition, content} => {
|
|
|
|
|
|
+ FilterScript::CreateNumberFilter {condition, content, changed} => {
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
|
|
+ self.assert_future_changed(changed).await;
|
|
let field_rev = self.get_first_field_rev(FieldType::Number);
|
|
let field_rev = self.get_first_field_rev(FieldType::Number);
|
|
let number_filter = NumberFilterPB {
|
|
let number_filter = NumberFilterPB {
|
|
condition,
|
|
condition,
|
|
@@ -168,8 +184,9 @@ impl GridFilterTest {
|
|
field_rev, number_filter);
|
|
field_rev, number_filter);
|
|
self.insert_filter(payload).await;
|
|
self.insert_filter(payload).await;
|
|
}
|
|
}
|
|
- FilterScript::CreateCheckboxFilter {condition} => {
|
|
|
|
|
|
+ FilterScript::CreateCheckboxFilter {condition, changed} => {
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
|
|
+ self.assert_future_changed(changed).await;
|
|
let field_rev = self.get_first_field_rev(FieldType::Checkbox);
|
|
let field_rev = self.get_first_field_rev(FieldType::Checkbox);
|
|
let checkbox_filter = CheckboxFilterPB {
|
|
let checkbox_filter = CheckboxFilterPB {
|
|
condition
|
|
condition
|
|
@@ -178,8 +195,9 @@ impl GridFilterTest {
|
|
AlterFilterPayloadPB::new(& self.view_id(), field_rev, checkbox_filter);
|
|
AlterFilterPayloadPB::new(& self.view_id(), field_rev, checkbox_filter);
|
|
self.insert_filter(payload).await;
|
|
self.insert_filter(payload).await;
|
|
}
|
|
}
|
|
- FilterScript::CreateDateFilter { condition, start, end, timestamp} => {
|
|
|
|
|
|
+ FilterScript::CreateDateFilter { condition, start, end, timestamp, changed} => {
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
|
|
+ self.assert_future_changed(changed).await;
|
|
let field_rev = self.get_first_field_rev(FieldType::DateTime);
|
|
let field_rev = self.get_first_field_rev(FieldType::DateTime);
|
|
let date_filter = DateFilterPB {
|
|
let date_filter = DateFilterPB {
|
|
condition,
|
|
condition,
|
|
@@ -200,16 +218,18 @@ impl GridFilterTest {
|
|
AlterFilterPayloadPB::new( &self.view_id(),field_rev, filter);
|
|
AlterFilterPayloadPB::new( &self.view_id(),field_rev, filter);
|
|
self.insert_filter(payload).await;
|
|
self.insert_filter(payload).await;
|
|
}
|
|
}
|
|
- FilterScript::CreateSingleSelectFilter { condition, option_ids} => {
|
|
|
|
|
|
+ FilterScript::CreateSingleSelectFilter { condition, option_ids, changed} => {
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
|
|
+ self.assert_future_changed(changed).await;
|
|
let field_rev = self.get_first_field_rev(FieldType::SingleSelect);
|
|
let field_rev = self.get_first_field_rev(FieldType::SingleSelect);
|
|
let filter = SelectOptionFilterPB { condition, option_ids };
|
|
let filter = SelectOptionFilterPB { condition, option_ids };
|
|
let payload =
|
|
let payload =
|
|
AlterFilterPayloadPB::new(& self.view_id(),field_rev, filter);
|
|
AlterFilterPayloadPB::new(& self.view_id(),field_rev, filter);
|
|
self.insert_filter(payload).await;
|
|
self.insert_filter(payload).await;
|
|
}
|
|
}
|
|
- FilterScript::CreateChecklistFilter { condition} => {
|
|
|
|
|
|
+ FilterScript::CreateChecklistFilter { condition,changed} => {
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
|
|
+ self.assert_future_changed(changed).await;
|
|
let field_rev = self.get_first_field_rev(FieldType::Checklist);
|
|
let field_rev = self.get_first_field_rev(FieldType::Checklist);
|
|
// let type_option = self.get_checklist_type_option(&field_rev.id);
|
|
// let type_option = self.get_checklist_type_option(&field_rev.id);
|
|
let filter = ChecklistFilterPB { condition };
|
|
let filter = ChecklistFilterPB { condition };
|
|
@@ -227,8 +247,9 @@ impl GridFilterTest {
|
|
assert_eq!(filter.condition as u32, condition);
|
|
assert_eq!(filter.condition as u32, condition);
|
|
|
|
|
|
}
|
|
}
|
|
- FilterScript::DeleteFilter { filter_id, filter_type } => {
|
|
|
|
|
|
+ FilterScript::DeleteFilter { filter_id, filter_type ,changed} => {
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
|
|
+ self.assert_future_changed(changed).await;
|
|
let params = DeleteFilterParams { view_id: self.view_id(),filter_type, filter_id };
|
|
let params = DeleteFilterParams { view_id: self.view_id(),filter_type, filter_id };
|
|
let _ = self.editor.delete_filter(params).await.unwrap();
|
|
let _ = self.editor.delete_filter(params).await.unwrap();
|
|
}
|
|
}
|
|
@@ -236,25 +257,6 @@ impl GridFilterTest {
|
|
let setting = self.editor.get_setting().await.unwrap();
|
|
let setting = self.editor.get_setting().await.unwrap();
|
|
assert_eq!(expected_setting, setting);
|
|
assert_eq!(expected_setting, setting);
|
|
}
|
|
}
|
|
- FilterScript::AssertFilterChanged { visible_row_len, hide_row_len} => {
|
|
|
|
- if let Some(mut receiver) = self.recv.take() {
|
|
|
|
- match tokio::time::timeout(Duration::from_secs(2), receiver.recv()).await {
|
|
|
|
- Ok(changed) => {
|
|
|
|
- //
|
|
|
|
- match changed.unwrap() { GridViewChanged::FilterNotification(changed) => {
|
|
|
|
- assert_eq!(changed.visible_rows.len(), visible_row_len, "visible rows not match");
|
|
|
|
- assert_eq!(changed.invisible_rows.len(), hide_row_len, "invisible rows not match");
|
|
|
|
- }
|
|
|
|
- _ => {}
|
|
|
|
- }
|
|
|
|
- },
|
|
|
|
- Err(e) => {
|
|
|
|
- panic!("Process filter task timeout: {:?}", e);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
FilterScript::AssertNumberOfVisibleRows { expected } => {
|
|
FilterScript::AssertNumberOfVisibleRows { expected } => {
|
|
let grid = self.editor.get_grid(&self.view_id()).await.unwrap();
|
|
let grid = self.editor.get_grid(&self.view_id()).await.unwrap();
|
|
assert_eq!(grid.rows.len(), expected);
|
|
assert_eq!(grid.rows.len(), expected);
|
|
@@ -265,6 +267,29 @@ impl GridFilterTest {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ async fn assert_future_changed(&mut self, change: Option<FilterRowChanged>) {
|
|
|
|
+ if change.is_none() {return;}
|
|
|
|
+ let change = change.unwrap();
|
|
|
|
+ let mut receiver = self.recv.take().unwrap();
|
|
|
|
+ tokio::spawn(async move {
|
|
|
|
+ match tokio::time::timeout(Duration::from_secs(2), receiver.recv()).await {
|
|
|
|
+ Ok(changed) => {
|
|
|
|
+ match changed.unwrap() { GridViewChanged::FilterNotification(notification) => {
|
|
|
|
+ assert_eq!(notification.visible_rows.len(), change.showing_num_of_rows, "visible rows not match");
|
|
|
|
+ assert_eq!(notification.invisible_rows.len(), change.hiding_num_of_rows, "invisible rows not match");
|
|
|
|
+ }
|
|
|
|
+ _ => {}
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ Err(e) => {
|
|
|
|
+ panic!("Process filter task timeout: {:?}", e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
async fn insert_filter(&self, payload: AlterFilterPayloadPB) {
|
|
async fn insert_filter(&self, payload: AlterFilterPayloadPB) {
|
|
let params: AlterFilterParams = payload.try_into().unwrap();
|
|
let params: AlterFilterParams = payload.try_into().unwrap();
|
|
let _ = self.editor.create_or_update_filter(params).await.unwrap();
|
|
let _ = self.editor.create_or_update_filter(params).await.unwrap();
|