66use std:: time:: Duration ;
77use bytes:: Bytes ;
88use futures:: TryFutureExt ;
9+ use tokio:: sync:: broadcast:: Receiver ;
910use 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 } ;
1011use flowy_grid:: services:: field:: { SelectOptionCellChangeset , SelectOptionIds } ;
1112use flowy_grid:: services:: setting:: GridSettingChangesetBuilder ;
@@ -89,13 +90,15 @@ pub enum FilterScript {
8990
9091pub struct GridFilterTest {
9192 inner : GridEditorTest ,
93+ recv : Option < Receiver < GridViewChanged > > ,
9294}
9395
9496impl GridFilterTest {
9597 pub async fn new ( ) -> Self {
9698 let editor_test = GridEditorTest :: new_table ( ) . await ;
9799 Self {
98- inner : editor_test
100+ inner : editor_test,
101+ recv : None ,
99102 }
100103 }
101104
@@ -116,17 +119,19 @@ impl GridFilterTest {
116119 pub async fn run_script ( & mut self , script : FilterScript ) {
117120 match script {
118121 FilterScript :: UpdateTextCell { row_index, text} => {
122+ self . recv = Some ( self . editor . subscribe_view_changed ( & self . view_id ( ) ) . await . unwrap ( ) ) ;
119123 self . update_text_cell ( row_index, & text) . await ;
120124 }
121-
122125 FilterScript :: UpdateSingleSelectCell { row_index, option_id} => {
126+ self . recv = Some ( self . editor . subscribe_view_changed ( & self . view_id ( ) ) . await . unwrap ( ) ) ;
123127 self . update_single_select_cell ( row_index, & option_id) . await ;
124128 }
125129 FilterScript :: InsertFilter { payload } => {
130+ self . recv = Some ( self . editor . subscribe_view_changed ( & self . view_id ( ) ) . await . unwrap ( ) ) ;
126131 self . insert_filter ( payload) . await ;
127132 }
128133 FilterScript :: CreateTextFilter { condition, content} => {
129-
134+ self . recv = Some ( self . editor . subscribe_view_changed ( & self . view_id ( ) ) . await . unwrap ( ) ) ;
130135 let field_rev = self . get_first_field_rev ( FieldType :: RichText ) ;
131136 let text_filter= TextFilterPB {
132137 condition,
@@ -139,6 +144,7 @@ impl GridFilterTest {
139144 self . insert_filter ( payload) . await ;
140145 }
141146 FilterScript :: UpdateTextFilter { filter, condition, content} => {
147+ self . recv = Some ( self . editor . subscribe_view_changed ( & self . view_id ( ) ) . await . unwrap ( ) ) ;
142148 let params = AlterFilterParams {
143149 view_id : self . view_id ( ) ,
144150 field_id : filter. field_id ,
@@ -150,6 +156,7 @@ impl GridFilterTest {
150156 self . editor . create_or_update_filter ( params) . await . unwrap ( ) ;
151157 }
152158 FilterScript :: CreateNumberFilter { condition, content} => {
159+ self . recv = Some ( self . editor . subscribe_view_changed ( & self . view_id ( ) ) . await . unwrap ( ) ) ;
153160 let field_rev = self . get_first_field_rev ( FieldType :: Number ) ;
154161 let number_filter = NumberFilterPB {
155162 condition,
@@ -162,6 +169,7 @@ impl GridFilterTest {
162169 self . insert_filter ( payload) . await ;
163170 }
164171 FilterScript :: CreateCheckboxFilter { condition} => {
172+ self . recv = Some ( self . editor . subscribe_view_changed ( & self . view_id ( ) ) . await . unwrap ( ) ) ;
165173 let field_rev = self . get_first_field_rev ( FieldType :: Checkbox ) ;
166174 let checkbox_filter = CheckboxFilterPB {
167175 condition
@@ -171,6 +179,7 @@ impl GridFilterTest {
171179 self . insert_filter ( payload) . await ;
172180 }
173181 FilterScript :: CreateDateFilter { condition, start, end, timestamp} => {
182+ self . recv = Some ( self . editor . subscribe_view_changed ( & self . view_id ( ) ) . await . unwrap ( ) ) ;
174183 let field_rev = self . get_first_field_rev ( FieldType :: DateTime ) ;
175184 let date_filter = DateFilterPB {
176185 condition,
@@ -184,20 +193,23 @@ impl GridFilterTest {
184193 self . insert_filter ( payload) . await ;
185194 }
186195 FilterScript :: CreateMultiSelectFilter { condition, option_ids} => {
196+ self . recv = Some ( self . editor . subscribe_view_changed ( & self . view_id ( ) ) . await . unwrap ( ) ) ;
187197 let field_rev = self . get_first_field_rev ( FieldType :: MultiSelect ) ;
188198 let filter = SelectOptionFilterPB { condition, option_ids } ;
189199 let payload =
190200 AlterFilterPayloadPB :: new ( & self . view_id ( ) , field_rev, filter) ;
191201 self . insert_filter ( payload) . await ;
192202 }
193203 FilterScript :: CreateSingleSelectFilter { condition, option_ids} => {
204+ self . recv = Some ( self . editor . subscribe_view_changed ( & self . view_id ( ) ) . await . unwrap ( ) ) ;
194205 let field_rev = self . get_first_field_rev ( FieldType :: SingleSelect ) ;
195206 let filter = SelectOptionFilterPB { condition, option_ids } ;
196207 let payload =
197208 AlterFilterPayloadPB :: new ( & self . view_id ( ) , field_rev, filter) ;
198209 self . insert_filter ( payload) . await ;
199210 }
200211 FilterScript :: CreateChecklistFilter { condition} => {
212+ self . recv = Some ( self . editor . subscribe_view_changed ( & self . view_id ( ) ) . await . unwrap ( ) ) ;
201213 let field_rev = self . get_first_field_rev ( FieldType :: Checklist ) ;
202214 // let type_option = self.get_checklist_type_option(&field_rev.id);
203215 let filter = ChecklistFilterPB { condition } ;
@@ -216,6 +228,7 @@ impl GridFilterTest {
216228
217229 }
218230 FilterScript :: DeleteFilter { filter_id, filter_type } => {
231+ self . recv = Some ( self . editor . subscribe_view_changed ( & self . view_id ( ) ) . await . unwrap ( ) ) ;
219232 let params = DeleteFilterParams { view_id : self . view_id ( ) , filter_type, filter_id } ;
220233 let _ = self . editor . delete_filter ( params) . await . unwrap ( ) ;
221234 }
@@ -224,24 +237,21 @@ impl GridFilterTest {
224237 assert_eq ! ( expected_setting, setting) ;
225238 }
226239 FilterScript :: AssertFilterChanged { visible_row_len, hide_row_len} => {
227- let editor = self . editor . clone ( ) ;
228- let view_id = self . view_id ( ) ;
229- let mut receiver =
230- tokio:: spawn ( async move {
231- editor. subscribe_view_changed ( & view_id) . await . unwrap ( )
232- } ) . await . unwrap ( ) ;
233- match tokio:: time:: timeout ( Duration :: from_secs ( 2 ) , receiver. recv ( ) ) . await {
234- Ok ( changed) => {
235- //
236- match changed. unwrap ( ) { GridViewChanged :: DidReceiveFilterResult ( changed) => {
237- assert_eq ! ( changed. visible_rows. len( ) , visible_row_len, "visible rows not match" ) ;
238- assert_eq ! ( changed. invisible_rows. len( ) , hide_row_len, "invisible rows not match" ) ;
239- } }
240- } ,
241- Err ( e) => {
242- panic ! ( "Process task timeout: {:?}" , e) ;
240+ if let Some ( mut receiver) = self . recv . take ( ) {
241+ match tokio:: time:: timeout ( Duration :: from_secs ( 2 ) , receiver. recv ( ) ) . await {
242+ Ok ( changed) => {
243+ //
244+ match changed. unwrap ( ) { GridViewChanged :: DidReceiveFilterResult ( changed) => {
245+ assert_eq ! ( changed. visible_rows. len( ) , visible_row_len, "visible rows not match" ) ;
246+ assert_eq ! ( changed. invisible_rows. len( ) , hide_row_len, "invisible rows not match" ) ;
247+ } }
248+ } ,
249+ Err ( e) => {
250+ panic ! ( "Process task timeout: {:?}" , e) ;
251+ }
243252 }
244253 }
254+
245255 }
246256 FilterScript :: AssertNumberOfVisibleRows { expected } => {
247257 let grid = self . editor . get_grid ( & self . view_id ( ) ) . await . unwrap ( ) ;
0 commit comments