row_test.rs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. use crate::grid::block_test::script::RowScript::*;
  2. use crate::grid::block_test::script::{CreateRowScriptBuilder, GridRowTest};
  3. use crate::grid::grid_editor::{COMPLETED, FACEBOOK, GOOGLE, PAUSED, TWITTER};
  4. use flowy_grid::entities::FieldType;
  5. use flowy_grid::services::field::{SELECTION_IDS_SEPARATOR, UNCHECK};
  6. use grid_rev_model::RowChangeset;
  7. #[tokio::test]
  8. async fn grid_create_row_count_test() {
  9. let mut test = GridRowTest::new().await;
  10. let scripts = vec![
  11. AssertRowCount(6),
  12. CreateEmptyRow,
  13. CreateEmptyRow,
  14. CreateRow {
  15. row_rev: test.row_builder().build(),
  16. },
  17. AssertRowCount(9),
  18. ];
  19. test.run_scripts(scripts).await;
  20. }
  21. #[tokio::test]
  22. async fn grid_update_row() {
  23. let mut test = GridRowTest::new().await;
  24. let row_rev = test.row_builder().build();
  25. let changeset = RowChangeset {
  26. row_id: row_rev.id.clone(),
  27. height: None,
  28. visibility: None,
  29. cell_by_field_id: Default::default(),
  30. };
  31. let row_count = test.row_revs.len();
  32. let scripts = vec![CreateRow { row_rev }, UpdateRow { changeset }];
  33. test.run_scripts(scripts).await;
  34. let expected_row = test.last_row().unwrap();
  35. let scripts = vec![AssertRow { expected_row }, AssertRowCount(row_count + 1)];
  36. test.run_scripts(scripts).await;
  37. }
  38. #[tokio::test]
  39. async fn grid_delete_row() {
  40. let mut test = GridRowTest::new().await;
  41. let row_1 = test.row_builder().build();
  42. let row_2 = test.row_builder().build();
  43. let row_ids = vec![row_1.id.clone(), row_2.id.clone()];
  44. let row_count = test.row_revs.len() as i32;
  45. let scripts = vec![
  46. CreateRow { row_rev: row_1 },
  47. CreateRow { row_rev: row_2 },
  48. AssertBlockCount(1),
  49. AssertBlock {
  50. block_index: 0,
  51. row_count: row_count + 2,
  52. start_row_index: 0,
  53. },
  54. DeleteRows { row_ids },
  55. AssertBlock {
  56. block_index: 0,
  57. row_count,
  58. start_row_index: 0,
  59. },
  60. ];
  61. test.run_scripts(scripts).await;
  62. }
  63. #[tokio::test]
  64. async fn grid_row_add_cells_test() {
  65. let mut test = GridRowTest::new().await;
  66. let mut builder = CreateRowScriptBuilder::new(&test);
  67. builder.insert(FieldType::RichText, "hello world", "hello world");
  68. builder.insert(FieldType::DateTime, "1647251762", "2022/03/14");
  69. builder.insert(FieldType::Number, "18,443", "$18,443.00");
  70. builder.insert(FieldType::Checkbox, "false", UNCHECK);
  71. builder.insert(FieldType::URL, "https://appflowy.io", "https://appflowy.io");
  72. builder.insert_single_select_cell(|mut options| options.remove(0), COMPLETED);
  73. builder.insert_multi_select_cell(
  74. |options| options,
  75. &vec![GOOGLE, FACEBOOK, TWITTER].join(SELECTION_IDS_SEPARATOR),
  76. );
  77. let scripts = builder.build();
  78. test.run_scripts(scripts).await;
  79. }
  80. #[tokio::test]
  81. async fn grid_row_insert_number_test() {
  82. let mut test = GridRowTest::new().await;
  83. for (val, expected) in &[("1647251762", "2022/03/14"), ("2022/03/14", ""), ("", "")] {
  84. let mut builder = CreateRowScriptBuilder::new(&test);
  85. builder.insert(FieldType::DateTime, val, expected);
  86. let scripts = builder.build();
  87. test.run_scripts(scripts).await;
  88. }
  89. }
  90. #[tokio::test]
  91. async fn grid_row_insert_date_test() {
  92. let mut test = GridRowTest::new().await;
  93. for (val, expected) in &[
  94. ("18,443", "$18,443.00"),
  95. ("0", "$0.00"),
  96. ("100000", "$100,000.00"),
  97. ("$100,000.00", "$100,000.00"),
  98. ("", ""),
  99. ] {
  100. let mut builder = CreateRowScriptBuilder::new(&test);
  101. builder.insert(FieldType::Number, val, expected);
  102. let scripts = builder.build();
  103. test.run_scripts(scripts).await;
  104. }
  105. }
  106. #[tokio::test]
  107. async fn grid_row_insert_single_select_test() {
  108. let mut test = GridRowTest::new().await;
  109. let mut builder = CreateRowScriptBuilder::new(&test);
  110. builder.insert_single_select_cell(|mut options| options.pop().unwrap(), PAUSED);
  111. let scripts = builder.build();
  112. test.run_scripts(scripts).await;
  113. }
  114. #[tokio::test]
  115. async fn grid_row_insert_multi_select_test() {
  116. let mut test = GridRowTest::new().await;
  117. let mut builder = CreateRowScriptBuilder::new(&test);
  118. builder.insert_multi_select_cell(
  119. |mut options| {
  120. options.remove(0);
  121. options
  122. },
  123. &vec![FACEBOOK, TWITTER].join(SELECTION_IDS_SEPARATOR),
  124. );
  125. let scripts = builder.build();
  126. test.run_scripts(scripts).await;
  127. }