script.rs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. use crate::grid::grid_editor::GridEditorTest;
  2. use flowy_grid::entities::{CreateFieldParams, FieldChangesetParams, FieldType};
  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. SwitchToField {
  15. field_id: String,
  16. new_field_type: FieldType,
  17. },
  18. UpdateTypeOption {
  19. field_id: String,
  20. type_option: Vec<u8>,
  21. },
  22. AssertFieldCount(usize),
  23. AssertFieldFrozen {
  24. field_index: usize,
  25. frozen: bool,
  26. },
  27. AssertFieldTypeOptionEqual {
  28. field_index: usize,
  29. expected_type_option_data: String,
  30. },
  31. }
  32. pub struct GridFieldTest {
  33. inner: GridEditorTest,
  34. }
  35. impl GridFieldTest {
  36. pub async fn new() -> Self {
  37. let editor_test = GridEditorTest::new_table().await;
  38. Self { inner: editor_test }
  39. }
  40. pub fn grid_id(&self) -> String {
  41. self.grid_id.clone()
  42. }
  43. pub fn field_count(&self) -> usize {
  44. self.field_count
  45. }
  46. pub async fn run_scripts(&mut self, scripts: Vec<FieldScript>) {
  47. for script in scripts {
  48. self.run_script(script).await;
  49. }
  50. }
  51. pub async fn run_script(&mut self, script: FieldScript) {
  52. match script {
  53. FieldScript::CreateField { params } => {
  54. self.field_count += 1;
  55. self.editor
  56. .create_new_field_rev(&params.field_type, params.type_option_data)
  57. .await
  58. .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::UpdateField { changeset: change } => {
  63. self.editor.update_field(change).await.unwrap();
  64. self.field_revs = self.editor.get_field_revs(None).await.unwrap();
  65. }
  66. FieldScript::DeleteField { field_rev } => {
  67. if self.editor.contain_field(&field_rev.id).await {
  68. self.field_count -= 1;
  69. }
  70. self.editor.delete_field(&field_rev.id).await.unwrap();
  71. self.field_revs = self.editor.get_field_revs(None).await.unwrap();
  72. assert_eq!(self.field_count, self.field_revs.len());
  73. }
  74. FieldScript::SwitchToField {
  75. field_id,
  76. new_field_type,
  77. } => {
  78. //
  79. self.editor
  80. .switch_to_field_type(&field_id, &new_field_type)
  81. .await
  82. .unwrap();
  83. self.field_revs = self.editor.get_field_revs(None).await.unwrap();
  84. }
  85. FieldScript::UpdateTypeOption { field_id, type_option } => {
  86. //
  87. self.editor
  88. .update_field_type_option(&self.grid_id, &field_id, type_option, None)
  89. .await
  90. .unwrap();
  91. self.field_revs = self.editor.get_field_revs(None).await.unwrap();
  92. }
  93. FieldScript::AssertFieldCount(count) => {
  94. assert_eq!(self.editor.get_field_revs(None).await.unwrap().len(), count);
  95. }
  96. FieldScript::AssertFieldFrozen { field_index, frozen } => {
  97. let field_revs = self.editor.get_field_revs(None).await.unwrap();
  98. let field_rev = field_revs[field_index].as_ref();
  99. assert_eq!(field_rev.frozen, frozen);
  100. }
  101. FieldScript::AssertFieldTypeOptionEqual {
  102. field_index,
  103. expected_type_option_data,
  104. } => {
  105. let field_revs = self.editor.get_field_revs(None).await.unwrap();
  106. let field_rev = field_revs[field_index].as_ref();
  107. let type_option_data = field_rev.get_type_option_str(field_rev.ty).unwrap();
  108. assert_eq!(type_option_data, expected_type_option_data);
  109. }
  110. }
  111. }
  112. }
  113. impl std::ops::Deref for GridFieldTest {
  114. type Target = GridEditorTest;
  115. fn deref(&self) -> &Self::Target {
  116. &self.inner
  117. }
  118. }
  119. impl std::ops::DerefMut for GridFieldTest {
  120. fn deref_mut(&mut self) -> &mut Self::Target {
  121. &mut self.inner
  122. }
  123. }