script.rs 3.4 KB

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