grid_test.rs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. use crate::grid::script::EditorScript::*;
  2. use crate::grid::script::*;
  3. use flowy_grid::services::field::{SelectOption, SingleSelectDescription};
  4. use flowy_grid_data_model::entities::{FieldChangeset, GridBlock, GridBlockChangeset};
  5. #[tokio::test]
  6. async fn default_grid_test() {
  7. let scripts = vec![AssertFieldCount(2), AssertGridMetaPad];
  8. GridEditorTest::new().await.run_scripts(scripts).await;
  9. }
  10. #[tokio::test]
  11. async fn grid_create_field() {
  12. let text_field = create_text_field();
  13. let single_select_field = create_single_select_field();
  14. let scripts = vec![
  15. AssertFieldCount(2),
  16. CreateField {
  17. field: text_field.clone(),
  18. },
  19. AssertFieldEqual {
  20. field_index: 2,
  21. field: text_field,
  22. },
  23. AssertFieldCount(3),
  24. CreateField {
  25. field: single_select_field.clone(),
  26. },
  27. AssertFieldEqual {
  28. field_index: 3,
  29. field: single_select_field,
  30. },
  31. AssertFieldCount(4),
  32. ];
  33. GridEditorTest::new().await.run_scripts(scripts).await;
  34. }
  35. #[tokio::test]
  36. async fn grid_create_duplicate_field() {
  37. let text_field = create_text_field();
  38. let scripts = vec![
  39. AssertFieldCount(2),
  40. CreateField {
  41. field: text_field.clone(),
  42. },
  43. AssertFieldCount(3),
  44. CreateField {
  45. field: text_field.clone(),
  46. },
  47. AssertFieldCount(3),
  48. ];
  49. GridEditorTest::new().await.run_scripts(scripts).await;
  50. }
  51. #[tokio::test]
  52. async fn grid_update_field_with_empty_change() {
  53. let single_select_field = create_single_select_field();
  54. let change = FieldChangeset {
  55. field_id: single_select_field.id.clone(),
  56. name: None,
  57. desc: None,
  58. field_type: None,
  59. frozen: None,
  60. visibility: None,
  61. width: None,
  62. type_options: None,
  63. };
  64. let scripts = vec![
  65. CreateField {
  66. field: single_select_field.clone(),
  67. },
  68. UpdateField { change },
  69. AssertFieldEqual {
  70. field_index: 2,
  71. field: single_select_field,
  72. },
  73. ];
  74. GridEditorTest::new().await.run_scripts(scripts).await;
  75. }
  76. #[tokio::test]
  77. async fn grid_update_field() {
  78. let single_select_field = create_single_select_field();
  79. let mut cloned_field = single_select_field.clone();
  80. let mut single_select_type_options = SingleSelectDescription::from(&single_select_field);
  81. single_select_type_options.options.push(SelectOption::new("Unknown"));
  82. let change = FieldChangeset {
  83. field_id: single_select_field.id.clone(),
  84. name: None,
  85. desc: None,
  86. field_type: None,
  87. frozen: Some(true),
  88. visibility: None,
  89. width: Some(1000),
  90. type_options: Some(single_select_type_options.clone().into()),
  91. };
  92. cloned_field.frozen = true;
  93. cloned_field.width = 1000;
  94. cloned_field.type_options = single_select_type_options.into();
  95. let scripts = vec![
  96. CreateField {
  97. field: single_select_field.clone(),
  98. },
  99. UpdateField { change },
  100. AssertFieldEqual {
  101. field_index: 2,
  102. field: cloned_field,
  103. },
  104. AssertGridMetaPad,
  105. ];
  106. GridEditorTest::new().await.run_scripts(scripts).await;
  107. }
  108. #[tokio::test]
  109. async fn grid_delete_field() {
  110. let text_field = create_text_field();
  111. let scripts = vec![
  112. CreateField {
  113. field: text_field.clone(),
  114. },
  115. AssertFieldCount(3),
  116. DeleteField { field: text_field },
  117. AssertFieldCount(2),
  118. ];
  119. GridEditorTest::new().await.run_scripts(scripts).await;
  120. }
  121. #[tokio::test]
  122. async fn grid_create_block() {
  123. let grid_block = GridBlock::new();
  124. let scripts = vec![
  125. AssertBlockCount(1),
  126. CreateBlock { block: grid_block },
  127. AssertBlockCount(2),
  128. ];
  129. GridEditorTest::new().await.run_scripts(scripts).await;
  130. }
  131. #[tokio::test]
  132. async fn grid_update_block() {
  133. let grid_block = GridBlock::new();
  134. let mut cloned_grid_block = grid_block.clone();
  135. let change = GridBlockChangeset {
  136. block_id: grid_block.id.clone(),
  137. start_row_index: Some(2),
  138. row_count: Some(10),
  139. };
  140. cloned_grid_block.start_row_index = 2;
  141. cloned_grid_block.row_count = 10;
  142. let scripts = vec![
  143. AssertBlockCount(1),
  144. CreateBlock { block: grid_block },
  145. UpdateBlock { change },
  146. AssertBlockCount(2),
  147. AssertBlockEqual {
  148. block_index: 1,
  149. block: cloned_grid_block,
  150. },
  151. ];
  152. GridEditorTest::new().await.run_scripts(scripts).await;
  153. }
  154. #[tokio::test]
  155. async fn grid_create_row() {
  156. let scripts = vec![AssertRowCount(2), CreateRow, CreateRow, CreateRow, AssertRowCount(5)];
  157. GridEditorTest::new().await.run_scripts(scripts).await;
  158. }