| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  | use crate::grid::block_test::script::RowScript::*;
 | 
					
						
							| 
									
										
										
										
											2022-07-13 22:56:34 +08:00
										 |  |  | use crate::grid::block_test::script::{CreateRowScriptBuilder, GridRowTest};
 | 
					
						
							|  |  |  | use crate::grid::grid_editor::{COMPLETED, FACEBOOK, GOOGLE, PAUSED, TWITTER};
 | 
					
						
							| 
									
										
										
										
											2022-07-13 17:25:03 +08:00
										 |  |  | use flowy_grid::entities::FieldType;
 | 
					
						
							| 
									
										
										
										
											2022-07-13 22:56:34 +08:00
										 |  |  | use flowy_grid::services::field::{NO, SELECTION_IDS_SEPARATOR};
 | 
					
						
							| 
									
										
										
										
											2022-06-24 18:13:40 +08:00
										 |  |  | use flowy_grid_data_model::revision::RowMetaChangeset;
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | async fn grid_create_row_count_test() {
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |     let mut test = GridRowTest::new().await;
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  |     let scripts = vec![
 | 
					
						
							| 
									
										
										
										
											2022-07-17 12:57:25 +08:00
										 |  |  |         AssertRowCount(5),
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  |         CreateEmptyRow,
 | 
					
						
							|  |  |  |         CreateEmptyRow,
 | 
					
						
							|  |  |  |         CreateRow {
 | 
					
						
							| 
									
										
										
										
											2022-07-12 15:49:14 +08:00
										 |  |  |             row_rev: test.row_builder().build(),
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  |         },
 | 
					
						
							| 
									
										
										
										
											2022-07-17 12:57:25 +08:00
										 |  |  |         AssertRowCount(8),
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |     test.run_scripts(scripts).await;
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | async fn grid_update_row() {
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |     let mut test = GridRowTest::new().await;
 | 
					
						
							| 
									
										
										
										
											2022-07-12 15:49:14 +08:00
										 |  |  |     let row_rev = test.row_builder().build();
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  |     let changeset = RowMetaChangeset {
 | 
					
						
							| 
									
										
										
										
											2022-07-12 15:49:14 +08:00
										 |  |  |         row_id: row_rev.id.clone(),
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  |         height: None,
 | 
					
						
							|  |  |  |         visibility: None,
 | 
					
						
							|  |  |  |         cell_by_field_id: Default::default(),
 | 
					
						
							|  |  |  |     };
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-17 12:57:25 +08:00
										 |  |  |     let scripts = vec![AssertRowCount(5), CreateRow { row_rev }, UpdateRow { changeset }];
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  |     test.run_scripts(scripts).await;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |     let expected_row = test.last_row().unwrap();
 | 
					
						
							| 
									
										
										
										
											2022-07-17 12:57:25 +08:00
										 |  |  |     let scripts = vec![AssertRow { expected_row }, AssertRowCount(6)];
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  |     test.run_scripts(scripts).await;
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | async fn grid_delete_row() {
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |     let mut test = GridRowTest::new().await;
 | 
					
						
							| 
									
										
										
										
											2022-07-12 15:49:14 +08:00
										 |  |  |     let row_1 = test.row_builder().build();
 | 
					
						
							|  |  |  |     let row_2 = test.row_builder().build();
 | 
					
						
							|  |  |  |     let row_ids = vec![row_1.id.clone(), row_2.id.clone()];
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  |     let scripts = vec![
 | 
					
						
							| 
									
										
										
										
											2022-07-17 12:57:25 +08:00
										 |  |  |         AssertRowCount(5),
 | 
					
						
							| 
									
										
										
										
											2022-07-12 15:49:14 +08:00
										 |  |  |         CreateRow { row_rev: row_1 },
 | 
					
						
							|  |  |  |         CreateRow { row_rev: row_2 },
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  |         AssertBlockCount(1),
 | 
					
						
							|  |  |  |         AssertBlock {
 | 
					
						
							|  |  |  |             block_index: 0,
 | 
					
						
							| 
									
										
										
										
											2022-07-17 12:57:25 +08:00
										 |  |  |             row_count: 7,
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  |             start_row_index: 0,
 | 
					
						
							|  |  |  |         },
 | 
					
						
							|  |  |  |         DeleteRows { row_ids },
 | 
					
						
							|  |  |  |         AssertBlock {
 | 
					
						
							|  |  |  |             block_index: 0,
 | 
					
						
							| 
									
										
										
										
											2022-07-17 12:57:25 +08:00
										 |  |  |             row_count: 5,
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  |             start_row_index: 0,
 | 
					
						
							|  |  |  |         },
 | 
					
						
							|  |  |  |     ];
 | 
					
						
							|  |  |  |     test.run_scripts(scripts).await;
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | async fn grid_row_add_cells_test() {
 | 
					
						
							| 
									
										
										
										
											2022-07-11 17:15:16 +08:00
										 |  |  |     let mut test = GridRowTest::new().await;
 | 
					
						
							| 
									
										
										
										
											2022-07-13 22:56:34 +08:00
										 |  |  |     let mut builder = CreateRowScriptBuilder::new(&test);
 | 
					
						
							|  |  |  |     builder.insert(FieldType::RichText, "hello world", "hello world");
 | 
					
						
							|  |  |  |     builder.insert(FieldType::DateTime, "1647251762", "2022/03/14");
 | 
					
						
							|  |  |  |     builder.insert(FieldType::Number, "18,443", "$18,443.00");
 | 
					
						
							|  |  |  |     builder.insert(FieldType::Checkbox, "false", NO);
 | 
					
						
							|  |  |  |     builder.insert(FieldType::URL, "https://appflowy.io", "https://appflowy.io");
 | 
					
						
							|  |  |  |     builder.insert_single_select_cell(|mut options| options.remove(0), COMPLETED);
 | 
					
						
							|  |  |  |     builder.insert_multi_select_cell(
 | 
					
						
							|  |  |  |         |options| options,
 | 
					
						
							|  |  |  |         &vec![GOOGLE, FACEBOOK, TWITTER].join(SELECTION_IDS_SEPARATOR),
 | 
					
						
							|  |  |  |     );
 | 
					
						
							| 
									
										
										
										
											2022-07-14 09:29:05 +08:00
										 |  |  |     let scripts = builder.build();
 | 
					
						
							|  |  |  |     test.run_scripts(scripts).await;
 | 
					
						
							| 
									
										
										
										
											2022-07-13 22:56:34 +08:00
										 |  |  | }
 | 
					
						
							| 
									
										
										
										
											2022-07-12 15:49:14 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-13 22:56:34 +08:00
										 |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | async fn grid_row_insert_number_test() {
 | 
					
						
							|  |  |  |     let mut test = GridRowTest::new().await;
 | 
					
						
							|  |  |  |     for (val, expected) in &[("1647251762", "2022/03/14"), ("2022/03/14", ""), ("", "")] {
 | 
					
						
							|  |  |  |         let mut builder = CreateRowScriptBuilder::new(&test);
 | 
					
						
							|  |  |  |         builder.insert(FieldType::DateTime, val, expected);
 | 
					
						
							| 
									
										
										
										
											2022-07-14 09:29:05 +08:00
										 |  |  |         let scripts = builder.build();
 | 
					
						
							|  |  |  |         test.run_scripts(scripts).await;
 | 
					
						
							| 
									
										
										
										
											2022-07-13 22:56:34 +08:00
										 |  |  |     }
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | async fn grid_row_insert_date_test() {
 | 
					
						
							|  |  |  |     let mut test = GridRowTest::new().await;
 | 
					
						
							|  |  |  |     for (val, expected) in &[
 | 
					
						
							|  |  |  |         ("18,443", "$18,443.00"),
 | 
					
						
							|  |  |  |         ("0", "$0.00"),
 | 
					
						
							|  |  |  |         ("100000", "$100,000.00"),
 | 
					
						
							|  |  |  |         ("$100,000.00", "$100,000.00"),
 | 
					
						
							|  |  |  |         ("", ""),
 | 
					
						
							|  |  |  |     ] {
 | 
					
						
							|  |  |  |         let mut builder = CreateRowScriptBuilder::new(&test);
 | 
					
						
							|  |  |  |         builder.insert(FieldType::Number, val, expected);
 | 
					
						
							| 
									
										
										
										
											2022-07-14 09:29:05 +08:00
										 |  |  |         let scripts = builder.build();
 | 
					
						
							|  |  |  |         test.run_scripts(scripts).await;
 | 
					
						
							| 
									
										
										
										
											2022-07-13 22:56:34 +08:00
										 |  |  |     }
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | async fn grid_row_insert_single_select_test() {
 | 
					
						
							|  |  |  |     let mut test = GridRowTest::new().await;
 | 
					
						
							|  |  |  |     let mut builder = CreateRowScriptBuilder::new(&test);
 | 
					
						
							|  |  |  |     builder.insert_single_select_cell(|mut options| options.pop().unwrap(), PAUSED);
 | 
					
						
							| 
									
										
										
										
											2022-07-14 09:29:05 +08:00
										 |  |  |     let scripts = builder.build();
 | 
					
						
							|  |  |  |     test.run_scripts(scripts).await;
 | 
					
						
							| 
									
										
										
										
											2022-07-13 22:56:34 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | async fn grid_row_insert_multi_select_test() {
 | 
					
						
							|  |  |  |     let mut test = GridRowTest::new().await;
 | 
					
						
							|  |  |  |     let mut builder = CreateRowScriptBuilder::new(&test);
 | 
					
						
							|  |  |  |     builder.insert_multi_select_cell(
 | 
					
						
							|  |  |  |         |mut options| {
 | 
					
						
							|  |  |  |             options.remove(0);
 | 
					
						
							|  |  |  |             options
 | 
					
						
							| 
									
										
										
										
											2022-07-13 17:25:03 +08:00
										 |  |  |         },
 | 
					
						
							| 
									
										
										
										
											2022-07-13 22:56:34 +08:00
										 |  |  |         &vec![FACEBOOK, TWITTER].join(SELECTION_IDS_SEPARATOR),
 | 
					
						
							|  |  |  |     );
 | 
					
						
							| 
									
										
										
										
											2022-07-14 09:29:05 +08:00
										 |  |  |     let scripts = builder.build();
 | 
					
						
							|  |  |  |     test.run_scripts(scripts).await;
 | 
					
						
							| 
									
										
										
										
											2022-06-20 10:24:43 +08:00
										 |  |  | }
 |