| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  | use crate::grid::grid_editor::GridEditorTest;
 | 
					
						
							| 
									
										
										
										
											2022-11-29 13:34:10 +08:00
										 |  |  | use flowy_grid::entities::{CreateFieldParams, FieldChangesetParams, FieldType};
 | 
					
						
							| 
									
										
										
										
											2022-11-08 13:51:12 +08:00
										 |  |  | use grid_rev_model::FieldRevision;
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | pub enum FieldScript {
 | 
					
						
							|  |  |  |     CreateField {
 | 
					
						
							| 
									
										
										
										
											2022-10-10 21:21:29 +08:00
										 |  |  |         params: CreateFieldParams,
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |     },
 | 
					
						
							|  |  |  |     UpdateField {
 | 
					
						
							|  |  |  |         changeset: FieldChangesetParams,
 | 
					
						
							|  |  |  |     },
 | 
					
						
							|  |  |  |     DeleteField {
 | 
					
						
							|  |  |  |         field_rev: FieldRevision,
 | 
					
						
							|  |  |  |     },
 | 
					
						
							| 
									
										
										
										
											2022-11-29 13:34:10 +08:00
										 |  |  |     SwitchToField {
 | 
					
						
							|  |  |  |         field_id: String,
 | 
					
						
							|  |  |  |         new_field_type: FieldType,
 | 
					
						
							|  |  |  |     },
 | 
					
						
							|  |  |  |     UpdateTypeOption {
 | 
					
						
							|  |  |  |         field_id: String,
 | 
					
						
							|  |  |  |         type_option: Vec<u8>,
 | 
					
						
							|  |  |  |     },
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |     AssertFieldCount(usize),
 | 
					
						
							| 
									
										
										
										
											2022-11-26 21:28:08 +08:00
										 |  |  |     AssertFieldFrozen {
 | 
					
						
							|  |  |  |         field_index: usize,
 | 
					
						
							|  |  |  |         frozen: bool,
 | 
					
						
							|  |  |  |     },
 | 
					
						
							| 
									
										
										
										
											2022-10-10 21:21:29 +08:00
										 |  |  |     AssertFieldTypeOptionEqual {
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |         field_index: usize,
 | 
					
						
							| 
									
										
										
										
											2022-10-10 21:21:29 +08:00
										 |  |  |         expected_type_option_data: String,
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |     },
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | pub struct GridFieldTest {
 | 
					
						
							|  |  |  |     inner: GridEditorTest,
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | impl GridFieldTest {
 | 
					
						
							|  |  |  |     pub async fn new() -> Self {
 | 
					
						
							| 
									
										
										
										
											2022-08-18 21:43:05 +08:00
										 |  |  |         let editor_test = GridEditorTest::new_table().await;
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |         Self { inner: editor_test }
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     pub fn grid_id(&self) -> String {
 | 
					
						
							|  |  |  |         self.grid_id.clone()
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     pub fn field_count(&self) -> usize {
 | 
					
						
							|  |  |  |         self.field_count
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     pub async fn run_scripts(&mut self, scripts: Vec<FieldScript>) {
 | 
					
						
							|  |  |  |         for script in scripts {
 | 
					
						
							|  |  |  |             self.run_script(script).await;
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     pub async fn run_script(&mut self, script: FieldScript) {
 | 
					
						
							|  |  |  |         match script {
 | 
					
						
							|  |  |  |             FieldScript::CreateField { params } => {
 | 
					
						
							| 
									
										
										
										
											2022-10-10 21:21:29 +08:00
										 |  |  |                 self.field_count += 1;
 | 
					
						
							|  |  |  |                 self.editor
 | 
					
						
							| 
									
										
										
										
											2022-12-09 09:19:47 +08:00
										 |  |  |                     .create_new_field_rev_with_type_option(¶ms.field_type, params.type_option_data)
 | 
					
						
							| 
									
										
										
										
											2022-10-10 21:21:29 +08:00
										 |  |  |                     .await
 | 
					
						
							|  |  |  |                     .unwrap();
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |                 self.field_revs = self.editor.get_field_revs(None).await.unwrap();
 | 
					
						
							|  |  |  |                 assert_eq!(self.field_count, self.field_revs.len());
 | 
					
						
							|  |  |  |             }
 | 
					
						
							|  |  |  |             FieldScript::UpdateField { changeset: change } => {
 | 
					
						
							|  |  |  |                 self.editor.update_field(change).await.unwrap();
 | 
					
						
							|  |  |  |                 self.field_revs = self.editor.get_field_revs(None).await.unwrap();
 | 
					
						
							|  |  |  |             }
 | 
					
						
							|  |  |  |             FieldScript::DeleteField { field_rev } => {
 | 
					
						
							|  |  |  |                 if self.editor.contain_field(&field_rev.id).await {
 | 
					
						
							|  |  |  |                     self.field_count -= 1;
 | 
					
						
							|  |  |  |                 }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 self.editor.delete_field(&field_rev.id).await.unwrap();
 | 
					
						
							|  |  |  |                 self.field_revs = self.editor.get_field_revs(None).await.unwrap();
 | 
					
						
							|  |  |  |                 assert_eq!(self.field_count, self.field_revs.len());
 | 
					
						
							|  |  |  |             }
 | 
					
						
							| 
									
										
										
										
											2022-11-29 13:34:10 +08:00
										 |  |  |             FieldScript::SwitchToField {
 | 
					
						
							|  |  |  |                 field_id,
 | 
					
						
							|  |  |  |                 new_field_type,
 | 
					
						
							|  |  |  |             } => {
 | 
					
						
							|  |  |  |                 //
 | 
					
						
							|  |  |  |                 self.editor
 | 
					
						
							|  |  |  |                     .switch_to_field_type(&field_id, &new_field_type)
 | 
					
						
							|  |  |  |                     .await
 | 
					
						
							|  |  |  |                     .unwrap();
 | 
					
						
							|  |  |  |                 self.field_revs = self.editor.get_field_revs(None).await.unwrap();
 | 
					
						
							|  |  |  |             }
 | 
					
						
							|  |  |  |             FieldScript::UpdateTypeOption { field_id, type_option } => {
 | 
					
						
							|  |  |  |                 //
 | 
					
						
							|  |  |  |                 self.editor
 | 
					
						
							|  |  |  |                     .update_field_type_option(&self.grid_id, &field_id, type_option, None)
 | 
					
						
							|  |  |  |                     .await
 | 
					
						
							|  |  |  |                     .unwrap();
 | 
					
						
							|  |  |  |                 self.field_revs = self.editor.get_field_revs(None).await.unwrap();
 | 
					
						
							|  |  |  |             }
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |             FieldScript::AssertFieldCount(count) => {
 | 
					
						
							|  |  |  |                 assert_eq!(self.editor.get_field_revs(None).await.unwrap().len(), count);
 | 
					
						
							|  |  |  |             }
 | 
					
						
							| 
									
										
										
										
											2022-11-26 21:28:08 +08:00
										 |  |  |             FieldScript::AssertFieldFrozen { field_index, frozen } => {
 | 
					
						
							|  |  |  |                 let field_revs = self.editor.get_field_revs(None).await.unwrap();
 | 
					
						
							|  |  |  |                 let field_rev = field_revs[field_index].as_ref();
 | 
					
						
							|  |  |  |                 assert_eq!(field_rev.frozen, frozen);
 | 
					
						
							|  |  |  |             }
 | 
					
						
							| 
									
										
										
										
											2022-10-10 21:21:29 +08:00
										 |  |  |             FieldScript::AssertFieldTypeOptionEqual {
 | 
					
						
							|  |  |  |                 field_index,
 | 
					
						
							|  |  |  |                 expected_type_option_data,
 | 
					
						
							|  |  |  |             } => {
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |                 let field_revs = self.editor.get_field_revs(None).await.unwrap();
 | 
					
						
							| 
									
										
										
										
											2022-10-10 21:21:29 +08:00
										 |  |  |                 let field_rev = field_revs[field_index].as_ref();
 | 
					
						
							| 
									
										
										
										
											2022-10-11 21:51:02 +08:00
										 |  |  |                 let type_option_data = field_rev.get_type_option_str(field_rev.ty).unwrap();
 | 
					
						
							| 
									
										
										
										
											2022-10-10 21:21:29 +08:00
										 |  |  |                 assert_eq!(type_option_data, expected_type_option_data);
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |             }
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | impl std::ops::Deref for GridFieldTest {
 | 
					
						
							|  |  |  |     type Target = GridEditorTest;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     fn deref(&self) -> &Self::Target {
 | 
					
						
							|  |  |  |         &self.inner
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | impl std::ops::DerefMut for GridFieldTest {
 | 
					
						
							|  |  |  |     fn deref_mut(&mut self) -> &mut Self::Target {
 | 
					
						
							|  |  |  |         &mut self.inner
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | }
 |