script.rs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. use flowy_grid::services::field::*;
  2. use flowy_grid::services::grid_editor::{ClientGridEditor, GridPadBuilder};
  3. use flowy_grid_data_model::entities::{AnyData, Field, FieldType};
  4. use flowy_test::event_builder::FolderEventBuilder;
  5. use flowy_test::helper::ViewTest;
  6. use flowy_test::FlowySDKTest;
  7. use std::sync::Arc;
  8. pub enum EditorScript {
  9. CreateField { field: Field },
  10. CreateRow,
  11. AssertGridMetaPad,
  12. }
  13. pub struct GridEditorTest {
  14. pub sdk: FlowySDKTest,
  15. pub grid_id: String,
  16. pub editor: Arc<ClientGridEditor>,
  17. }
  18. impl GridEditorTest {
  19. pub async fn new() -> Self {
  20. let sdk = FlowySDKTest::default();
  21. let _ = sdk.init_user().await;
  22. let test = ViewTest::new_grid_view(&sdk).await;
  23. let editor = sdk.grid_manager.open_grid(&test.view.id).await.unwrap();
  24. let grid_id = test.view.id;
  25. Self { sdk, grid_id, editor }
  26. }
  27. pub async fn run_scripts(&mut self, scripts: Vec<EditorScript>) {
  28. for script in scripts {
  29. self.run_script(script).await;
  30. }
  31. }
  32. pub async fn run_script(&mut self, script: EditorScript) {
  33. let grid_manager = self.sdk.grid_manager.clone();
  34. let pool = self.sdk.user_session.db_pool().unwrap();
  35. let rev_manager = self.editor.rev_manager();
  36. let cache = rev_manager.revision_cache().await;
  37. match script {
  38. EditorScript::CreateField { field } => {
  39. self.editor.create_field(field).await.unwrap();
  40. }
  41. EditorScript::CreateRow => {}
  42. EditorScript::AssertGridMetaPad => {
  43. let mut grid_rev_manager = grid_manager.make_grid_rev_manager(&self.grid_id, pool.clone()).unwrap();
  44. let grid_pad = grid_rev_manager.load::<GridPadBuilder>(None).await.unwrap();
  45. println!("{}", grid_pad.delta_str());
  46. }
  47. }
  48. }
  49. }
  50. pub fn create_text_field() -> Field {
  51. FieldBuilder::new(RichTextTypeOptionsBuilder::new())
  52. .name("Name")
  53. .visibility(true)
  54. .field_type(FieldType::RichText)
  55. .build()
  56. }
  57. pub fn create_single_select_field() -> Field {
  58. let single_select = SingleSelectTypeOptionsBuilder::new()
  59. .option(SelectOption::new("Done"))
  60. .option(SelectOption::new("Progress"));
  61. FieldBuilder::new(single_select)
  62. .name("Name")
  63. .visibility(true)
  64. .field_type(FieldType::SingleSelect)
  65. .build()
  66. }