field_test.rs 3.5 KB

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