script.rs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. use crate::grid::grid_editor::GridEditorTest;
  2. use flowy_http_model::revision::Revision;
  3. use flowy_revision::{RevisionSnapshot, REVISION_WRITE_INTERVAL_IN_MILLIS};
  4. use flowy_sync::client_grid::{GridOperations, GridRevisionPad};
  5. use grid_rev_model::FieldRevision;
  6. use std::time::Duration;
  7. use tokio::time::sleep;
  8. pub enum SnapshotScript {
  9. WriteSnapshot,
  10. #[allow(dead_code)]
  11. AssertSnapshot {
  12. rev_id: i64,
  13. expected: Option<RevisionSnapshot>,
  14. },
  15. AssertSnapshotContent {
  16. snapshot: RevisionSnapshot,
  17. expected: String,
  18. },
  19. CreateField {
  20. field_rev: FieldRevision,
  21. },
  22. DeleteField {
  23. field_rev: FieldRevision,
  24. },
  25. }
  26. pub struct GridSnapshotTest {
  27. inner: GridEditorTest,
  28. pub current_snapshot: Option<RevisionSnapshot>,
  29. pub current_revision: Option<Revision>,
  30. }
  31. impl GridSnapshotTest {
  32. pub async fn new() -> Self {
  33. let editor_test = GridEditorTest::new_table().await;
  34. Self {
  35. inner: editor_test,
  36. current_snapshot: None,
  37. current_revision: None,
  38. }
  39. }
  40. pub fn grid_id(&self) -> String {
  41. self.grid_id.clone()
  42. }
  43. pub async fn grid_pad(&self) -> GridRevisionPad {
  44. let pad = self.editor.grid_pad();
  45. let pad = (*pad.read().await).clone();
  46. pad
  47. }
  48. pub async fn run_scripts(&mut self, scripts: Vec<SnapshotScript>) {
  49. for script in scripts {
  50. self.run_script(script).await;
  51. }
  52. }
  53. pub async fn get_latest_snapshot(&self) -> Option<RevisionSnapshot> {
  54. self.editor.rev_manager().read_snapshot(None).await.unwrap()
  55. }
  56. pub async fn run_script(&mut self, script: SnapshotScript) {
  57. let rev_manager = self.editor.rev_manager();
  58. match script {
  59. SnapshotScript::WriteSnapshot => {
  60. sleep(Duration::from_millis(2 * REVISION_WRITE_INTERVAL_IN_MILLIS)).await;
  61. rev_manager.generate_snapshot().await;
  62. self.current_snapshot = rev_manager.read_snapshot(None).await.unwrap();
  63. }
  64. SnapshotScript::AssertSnapshot { rev_id, expected } => {
  65. let snapshot = rev_manager.read_snapshot(Some(rev_id)).await.unwrap();
  66. assert_eq!(snapshot, expected);
  67. }
  68. SnapshotScript::AssertSnapshotContent { snapshot, expected } => {
  69. let operations = GridOperations::from_bytes(snapshot.data).unwrap();
  70. let pad = GridRevisionPad::from_operations(operations).unwrap();
  71. assert_eq!(pad.json_str().unwrap(), expected);
  72. }
  73. SnapshotScript::CreateField { field_rev } => {
  74. self.editor.create_new_field_rev(field_rev).await.unwrap();
  75. let current_rev_id = rev_manager.rev_id();
  76. self.current_revision = rev_manager.get_revision(current_rev_id).await;
  77. }
  78. SnapshotScript::DeleteField { field_rev } => {
  79. self.editor.delete_field(&field_rev.id).await.unwrap();
  80. }
  81. }
  82. }
  83. }
  84. impl std::ops::Deref for GridSnapshotTest {
  85. type Target = GridEditorTest;
  86. fn deref(&self) -> &Self::Target {
  87. &self.inner
  88. }
  89. }
  90. impl std::ops::DerefMut for GridSnapshotTest {
  91. fn deref_mut(&mut self) -> &mut Self::Target {
  92. &mut self.inner
  93. }
  94. }