script.rs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. use crate::grid::block_test::util::GridRowTestBuilder;
  2. use crate::grid::grid_editor::GridEditorTest;
  3. use flowy_grid::entities::{CellIdentifier, RowInfo};
  4. use flowy_grid_data_model::revision::{
  5. GridBlockMetaRevision, GridBlockMetaRevisionChangeset, RowMetaChangeset, RowRevision,
  6. };
  7. use std::sync::Arc;
  8. pub enum RowScript {
  9. CreateEmptyRow,
  10. CreateRow {
  11. row_rev: RowRevision,
  12. },
  13. UpdateRow {
  14. changeset: RowMetaChangeset,
  15. },
  16. AssertRow {
  17. expected_row: RowRevision,
  18. },
  19. DeleteRows {
  20. row_ids: Vec<String>,
  21. },
  22. AssertCell {
  23. row_id: String,
  24. field_id: String,
  25. expected_display: Option<String>,
  26. },
  27. AssertRowCount(usize),
  28. CreateBlock {
  29. block: GridBlockMetaRevision,
  30. },
  31. UpdateBlock {
  32. changeset: GridBlockMetaRevisionChangeset,
  33. },
  34. AssertBlockCount(usize),
  35. AssertBlock {
  36. block_index: usize,
  37. row_count: i32,
  38. start_row_index: i32,
  39. },
  40. AssertBlockEqual {
  41. block_index: usize,
  42. block: GridBlockMetaRevision,
  43. },
  44. }
  45. pub struct GridRowTest {
  46. inner: GridEditorTest,
  47. }
  48. impl GridRowTest {
  49. pub async fn new() -> Self {
  50. let editor_test = GridEditorTest::new().await;
  51. Self { inner: editor_test }
  52. }
  53. pub fn last_row(&self) -> Option<RowRevision> {
  54. self.row_revs.last().map(|a| a.clone().as_ref().clone())
  55. }
  56. pub async fn run_scripts(&mut self, scripts: Vec<RowScript>) {
  57. for script in scripts {
  58. self.run_script(script).await;
  59. }
  60. }
  61. pub fn row_builder(&self) -> GridRowTestBuilder {
  62. GridRowTestBuilder::new(self.block_id(), &self.field_revs)
  63. }
  64. pub async fn run_script(&mut self, script: RowScript) {
  65. match script {
  66. RowScript::CreateEmptyRow => {
  67. let row_order = self.editor.create_row(None).await.unwrap();
  68. self.row_order_by_row_id
  69. .insert(row_order.row_id().to_owned(), row_order);
  70. self.row_revs = self.get_row_revs().await;
  71. self.block_meta_revs = self.editor.get_block_meta_revs().await.unwrap();
  72. }
  73. RowScript::CreateRow { row_rev } => {
  74. let row_orders = self.editor.insert_rows(vec![row_rev]).await.unwrap();
  75. for row_order in row_orders {
  76. self.row_order_by_row_id
  77. .insert(row_order.row_id().to_owned(), row_order);
  78. }
  79. self.row_revs = self.get_row_revs().await;
  80. self.block_meta_revs = self.editor.get_block_meta_revs().await.unwrap();
  81. }
  82. RowScript::UpdateRow { changeset: change } => self.editor.update_row(change).await.unwrap(),
  83. RowScript::DeleteRows { row_ids } => {
  84. let row_orders = row_ids
  85. .into_iter()
  86. .map(|row_id| self.row_order_by_row_id.get(&row_id).unwrap().clone())
  87. .collect::<Vec<RowInfo>>();
  88. self.editor.delete_rows(row_orders).await.unwrap();
  89. self.row_revs = self.get_row_revs().await;
  90. self.block_meta_revs = self.editor.get_block_meta_revs().await.unwrap();
  91. }
  92. RowScript::AssertCell {
  93. row_id,
  94. field_id,
  95. expected_display,
  96. } => {
  97. let id = CellIdentifier {
  98. grid_id: self.grid_id.clone(),
  99. field_id,
  100. row_id,
  101. };
  102. let display = self.editor.get_cell_display(&id).await;
  103. match expected_display {
  104. None => {}
  105. Some(expected_display) => {
  106. assert_eq!(display.unwrap(), expected_display);
  107. }
  108. }
  109. }
  110. RowScript::AssertRow { expected_row } => {
  111. let row = &*self
  112. .row_revs
  113. .iter()
  114. .find(|row| row.id == expected_row.id)
  115. .cloned()
  116. .unwrap();
  117. assert_eq!(&expected_row, row);
  118. }
  119. RowScript::AssertRowCount(expected_row_count) => {
  120. assert_eq!(expected_row_count, self.row_revs.len());
  121. }
  122. RowScript::CreateBlock { block } => {
  123. self.editor.create_block(block).await.unwrap();
  124. self.block_meta_revs = self.editor.get_block_meta_revs().await.unwrap();
  125. }
  126. RowScript::UpdateBlock { changeset: change } => {
  127. self.editor.update_block(change).await.unwrap();
  128. }
  129. RowScript::AssertBlockCount(count) => {
  130. assert_eq!(self.editor.get_block_meta_revs().await.unwrap().len(), count);
  131. }
  132. RowScript::AssertBlock {
  133. block_index,
  134. row_count,
  135. start_row_index,
  136. } => {
  137. assert_eq!(self.block_meta_revs[block_index].row_count, row_count);
  138. assert_eq!(self.block_meta_revs[block_index].start_row_index, start_row_index);
  139. }
  140. RowScript::AssertBlockEqual { block_index, block } => {
  141. let blocks = self.editor.get_block_meta_revs().await.unwrap();
  142. let compared_block = blocks[block_index].clone();
  143. assert_eq!(compared_block, Arc::new(block));
  144. }
  145. }
  146. }
  147. }
  148. impl std::ops::Deref for GridRowTest {
  149. type Target = GridEditorTest;
  150. fn deref(&self) -> &Self::Target {
  151. &self.inner
  152. }
  153. }
  154. impl std::ops::DerefMut for GridRowTest {
  155. fn deref_mut(&mut self) -> &mut Self::Target {
  156. &mut self.inner
  157. }
  158. }