row_test.rs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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::{NO, SELECTION_IDS_SEPARATOR};
  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(3),
  12. CreateEmptyRow,
  13. CreateEmptyRow,
  14. CreateRow {
  15. row_rev: test.row_builder().build(),
  16. },
  17. AssertRowCount(6),
  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(3), 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(4)];
  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(3),
  45. CreateRow { row_rev: row_1 },
  46. CreateRow { row_rev: row_2 },
  47. AssertBlockCount(1),
  48. AssertBlock {
  49. block_index: 0,
  50. row_count: 5,
  51. start_row_index: 0,
  52. },
  53. DeleteRows { row_ids },
  54. AssertBlock {
  55. block_index: 0,
  56. row_count: 3,
  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", NO);
  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. test.run_scripts(builder.build()).await;
  77. }
  78. #[tokio::test]
  79. async fn grid_row_insert_number_test() {
  80. let mut test = GridRowTest::new().await;
  81. for (val, expected) in &[("1647251762", "2022/03/14"), ("2022/03/14", ""), ("", "")] {
  82. let mut builder = CreateRowScriptBuilder::new(&test);
  83. builder.insert(FieldType::DateTime, val, expected);
  84. test.run_scripts(builder.build()).await;
  85. }
  86. }
  87. #[tokio::test]
  88. async fn grid_row_insert_date_test() {
  89. let mut test = GridRowTest::new().await;
  90. for (val, expected) in &[
  91. ("18,443", "$18,443.00"),
  92. ("0", "$0.00"),
  93. ("100000", "$100,000.00"),
  94. ("$100,000.00", "$100,000.00"),
  95. ("", ""),
  96. ] {
  97. let mut builder = CreateRowScriptBuilder::new(&test);
  98. builder.insert(FieldType::Number, val, expected);
  99. test.run_scripts(builder.build()).await;
  100. }
  101. }
  102. #[tokio::test]
  103. async fn grid_row_insert_single_select_test() {
  104. let mut test = GridRowTest::new().await;
  105. let mut builder = CreateRowScriptBuilder::new(&test);
  106. builder.insert_single_select_cell(|mut options| options.pop().unwrap(), PAUSED);
  107. test.run_scripts(builder.build()).await;
  108. }
  109. #[tokio::test]
  110. async fn grid_row_insert_multi_select_test() {
  111. let mut test = GridRowTest::new().await;
  112. let mut builder = CreateRowScriptBuilder::new(&test);
  113. builder.insert_multi_select_cell(
  114. |mut options| {
  115. options.remove(0);
  116. options
  117. },
  118. &vec![FACEBOOK, TWITTER].join(SELECTION_IDS_SEPARATOR),
  119. );
  120. test.run_scripts(builder.build()).await;
  121. }