160 lines
5.5 KiB
Rust
Raw Normal View History

use crate::grid::grid_editor::GridEditorTest;
use flowy_database::entities::{CreateFieldParams, FieldChangesetParams, FieldType};
use flowy_database::services::cell::{stringify_cell_data, TypeCellData};
2023-01-30 11:11:19 +08:00
use grid_model::FieldRevision;
pub enum FieldScript {
CreateField {
2022-10-10 21:21:29 +08:00
params: CreateFieldParams,
},
UpdateField {
changeset: FieldChangesetParams,
},
DeleteField {
field_rev: FieldRevision,
},
SwitchToField {
field_id: String,
new_field_type: FieldType,
},
UpdateTypeOption {
field_id: String,
type_option: Vec<u8>,
},
AssertFieldCount(usize),
AssertFieldFrozen {
field_index: usize,
frozen: bool,
},
2022-10-10 21:21:29 +08:00
AssertFieldTypeOptionEqual {
field_index: usize,
2022-10-10 21:21:29 +08:00
expected_type_option_data: String,
},
2022-12-20 08:39:46 +08:00
AssertCellContent {
field_id: String,
row_index: usize,
from_field_type: FieldType,
expected_content: String,
},
}
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;
Self { inner: editor_test }
}
2022-12-20 08:39:46 +08:00
pub fn view_id(&self) -> String {
self.view_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
.create_new_field_rev_with_type_option(&params.field_type, params.type_option_data)
2022-10-10 21:21:29 +08:00
.await
.unwrap();
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());
}
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.view_id, &field_id, type_option, None)
.await
.unwrap();
self.field_revs = self.editor.get_field_revs(None).await.unwrap();
}
FieldScript::AssertFieldCount(count) => {
assert_eq!(self.editor.get_field_revs(None).await.unwrap().len(), count);
}
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,
} => {
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();
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-12-20 08:39:46 +08:00
FieldScript::AssertCellContent {
field_id,
row_index,
from_field_type,
expected_content,
} => {
let field_rev = self.editor.get_field_rev(&field_id).await.unwrap();
let field_type: FieldType = field_rev.ty.into();
let rows = self.editor.get_database(&self.view_id()).await.unwrap().rows;
2022-12-20 08:39:46 +08:00
let row = rows.get(row_index).unwrap();
let row_rev = self.editor.get_row_rev(&row.id).await.unwrap().unwrap();
let cell_rev = row_rev.cells.get(&field_id).unwrap().clone();
let type_cell_data: TypeCellData = cell_rev.try_into().unwrap();
let content = stringify_cell_data(type_cell_data.cell_str, &from_field_type, &field_type, &field_rev);
2022-12-20 08:39:46 +08:00
assert_eq!(content, expected_content);
}
}
}
}
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
}
}