field_test.rs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. use crate::grid::field_util::*;
  2. use crate::grid::script::EditorScript::*;
  3. use crate::grid::script::*;
  4. use flowy_grid::services::field::select_option::SelectOption;
  5. use flowy_grid::services::field::SingleSelectTypeOption;
  6. use flowy_grid_data_model::revision::TypeOptionDataEntry;
  7. use flowy_sync::entities::grid::FieldChangesetParams;
  8. #[tokio::test]
  9. async fn grid_create_field() {
  10. let mut test = GridEditorTest::new().await;
  11. let (params, field_rev) = create_text_field(&test.grid_id);
  12. let scripts = vec![
  13. CreateField { params },
  14. AssertFieldEqual {
  15. field_index: test.field_count,
  16. field_rev,
  17. },
  18. ];
  19. test.run_scripts(scripts).await;
  20. let (params, field_rev) = create_single_select_field(&test.grid_id);
  21. let scripts = vec![
  22. CreateField { params },
  23. AssertFieldEqual {
  24. field_index: test.field_count,
  25. field_rev,
  26. },
  27. ];
  28. test.run_scripts(scripts).await;
  29. }
  30. #[tokio::test]
  31. async fn grid_create_duplicate_field() {
  32. let mut test = GridEditorTest::new().await;
  33. let (params, _) = create_text_field(&test.grid_id);
  34. let field_count = test.field_count;
  35. let expected_field_count = field_count + 1;
  36. let scripts = vec![
  37. CreateField { params: params.clone() },
  38. CreateField { params },
  39. AssertFieldCount(expected_field_count),
  40. ];
  41. test.run_scripts(scripts).await;
  42. }
  43. #[tokio::test]
  44. async fn grid_update_field_with_empty_change() {
  45. let mut test = GridEditorTest::new().await;
  46. let (params, field_rev) = create_single_select_field(&test.grid_id);
  47. let changeset = FieldChangesetParams {
  48. field_id: field_rev.id.clone(),
  49. grid_id: test.grid_id.clone(),
  50. ..Default::default()
  51. };
  52. let scripts = vec![
  53. CreateField { params },
  54. UpdateField { changeset },
  55. AssertFieldEqual {
  56. field_index: test.field_count,
  57. field_rev,
  58. },
  59. ];
  60. test.run_scripts(scripts).await;
  61. }
  62. #[tokio::test]
  63. async fn grid_update_field() {
  64. let mut test = GridEditorTest::new().await;
  65. let (params, single_select_field) = create_single_select_field(&test.grid_id);
  66. let mut single_select_type_option = SingleSelectTypeOption::from(&single_select_field);
  67. single_select_type_option.options.push(SelectOption::new("Unknown"));
  68. let changeset = FieldChangesetParams {
  69. field_id: single_select_field.id.clone(),
  70. grid_id: test.grid_id.clone(),
  71. frozen: Some(true),
  72. width: Some(1000),
  73. type_option_data: Some(single_select_type_option.protobuf_bytes().to_vec()),
  74. ..Default::default()
  75. };
  76. // The expected_field must be equal to the field that applied the changeset
  77. let mut expected_field_rev = single_select_field.clone();
  78. expected_field_rev.frozen = true;
  79. expected_field_rev.width = 1000;
  80. expected_field_rev.insert_type_option_entry(&single_select_type_option);
  81. let scripts = vec![
  82. CreateField { params },
  83. UpdateField { changeset },
  84. AssertFieldEqual {
  85. field_index: test.field_count,
  86. field_rev: expected_field_rev,
  87. },
  88. ];
  89. test.run_scripts(scripts).await;
  90. }
  91. #[tokio::test]
  92. async fn grid_delete_field() {
  93. let mut test = GridEditorTest::new().await;
  94. let original_field_count = test.field_count;
  95. let (params, text_field_rev) = create_text_field(&test.grid_id);
  96. let scripts = vec![
  97. CreateField { params },
  98. DeleteField {
  99. field_rev: text_field_rev,
  100. },
  101. AssertFieldCount(original_field_count),
  102. ];
  103. test.run_scripts(scripts).await;
  104. }