test.rs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. use collab_document::blocks::json_str_to_hashmap;
  2. use event_integration::document::document_event::DocumentEventTest;
  3. use event_integration::document::utils::*;
  4. use flowy_document2::entities::*;
  5. use serde_json::{json, Value};
  6. use std::collections::HashMap;
  7. #[tokio::test]
  8. async fn get_document_event_test() {
  9. let test = DocumentEventTest::new().await;
  10. let view = test.create_document().await;
  11. let document = test.open_document(view.id).await;
  12. let document_data = document.data;
  13. assert!(!document_data.page_id.is_empty());
  14. assert!(document_data.blocks.len() > 1);
  15. }
  16. #[tokio::test]
  17. async fn apply_document_event_test() {
  18. let test = DocumentEventTest::new().await;
  19. let view = test.create_document().await;
  20. let doc_id = view.id.clone();
  21. let document = test.open_document(doc_id.clone()).await;
  22. let block_count = document.data.blocks.len();
  23. let insert_action = gen_insert_block_action(document);
  24. let payload = ApplyActionPayloadPB {
  25. document_id: doc_id.clone(),
  26. actions: vec![insert_action],
  27. };
  28. test.apply_actions(payload).await;
  29. let document = test.open_document(doc_id).await;
  30. let document_data = document.data;
  31. let block_count_after = document_data.blocks.len();
  32. assert_eq!(block_count_after, block_count + 1);
  33. }
  34. #[tokio::test]
  35. async fn undo_redo_event_test() {
  36. let test = DocumentEventTest::new().await;
  37. let view = test.create_document().await;
  38. let doc_id = view.id.clone();
  39. let document = test.open_document(doc_id.clone()).await;
  40. let insert_action = gen_insert_block_action(document);
  41. let payload = ApplyActionPayloadPB {
  42. document_id: doc_id.clone(),
  43. actions: vec![insert_action],
  44. };
  45. test.apply_actions(payload).await;
  46. let block_count_after_insert = test.open_document(doc_id.clone()).await.data.blocks.len();
  47. // undo insert action
  48. let can_undo = test.can_undo_redo(doc_id.clone()).await.can_undo;
  49. assert!(can_undo);
  50. test.undo(doc_id.clone()).await;
  51. let block_count_after_undo = test.open_document(doc_id.clone()).await.data.blocks.len();
  52. assert_eq!(block_count_after_undo, block_count_after_insert - 1);
  53. // redo insert action
  54. let can_redo = test.can_undo_redo(doc_id.clone()).await.can_redo;
  55. assert!(can_redo);
  56. test.redo(doc_id.clone()).await;
  57. let block_count_after_redo = test.open_document(doc_id.clone()).await.data.blocks.len();
  58. assert_eq!(block_count_after_redo, block_count_after_insert);
  59. }
  60. #[tokio::test]
  61. async fn insert_text_block_test() {
  62. let test = DocumentEventTest::new().await;
  63. let view = test.create_document().await;
  64. let text = "Hello World";
  65. let block_id = test.insert_index(&view.id, text, 1, None).await;
  66. let block = test.get_block(&view.id, &block_id).await;
  67. assert!(block.is_some());
  68. let block = block.unwrap();
  69. assert!(block.external_id.is_some());
  70. let external_id = block.external_id.unwrap();
  71. let delta = test.get_block_text_delta(&view.id, &external_id).await;
  72. assert_eq!(delta.unwrap(), json!([{ "insert": text }]).to_string());
  73. }
  74. #[tokio::test]
  75. async fn update_block_test() {
  76. let test = DocumentEventTest::new().await;
  77. let view = test.create_document().await;
  78. let block_id = test.insert_index(&view.id, "Hello World", 1, None).await;
  79. let data: HashMap<String, Value> = HashMap::from([
  80. (
  81. "bg_color".to_string(),
  82. serde_json::to_value("#000000").unwrap(),
  83. ),
  84. (
  85. "text_color".to_string(),
  86. serde_json::to_value("#ffffff").unwrap(),
  87. ),
  88. ]);
  89. test.update_data(&view.id, &block_id, data.clone()).await;
  90. let block = test.get_block(&view.id, &block_id).await;
  91. assert!(block.is_some());
  92. let block = block.unwrap();
  93. let block_data = json_str_to_hashmap(&block.data).ok().unwrap();
  94. assert_eq!(block_data, data);
  95. }
  96. #[tokio::test]
  97. async fn apply_text_delta_test() {
  98. let test = DocumentEventTest::new().await;
  99. let view = test.create_document().await;
  100. let text = "Hello World";
  101. let block_id = test.insert_index(&view.id, text, 1, None).await;
  102. let update_delta = json!([{ "retain": 5 }, { "insert": "!" }]).to_string();
  103. test
  104. .apply_delta_for_block(&view.id, &block_id, update_delta)
  105. .await;
  106. let block = test.get_block(&view.id, &block_id).await;
  107. let text_id = block.unwrap().external_id.unwrap();
  108. let block_delta = test.get_block_text_delta(&view.id, &text_id).await;
  109. assert_eq!(
  110. block_delta.unwrap(),
  111. json!([{ "insert": "Hello! World" }]).to_string()
  112. );
  113. }