chore: add 5 rows in test grid

This commit is contained in:
appflowy 2022-07-14 09:29:05 +08:00
parent d02acbae6e
commit ab80e9b0ed
12 changed files with 124 additions and 68 deletions

View File

@ -1,3 +1,4 @@
#![allow(clippy::module_inception)]
mod checkbox_tests; mod checkbox_tests;
mod checkbox_type_option; mod checkbox_type_option;
mod checkbox_type_option_entities; mod checkbox_type_option_entities;

View File

@ -1,3 +1,4 @@
#![allow(clippy::module_inception)]
mod date_tests; mod date_tests;
mod date_type_option; mod date_type_option;
mod date_type_option_entities; mod date_type_option_entities;

View File

@ -1,2 +1,3 @@
#![allow(clippy::module_inception)]
mod text_type_option; mod text_type_option;
pub use text_type_option::*; pub use text_type_option::*;

View File

@ -1,3 +1,4 @@
#![allow(clippy::module_inception)]
mod url_tests; mod url_tests;
mod url_type_option; mod url_type_option;
mod url_type_option_entities; mod url_type_option_entities;

View File

@ -270,14 +270,10 @@ impl GridRevisionEditor {
pub async fn create_row(&self, start_row_id: Option<String>) -> FlowyResult<RowInfo> { pub async fn create_row(&self, start_row_id: Option<String>) -> FlowyResult<RowInfo> {
let field_revs = self.grid_pad.read().await.get_field_revs(None)?; let field_revs = self.grid_pad.read().await.get_field_revs(None)?;
let field_revs_ref = field_revs
.iter()
.map(|field_rev| field_rev.as_ref())
.collect::<Vec<&FieldRevision>>();
let block_id = self.block_id().await?; let block_id = self.block_id().await?;
// insert empty row below the row whose id is upper_row_id // insert empty row below the row whose id is upper_row_id
let row_rev = RowRevisionBuilder::new(&field_revs_ref).build(&block_id); let row_rev = RowRevisionBuilder::new(&field_revs).build(&block_id);
let row_order = RowInfo::from(&row_rev); let row_order = RowInfo::from(&row_rev);
// insert the row // insert the row
@ -556,7 +552,7 @@ impl GridRevisionEditor {
drop(grid_pad); drop(grid_pad);
Ok(BuildGridContext { Ok(BuildGridContext {
field_revs: duplicated_fields, field_revs: duplicated_fields.into_iter().map(Arc::new).collect(),
blocks: duplicated_blocks, blocks: duplicated_blocks,
blocks_meta_data, blocks_meta_data,
}) })

View File

@ -4,18 +4,19 @@ use flowy_error::{FlowyError, FlowyResult};
use flowy_grid_data_model::revision::{gen_row_id, CellRevision, FieldRevision, RowRevision, DEFAULT_ROW_HEIGHT}; use flowy_grid_data_model::revision::{gen_row_id, CellRevision, FieldRevision, RowRevision, DEFAULT_ROW_HEIGHT};
use indexmap::IndexMap; use indexmap::IndexMap;
use std::collections::HashMap; use std::collections::HashMap;
use std::sync::Arc;
pub struct RowRevisionBuilder<'a> { pub struct RowRevisionBuilder<'a> {
field_rev_map: HashMap<&'a String, &'a FieldRevision>, field_rev_map: HashMap<&'a String, Arc<FieldRevision>>,
payload: CreateRowRevisionPayload, payload: CreateRowRevisionPayload,
} }
impl<'a> RowRevisionBuilder<'a> { impl<'a> RowRevisionBuilder<'a> {
pub fn new(fields: &'a [&'a FieldRevision]) -> Self { pub fn new(fields: &'a [Arc<FieldRevision>]) -> Self {
let field_rev_map = fields let field_rev_map = fields
.iter() .iter()
.map(|field| (&field.id, *field)) .map(|field| (&field.id, field.clone()))
.collect::<HashMap<&String, &'a FieldRevision>>(); .collect::<HashMap<&String, Arc<FieldRevision>>>();
let payload = CreateRowRevisionPayload { let payload = CreateRowRevisionPayload {
row_id: gen_row_id(), row_id: gen_row_id(),

View File

@ -79,8 +79,8 @@ async fn grid_row_add_cells_test() {
|options| options, |options| options,
&vec![GOOGLE, FACEBOOK, TWITTER].join(SELECTION_IDS_SEPARATOR), &vec![GOOGLE, FACEBOOK, TWITTER].join(SELECTION_IDS_SEPARATOR),
); );
let scripts = builder.build();
test.run_scripts(builder.build()).await; test.run_scripts(scripts).await;
} }
#[tokio::test] #[tokio::test]
@ -89,7 +89,8 @@ async fn grid_row_insert_number_test() {
for (val, expected) in &[("1647251762", "2022/03/14"), ("2022/03/14", ""), ("", "")] { for (val, expected) in &[("1647251762", "2022/03/14"), ("2022/03/14", ""), ("", "")] {
let mut builder = CreateRowScriptBuilder::new(&test); let mut builder = CreateRowScriptBuilder::new(&test);
builder.insert(FieldType::DateTime, val, expected); builder.insert(FieldType::DateTime, val, expected);
test.run_scripts(builder.build()).await; let scripts = builder.build();
test.run_scripts(scripts).await;
} }
} }
@ -105,7 +106,8 @@ async fn grid_row_insert_date_test() {
] { ] {
let mut builder = CreateRowScriptBuilder::new(&test); let mut builder = CreateRowScriptBuilder::new(&test);
builder.insert(FieldType::Number, val, expected); builder.insert(FieldType::Number, val, expected);
test.run_scripts(builder.build()).await; let scripts = builder.build();
test.run_scripts(scripts).await;
} }
} }
#[tokio::test] #[tokio::test]
@ -113,7 +115,8 @@ async fn grid_row_insert_single_select_test() {
let mut test = GridRowTest::new().await; let mut test = GridRowTest::new().await;
let mut builder = CreateRowScriptBuilder::new(&test); let mut builder = CreateRowScriptBuilder::new(&test);
builder.insert_single_select_cell(|mut options| options.pop().unwrap(), PAUSED); builder.insert_single_select_cell(|mut options| options.pop().unwrap(), PAUSED);
test.run_scripts(builder.build()).await; let scripts = builder.build();
test.run_scripts(scripts).await;
} }
#[tokio::test] #[tokio::test]
@ -127,6 +130,6 @@ async fn grid_row_insert_multi_select_test() {
}, },
&vec![FACEBOOK, TWITTER].join(SELECTION_IDS_SEPARATOR), &vec![FACEBOOK, TWITTER].join(SELECTION_IDS_SEPARATOR),
); );
let scripts = builder.build();
test.run_scripts(builder.build()).await; test.run_scripts(scripts).await;
} }

