script.rs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. use bytes::Bytes;
  2. use flowy_error::{FlowyError, FlowyResult};
  3. use flowy_revision::disk::{RevisionChangeset, RevisionDiskCache, SyncRecord};
  4. use flowy_revision::{
  5. RevisionCompress, RevisionManager, RevisionPersistence, RevisionSnapshotDiskCache, RevisionSnapshotInfo,
  6. };
  7. use flowy_sync::entities::revision::{Revision, RevisionRange};
  8. use nanoid::nanoid;
  9. use std::sync::Arc;
  10. pub enum RevisionScript {
  11. AddLocalRevision(Revision),
  12. AckRevision { rev_id: i64 },
  13. AssertNextSyncRevisionId { rev_id: i64 },
  14. AssertNextSyncRevision(Option<Revision>),
  15. }
  16. pub struct RevisionTest {
  17. rev_manager: Arc<RevisionManager<RevisionConnectionMock>>,
  18. }
  19. impl RevisionTest {
  20. pub async fn new() -> Self {
  21. let user_id = nanoid!(10);
  22. let object_id = nanoid!(6);
  23. let persistence = RevisionPersistence::new(&user_id, &object_id, RevisionDiskCacheMock::new());
  24. let compress = RevisionCompressMock {};
  25. let snapshot = RevisionSnapshotMock {};
  26. let rev_manager = RevisionManager::new(&user_id, &object_id, persistence, compress, snapshot);
  27. Self {
  28. rev_manager: Arc::new(rev_manager),
  29. }
  30. }
  31. pub async fn run_scripts(&self, scripts: Vec<RevisionScript>) {
  32. for script in scripts {
  33. self.run_script(script).await;
  34. }
  35. }
  36. pub async fn run_script(&self, script: RevisionScript) {
  37. match script {
  38. RevisionScript::AddLocalRevision(revision) => {
  39. self.rev_manager.add_local_revision(&revision).await.unwrap();
  40. }
  41. RevisionScript::AckRevision { rev_id } => {
  42. //
  43. self.rev_manager.ack_revision(rev_id).await.unwrap()
  44. }
  45. RevisionScript::AssertNextSyncRevisionId { rev_id } => {
  46. //
  47. assert_eq!(self.rev_manager.rev_id(), rev_id)
  48. }
  49. RevisionScript::AssertNextSyncRevision(expected) => {
  50. let next_revision = self.rev_manager.next_sync_revision().await.unwrap();
  51. assert_eq!(next_revision, expected);
  52. }
  53. }
  54. }
  55. }
  56. pub struct RevisionDiskCacheMock {}
  57. impl RevisionDiskCacheMock {
  58. pub fn new() -> Self {
  59. Self {}
  60. }
  61. }
  62. impl RevisionDiskCache<RevisionConnectionMock> for RevisionDiskCacheMock {
  63. type Error = FlowyError;
  64. fn create_revision_records(&self, revision_records: Vec<SyncRecord>) -> Result<(), Self::Error> {
  65. todo!()
  66. }
  67. fn get_connection(&self) -> Result<RevisionConnectionMock, Self::Error> {
  68. todo!()
  69. }
  70. fn read_revision_records(
  71. &self,
  72. object_id: &str,
  73. rev_ids: Option<Vec<i64>>,
  74. ) -> Result<Vec<SyncRecord>, Self::Error> {
  75. todo!()
  76. }
  77. fn read_revision_records_with_range(
  78. &self,
  79. object_id: &str,
  80. range: &RevisionRange,
  81. ) -> Result<Vec<SyncRecord>, Self::Error> {
  82. todo!()
  83. }
  84. fn update_revision_record(&self, changesets: Vec<RevisionChangeset>) -> FlowyResult<()> {
  85. todo!()
  86. }
  87. fn delete_revision_records(&self, object_id: &str, rev_ids: Option<Vec<i64>>) -> Result<(), Self::Error> {
  88. todo!()
  89. }
  90. fn delete_and_insert_records(
  91. &self,
  92. object_id: &str,
  93. deleted_rev_ids: Option<Vec<i64>>,
  94. inserted_records: Vec<SyncRecord>,
  95. ) -> Result<(), Self::Error> {
  96. todo!()
  97. }
  98. }
  99. pub struct RevisionConnectionMock {}
  100. pub struct RevisionSnapshotMock {}
  101. impl RevisionSnapshotDiskCache for RevisionSnapshotMock {
  102. fn write_snapshot(&self, object_id: &str, rev_id: i64, data: Vec<u8>) -> FlowyResult<()> {
  103. todo!()
  104. }
  105. fn read_snapshot(&self, object_id: &str, rev_id: i64) -> FlowyResult<RevisionSnapshotInfo> {
  106. todo!()
  107. }
  108. }
  109. pub struct RevisionCompressMock {}
  110. impl RevisionCompress for RevisionCompressMock {
  111. fn combine_revisions(&self, revisions: Vec<Revision>) -> FlowyResult<Bytes> {
  112. todo!()
  113. }
  114. }
  115. pub struct RevisionMock {}
  116. // impl std::convert::From<RevisionMock> for Revision {
  117. // fn from(_: RevisionMock) -> Self {}
  118. // }