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