View File

@ -2,13 +2,9 @@ use crate::grid::block_test::script::RowScript::{AssertCell, CreateRow};
use crate::grid::block_test::util::GridRowTestBuilder; use crate::grid::block_test::util::GridRowTestBuilder;
use crate::grid::grid_editor::GridEditorTest; use crate::grid::grid_editor::GridEditorTest;
use flowy_grid::entities::{CellIdentifier, FieldType, RowInfo}; use flowy_grid::entities::{CellIdentifier, FieldType, RowInfo};
use flowy_grid::services::field::{ use flowy_grid::services::field::*;
CheckboxCellDataParser, DateCellDataParser, MultiSelectTypeOption, NumberCellDataParser, NumberTypeOption,
SelectOption, SelectOptionCellDataParser, SelectOptionIdsParser, SingleSelectTypeOption, TextCellDataParser,
URLCellDataParser, SELECTION_IDS_SEPARATOR,
};
use flowy_grid_data_model::revision::{ use flowy_grid_data_model::revision::{
FieldRevision, GridBlockMetaRevision, GridBlockMetaRevisionChangeset, RowMetaChangeset, RowRevision, GridBlockMetaRevision, GridBlockMetaRevisionChangeset, RowMetaChangeset, RowRevision,
}; };
use std::collections::HashMap; use std::collections::HashMap;
use std::sync::Arc; use std::sync::Arc;
@ -74,19 +70,7 @@ impl GridRowTest {
} }
pub fn row_builder(&self) -> GridRowTestBuilder { pub fn row_builder(&self) -> GridRowTestBuilder {
let field_revs_ref = self GridRowTestBuilder::new(self.block_id(), &self.field_revs)
.field_revs
.iter()
.map(|field_rev| field_rev.as_ref())
.collect::<Vec<&FieldRevision>>();
GridRowTestBuilder::new(
self.block_id(),
&self
.field_revs
.iter()
.map(|field_rev| field_rev.as_ref())
.collect::<Vec<&FieldRevision>>(),
)
} }
pub async fn run_script(&mut self, script: RowScript) { pub async fn run_script(&mut self, script: RowScript) {

View File

@ -1,4 +1,5 @@
use flowy_grid::entities::FieldType; use flowy_grid::entities::FieldType;
use std::sync::Arc;
use flowy_grid::services::field::{ use flowy_grid::services::field::{
DateCellChangeset, MultiSelectTypeOption, SelectOption, SingleSelectTypeOption, SELECTION_IDS_SEPARATOR, DateCellChangeset, MultiSelectTypeOption, SelectOption, SingleSelectTypeOption, SELECTION_IDS_SEPARATOR,
@ -10,12 +11,12 @@ use strum::EnumCount;
pub struct GridRowTestBuilder<'a> { pub struct GridRowTestBuilder<'a> {
block_id: String, block_id: String,
field_revs: &'a [&'a FieldRevision], field_revs: &'a [Arc<FieldRevision>],
inner_builder: RowRevisionBuilder<'a>, inner_builder: RowRevisionBuilder<'a>,
} }
impl<'a> GridRowTestBuilder<'a> { impl<'a> GridRowTestBuilder<'a> {
pub fn new(block_id: &str, field_revs: &'a [&'a FieldRevision]) -> Self { pub fn new(block_id: &str, field_revs: &'a [Arc<FieldRevision>]) -> Self {
assert_eq!(field_revs.len(), FieldType::COUNT); assert_eq!(field_revs.len(), FieldType::COUNT);
let inner_builder = RowRevisionBuilder::new(field_revs); let inner_builder = RowRevisionBuilder::new(field_revs);
Self { Self {
@ -68,16 +69,15 @@ impl<'a> GridRowTestBuilder<'a> {
url_field.id.clone() url_field.id.clone()
} }
#[allow(dead_code)]
pub fn insert_single_select_cell<F>(&mut self, f: F) -> String pub fn insert_single_select_cell<F>(&mut self, f: F) -> String
where where
F: Fn(&Vec<SelectOption>) -> &SelectOption, F: Fn(Vec<SelectOption>) -> SelectOption,
{ {
let single_select_field = self.field_rev_with_type(&FieldType::SingleSelect); let single_select_field = self.field_rev_with_type(&FieldType::SingleSelect);
let type_option = SingleSelectTypeOption::from(&single_select_field); let type_option = SingleSelectTypeOption::from(&single_select_field);
let option = f(&type_option.options); let option = f(type_option.options);
self.inner_builder self.inner_builder
.insert_select_option_cell(&single_select_field.id, option.id.clone()) .insert_select_option_cell(&single_select_field.id, option.id)
.unwrap(); .unwrap();
single_select_field.id.clone() single_select_field.id.clone()
@ -85,11 +85,11 @@ impl<'a> GridRowTestBuilder<'a> {
pub fn insert_multi_select_cell<F>(&mut self, f: F) -> String pub fn insert_multi_select_cell<F>(&mut self, f: F) -> String
where where
F: Fn(&Vec<SelectOption>) -> &Vec<SelectOption>, F: Fn(Vec<SelectOption>) -> Vec<SelectOption>,
{ {
let multi_select_field = self.field_rev_with_type(&FieldType::MultiSelect); let multi_select_field = self.field_rev_with_type(&FieldType::MultiSelect);
let type_option = MultiSelectTypeOption::from(&multi_select_field); let type_option = MultiSelectTypeOption::from(&multi_select_field);
let options = f(&type_option.options); let options = f(type_option.options);
let ops_ids = options let ops_ids = options
.iter() .iter()
.map(|option| option.id.clone()) .map(|option| option.id.clone())

View File

@ -1,6 +1,7 @@
#![allow(clippy::all)] #![allow(clippy::all)]
#![allow(dead_code)] #![allow(dead_code)]
#![allow(unused_imports)] #![allow(unused_imports)]
use crate::grid::block_test::util::GridRowTestBuilder;
use bytes::Bytes; use bytes::Bytes;
use flowy_grid::entities::*; use flowy_grid::entities::*;
use flowy_grid::services::field::SelectOption; use flowy_grid::services::field::SelectOption;
@ -158,7 +159,7 @@ fn make_test_grid() -> BuildGridContext {
FieldType::Checkbox => { FieldType::Checkbox => {
// Checkbox // Checkbox
let checkbox = CheckboxTypeOptionBuilder::default(); let checkbox = CheckboxTypeOptionBuilder::default();
let checkbox_field = FieldBuilder::new(checkbox).name("is done").visibility(true).build(); let checkbox_field = FieldBuilder::new(checkbox).name("is urgent").visibility(true).build();
grid_builder.add_field(checkbox_field); grid_builder.add_field(checkbox_field);
} }
FieldType::URL => { FieldType::URL => {
@ -171,24 +172,87 @@ fn make_test_grid() -> BuildGridContext {
} }
// We have many assumptions base on the number of the rows, so do not change the number of the loop. // We have many assumptions base on the number of the rows, so do not change the number of the loop.
for _i in 0..10 { for i in 0..5 {
let block_id = grid_builder.block_id().to_owned();
let field_revs = grid_builder.field_revs();
let mut row_builder = GridRowTestBuilder::new(&block_id, field_revs);
match i {
0 => {
for field_type in FieldType::iter() { for field_type in FieldType::iter() {
let field_type: FieldType = field_type;
// let mut row_builder = RowRevisionBuilder::new()
match field_type { match field_type {
FieldType::RichText => {} FieldType::RichText => row_builder.insert_text_cell("A"),
FieldType::Number => {} FieldType::Number => row_builder.insert_number_cell("1"),
FieldType::DateTime => {} FieldType::DateTime => row_builder.insert_date_cell("1647251762"),
FieldType::SingleSelect => {} FieldType::SingleSelect => {
FieldType::MultiSelect => {} row_builder.insert_single_select_cell(|mut options| options.remove(0))
FieldType::Checkbox => {} }
FieldType::URL => {} FieldType::Checkbox => row_builder.insert_checkbox_cell("true"),
_ => "".to_owned(),
};
} }
} }
1 => {
for field_type in FieldType::iter() {
match field_type {
FieldType::RichText => row_builder.insert_text_cell("B"),
FieldType::Number => row_builder.insert_number_cell("2"),
FieldType::DateTime => row_builder.insert_date_cell("1647251762"),
FieldType::SingleSelect => {
row_builder.insert_single_select_cell(|mut options| options.remove(0))
}
FieldType::Checkbox => row_builder.insert_checkbox_cell("true"),
_ => "".to_owned(),
};
}
}
2 => {
for field_type in FieldType::iter() {
match field_type {
FieldType::RichText => row_builder.insert_text_cell("C"),
FieldType::Number => row_builder.insert_number_cell("3"),
FieldType::DateTime => row_builder.insert_date_cell("1647251762"),
FieldType::SingleSelect => {
row_builder.insert_single_select_cell(|mut options| options.remove(1))
}
FieldType::Checkbox => row_builder.insert_checkbox_cell("false"),
_ => "".to_owned(),
};
}
}
3 => {
for field_type in FieldType::iter() {
match field_type {
FieldType::RichText => row_builder.insert_text_cell("D"),
FieldType::Number => row_builder.insert_number_cell("4"),
FieldType::DateTime => row_builder.insert_date_cell("1647251762"),
FieldType::SingleSelect => {
row_builder.insert_single_select_cell(|mut options| options.remove(1))
}
FieldType::Checkbox => row_builder.insert_checkbox_cell("false"),
_ => "".to_owned(),
};
}
}
4 => {
for field_type in FieldType::iter() {
match field_type {
FieldType::RichText => row_builder.insert_text_cell("E"),
FieldType::Number => row_builder.insert_number_cell("5"),
FieldType::DateTime => row_builder.insert_date_cell("1647251762"),
FieldType::SingleSelect => {
row_builder.insert_single_select_cell(|mut options| options.remove(2))
}
FieldType::Checkbox => row_builder.insert_checkbox_cell("false"),
_ => "".to_owned(),
};
}
}
_ => {}
}
let row_rev = row_builder.build();
grid_builder.add_row(row_rev);
} }
// assert_eq!(row_revs.len(), 10);
// .add_empty_row()
// .add_empty_row()
// .add_empty_row()
grid_builder.build() grid_builder.build()
} }

View File

@ -53,7 +53,7 @@ impl GridRevision {
pub fn from_build_context(grid_id: &str, context: BuildGridContext) -> Self { pub fn from_build_context(grid_id: &str, context: BuildGridContext) -> Self {
Self { Self {
grid_id: grid_id.to_owned(), grid_id: grid_id.to_owned(),
fields: context.field_revs.into_iter().map(Arc::new).collect(), fields: context.field_revs,
blocks: context.blocks.into_iter().map(Arc::new).collect(), blocks: context.blocks.into_iter().map(Arc::new).collect(),
setting: Default::default(), setting: Default::default(),
} }
@ -245,7 +245,7 @@ impl CellRevision {
#[derive(Clone, Default, Deserialize, Serialize)] #[derive(Clone, Default, Deserialize, Serialize)]
pub struct BuildGridContext { pub struct BuildGridContext {
pub field_revs: Vec<FieldRevision>, pub field_revs: Vec<Arc<FieldRevision>>,
pub blocks: Vec<GridBlockMetaRevision>, pub blocks: Vec<GridBlockMetaRevision>,
pub blocks_meta_data: Vec<GridBlockRevision>, pub blocks_meta_data: Vec<GridBlockRevision>,
} }

View File

@ -30,7 +30,7 @@ impl GridBuilder {
Self::default() Self::default()
} }
pub fn add_field(&mut self, field: FieldRevision) { pub fn add_field(&mut self, field: FieldRevision) {
self.build_context.field_revs.push(field); self.build_context.field_revs.push(Arc::new(field));
} }
pub fn add_row(&mut self, row_rev: RowRevision) { pub fn add_row(&mut self, row_rev: RowRevision) {
@ -41,13 +41,17 @@ impl GridBuilder {
} }
pub fn add_empty_row(&mut self) { pub fn add_empty_row(&mut self) {
let row = RowRevision::new(&self.build_context.blocks.first().unwrap().block_id); let row = RowRevision::new(self.block_id());
self.add_row(row); self.add_row(row);
} }
// pub fn field_revs(&self) -> Vec<FieldRevision> { pub fn field_revs(&self) -> &Vec<Arc<FieldRevision>> {
// self.build_context.field_revs &self.build_context.field_revs
// } }
pub fn block_id(&self) -> &str {
&self.build_context.blocks.first().unwrap().block_id
}
pub fn build(self) -> BuildGridContext { pub fn build(self) -> BuildGridContext {
self.build_context self.build_context