field_test.rs 3.5 KB

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