script.rs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. use crate::database::block_test::util::DatabaseRowTestBuilder;
  2. use crate::database::database_editor::DatabaseEditorTest;
  3. use database_model::RowRevision;
  4. use flowy_database::services::database::DatabaseEditor;
  5. use flowy_database::services::persistence::database_ref::{DatabaseInfo, DatabaseViewRef};
  6. use std::collections::HashMap;
  7. use std::sync::Arc;
  8. pub enum LinkDatabaseTestScript {
  9. CreateGridViewAndLinkToDatabase {
  10. database_id: String,
  11. },
  12. #[allow(dead_code)]
  13. LinkBoardToDatabase {
  14. database_id: String,
  15. },
  16. CreateNewGrid,
  17. CreateRow {
  18. view_id: String,
  19. row_rev: RowRevision,
  20. },
  21. AssertNumberOfRows {
  22. view_id: String,
  23. expected: usize,
  24. },
  25. AssertNumberOfDatabase {
  26. expected: usize,
  27. },
  28. }
  29. pub struct LinkDatabaseTest {
  30. inner: DatabaseEditorTest,
  31. }
  32. impl LinkDatabaseTest {
  33. pub async fn new() -> Self {
  34. let inner = DatabaseEditorTest::new_grid().await;
  35. Self { inner }
  36. }
  37. pub async fn run_scripts(&mut self, scripts: Vec<LinkDatabaseTestScript>) {
  38. for script in scripts {
  39. self.run_script(script).await;
  40. }
  41. }
  42. pub async fn block_id(&self, view_id: &str) -> String {
  43. let editor = self.get_database_editor(view_id).await;
  44. let mut block_meta_revs = editor.get_block_meta_revs().await.unwrap();
  45. let block = block_meta_revs.pop().unwrap();
  46. block.block_id.clone()
  47. }
  48. pub async fn all_databases(&self) -> Vec<DatabaseInfo> {
  49. self
  50. .inner
  51. .sdk
  52. .database_manager
  53. .get_databases()
  54. .await
  55. .unwrap()
  56. }
  57. pub async fn all_database_ref_views(&self, database_id: &str) -> Vec<DatabaseViewRef> {
  58. self
  59. .inner
  60. .sdk
  61. .database_manager
  62. .get_database_ref_views(database_id)
  63. .await
  64. .unwrap()
  65. }
  66. async fn get_database_editor(&self, view_id: &str) -> Arc<DatabaseEditor> {
  67. self
  68. .inner
  69. .sdk
  70. .database_manager
  71. .open_database_view(&view_id)
  72. .await
  73. .unwrap()
  74. }
  75. pub async fn row_builder(&self, view_id: &str) -> DatabaseRowTestBuilder {
  76. let editor = self.get_database_editor(view_id).await;
  77. let field_revs = editor.get_field_revs(None).await.unwrap();
  78. DatabaseRowTestBuilder::new(self.block_id(view_id).await, field_revs)
  79. }
  80. pub async fn run_script(&mut self, script: LinkDatabaseTestScript) {
  81. match script {
  82. LinkDatabaseTestScript::CreateGridViewAndLinkToDatabase { database_id } => {
  83. let mut ext = HashMap::new();
  84. ext.insert("database_id".to_owned(), database_id);
  85. self
  86. .inner
  87. .sdk
  88. .folder_manager
  89. .create_test_grid_view(&self.inner.app_id, "test link grid", ext)
  90. .await;
  91. },
  92. LinkDatabaseTestScript::LinkBoardToDatabase { database_id } => {
  93. let mut ext = HashMap::new();
  94. ext.insert("database_id".to_owned(), database_id);
  95. self
  96. .inner
  97. .sdk
  98. .folder_manager
  99. .create_test_board_view(&self.inner.app_id, "test link board", ext)
  100. .await;
  101. },
  102. LinkDatabaseTestScript::CreateNewGrid => {
  103. self
  104. .inner
  105. .sdk
  106. .folder_manager
  107. .create_test_grid_view(&self.inner.app_id, "Create test grid", HashMap::new())
  108. .await;
  109. },
  110. LinkDatabaseTestScript::AssertNumberOfDatabase { expected } => {
  111. let databases = self.all_databases().await;
  112. assert_eq!(databases.len(), expected);
  113. },
  114. LinkDatabaseTestScript::CreateRow { view_id, row_rev } => {
  115. let editor = self.get_database_editor(&view_id).await;
  116. let _ = editor.insert_rows(vec![row_rev]).await.unwrap();
  117. },
  118. LinkDatabaseTestScript::AssertNumberOfRows { view_id, expected } => {
  119. let editor = self.get_database_editor(&view_id).await;
  120. let rows = editor.get_all_row_revs(&view_id).await.unwrap();
  121. assert_eq!(rows.len(), expected);
  122. },
  123. }
  124. }
  125. }