|
@@ -6,6 +6,7 @@
|
|
use std::time::Duration;
|
|
use std::time::Duration;
|
|
use bytes::Bytes;
|
|
use bytes::Bytes;
|
|
use futures::TryFutureExt;
|
|
use futures::TryFutureExt;
|
|
|
|
+use tokio::sync::broadcast::Receiver;
|
|
use flowy_grid::entities::{AlterFilterParams, AlterFilterPayloadPB, DeleteFilterParams, GridLayout, GridSettingChangesetParams, GridSettingPB, RowPB, TextFilterConditionPB, FieldType, NumberFilterConditionPB, CheckboxFilterConditionPB, DateFilterConditionPB, DateFilterContentPB, SelectOptionConditionPB, TextFilterPB, NumberFilterPB, CheckboxFilterPB, DateFilterPB, SelectOptionFilterPB, CellChangesetPB, FilterPB, ChecklistFilterConditionPB, ChecklistFilterPB};
|
|
use flowy_grid::entities::{AlterFilterParams, AlterFilterPayloadPB, DeleteFilterParams, GridLayout, GridSettingChangesetParams, GridSettingPB, RowPB, TextFilterConditionPB, FieldType, NumberFilterConditionPB, CheckboxFilterConditionPB, DateFilterConditionPB, DateFilterContentPB, SelectOptionConditionPB, TextFilterPB, NumberFilterPB, CheckboxFilterPB, DateFilterPB, SelectOptionFilterPB, CellChangesetPB, FilterPB, ChecklistFilterConditionPB, ChecklistFilterPB};
|
|
use flowy_grid::services::field::{SelectOptionCellChangeset, SelectOptionIds};
|
|
use flowy_grid::services::field::{SelectOptionCellChangeset, SelectOptionIds};
|
|
use flowy_grid::services::setting::GridSettingChangesetBuilder;
|
|
use flowy_grid::services::setting::GridSettingChangesetBuilder;
|
|
@@ -89,13 +90,15 @@ pub enum FilterScript {
|
|
|
|
|
|
pub struct GridFilterTest {
|
|
pub struct GridFilterTest {
|
|
inner: GridEditorTest,
|
|
inner: GridEditorTest,
|
|
|
|
+ recv: Option<Receiver<GridViewChanged>>,
|
|
}
|
|
}
|
|
|
|
|
|
impl GridFilterTest {
|
|
impl GridFilterTest {
|
|
pub async fn new() -> Self {
|
|
pub async fn new() -> Self {
|
|
let editor_test = GridEditorTest::new_table().await;
|
|
let editor_test = GridEditorTest::new_table().await;
|
|
Self {
|
|
Self {
|
|
- inner: editor_test
|
|
|
|
|
|
+ inner: editor_test,
|
|
|
|
+ recv: None,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -116,17 +119,19 @@ 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_index, text} => {
|
|
FilterScript::UpdateTextCell { row_index, text} => {
|
|
|
|
+ self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.update_text_cell(row_index, &text).await;
|
|
self.update_text_cell(row_index, &text).await;
|
|
}
|
|
}
|
|
-
|
|
|
|
FilterScript::UpdateSingleSelectCell { row_index, option_id} => {
|
|
FilterScript::UpdateSingleSelectCell { row_index, option_id} => {
|
|
|
|
+ self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
self.update_single_select_cell(row_index, &option_id).await;
|
|
self.update_single_select_cell(row_index, &option_id).await;
|
|
}
|
|
}
|
|
FilterScript::InsertFilter { payload } => {
|
|
FilterScript::InsertFilter { payload } => {
|
|
|
|
+ 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} => {
|
|
-
|
|
|
|
|
|
+ self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
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,
|
|
@@ -139,6 +144,7 @@ impl GridFilterTest {
|
|
self.insert_filter(payload).await;
|
|
self.insert_filter(payload).await;
|
|
}
|
|
}
|
|
FilterScript::UpdateTextFilter { filter, condition, content} => {
|
|
FilterScript::UpdateTextFilter { filter, condition, content} => {
|
|
|
|
+ self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
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,
|
|
@@ -150,6 +156,7 @@ 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} => {
|
|
|
|
+ self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
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,
|
|
@@ -162,6 +169,7 @@ impl GridFilterTest {
|
|
self.insert_filter(payload).await;
|
|
self.insert_filter(payload).await;
|
|
}
|
|
}
|
|
FilterScript::CreateCheckboxFilter {condition} => {
|
|
FilterScript::CreateCheckboxFilter {condition} => {
|
|
|
|
+ self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
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
|
|
@@ -171,6 +179,7 @@ impl GridFilterTest {
|
|
self.insert_filter(payload).await;
|
|
self.insert_filter(payload).await;
|
|
}
|
|
}
|
|
FilterScript::CreateDateFilter { condition, start, end, timestamp} => {
|
|
FilterScript::CreateDateFilter { condition, start, end, timestamp} => {
|
|
|
|
+ self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
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,
|
|
@@ -184,6 +193,7 @@ impl GridFilterTest {
|
|
self.insert_filter(payload).await;
|
|
self.insert_filter(payload).await;
|
|
}
|
|
}
|
|
FilterScript::CreateMultiSelectFilter { condition, option_ids} => {
|
|
FilterScript::CreateMultiSelectFilter { condition, option_ids} => {
|
|
|
|
+ self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
let field_rev = self.get_first_field_rev(FieldType::MultiSelect);
|
|
let field_rev = self.get_first_field_rev(FieldType::MultiSelect);
|
|
let filter = SelectOptionFilterPB { condition, option_ids };
|
|
let filter = SelectOptionFilterPB { condition, option_ids };
|
|
let payload =
|
|
let payload =
|
|
@@ -191,6 +201,7 @@ impl GridFilterTest {
|
|
self.insert_filter(payload).await;
|
|
self.insert_filter(payload).await;
|
|
}
|
|
}
|
|
FilterScript::CreateSingleSelectFilter { condition, option_ids} => {
|
|
FilterScript::CreateSingleSelectFilter { condition, option_ids} => {
|
|
|
|
+ self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
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 =
|
|
@@ -198,6 +209,7 @@ impl GridFilterTest {
|
|
self.insert_filter(payload).await;
|
|
self.insert_filter(payload).await;
|
|
}
|
|
}
|
|
FilterScript::CreateChecklistFilter { condition} => {
|
|
FilterScript::CreateChecklistFilter { condition} => {
|
|
|
|
+ self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
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 };
|
|
@@ -216,6 +228,7 @@ impl GridFilterTest {
|
|
|
|
|
|
}
|
|
}
|
|
FilterScript::DeleteFilter { filter_id, filter_type } => {
|
|
FilterScript::DeleteFilter { filter_id, filter_type } => {
|
|
|
|
+ self.recv = Some(self.editor.subscribe_view_changed(&self.view_id()).await.unwrap());
|
|
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();
|
|
}
|
|
}
|
|
@@ -224,24 +237,21 @@ impl GridFilterTest {
|
|
assert_eq!(expected_setting, setting);
|
|
assert_eq!(expected_setting, setting);
|
|
}
|
|
}
|
|
FilterScript::AssertFilterChanged { visible_row_len, hide_row_len} => {
|
|
FilterScript::AssertFilterChanged { visible_row_len, hide_row_len} => {
|
|
- let editor = self.editor.clone();
|
|
|
|
- let view_id = self.view_id();
|
|
|
|
- let mut receiver =
|
|
|
|
- tokio::spawn(async move {
|
|
|
|
- editor.subscribe_view_changed(&view_id).await.unwrap()
|
|
|
|
- }).await.unwrap();
|
|
|
|
- match tokio::time::timeout(Duration::from_secs(2), receiver.recv()).await {
|
|
|
|
- Ok(changed) => {
|
|
|
|
- //
|
|
|
|
- match changed.unwrap() { GridViewChanged::DidReceiveFilterResult(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 task timeout: {:?}", e);
|
|
|
|
|
|
+ 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::DidReceiveFilterResult(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 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();
|