script.rs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. use crate::grid::grid_editor::GridEditorTest;
  2. use flowy_grid::entities::{CreateFieldParams, FieldChangesetParams};
  3. use flowy_grid_data_model::revision::FieldRevision;
  4. pub enum FieldScript {
  5. CreateField {
  6. params: CreateFieldParams,
  7. },
  8. UpdateField {
  9. changeset: FieldChangesetParams,
  10. },
  11. DeleteField {
  12. field_rev: FieldRevision,
  13. },
  14. AssertFieldCount(usize),
  15. AssertFieldTypeOptionEqual {
  16. field_index: usize,
  17. expected_type_option_data: String,
  18. },
  19. }
  20. pub struct GridFieldTest {
  21. inner: GridEditorTest,
  22. }
  23. impl GridFieldTest {
  24. pub async fn new() -> Self {
  25. let editor_test = GridEditorTest::new_table().await;
  26. Self { inner: editor_test }
  27. }
  28. pub fn grid_id(&self) -> String {
  29. self.grid_id.clone()
  30. }
  31. pub fn field_count(&self) -> usize {
  32. self.field_count
  33. }
  34. pub async fn run_scripts(&mut self, scripts: Vec<FieldScript>) {
  35. for script in scripts {
  36. self.run_script(script).await;
  37. }
  38. }
  39. pub async fn run_script(&mut self, script: FieldScript) {
  40. match script {
  41. FieldScript::CreateField { params } => {
  42. self.field_count += 1;
  43. self.editor
  44. .create_new_field_rev(&params.field_type, params.type_option_data)
  45. .await
  46. .unwrap();
  47. self.field_revs = self.editor.get_field_revs(None).await.unwrap();
  48. assert_eq!(self.field_count, self.field_revs.len());
  49. }
  50. FieldScript::UpdateField { changeset: change } => {
  51. self.editor.update_field(change).await.unwrap();
  52. self.field_revs = self.editor.get_field_revs(None).await.unwrap();
  53. }
  54. FieldScript::DeleteField { field_rev } => {
  55. if self.editor.contain_field(&field_rev.id).await {
  56. self.field_count -= 1;
  57. }
  58. self.editor.delete_field(&field_rev.id).await.unwrap();
  59. self.field_revs = self.editor.get_field_revs(None).await.unwrap();
  60. assert_eq!(self.field_count, self.field_revs.len());
  61. }
  62. FieldScript::AssertFieldCount(count) => {
  63. assert_eq!(self.editor.get_field_revs(None).await.unwrap().len(), count);
  64. }
  65. FieldScript::AssertFieldTypeOptionEqual {
  66. field_index,
  67. expected_type_option_data,
  68. } => {
  69. let field_revs = self.editor.get_field_revs(None).await.unwrap();
  70. let field_rev = field_revs[field_index].as_ref();
  71. let type_option_data = field_rev.get_type_option_str(field_rev.ty).unwrap();
  72. assert_eq!(type_option_data, expected_type_option_data);
  73. }
  74. }
  75. }
  76. }
  77. impl std::ops::Deref for GridFieldTest {
  78. type Target = GridEditorTest;
  79. fn deref(&self) -> &Self::Target {
  80. &self.inner
  81. }
  82. }
  83. impl std::ops::DerefMut for GridFieldTest {
  84. fn deref_mut(&mut self) -> &mut Self::Target {
  85. &mut self.inner
  86. }
  87. }