123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- use bytes::Bytes;
- use flowy_database2::entities::{
- CellChangesetPB, DatabaseLayoutPB, DatabaseViewIdPB, FieldType, SelectOptionCellDataPB,
- };
- use flowy_test::event_builder::EventBuilder;
- use flowy_test::FlowyCoreTest;
- use std::convert::TryFrom;
- #[tokio::test]
- async fn get_database_id_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- // The view id can be used to get the database id.
- let database_id = EventBuilder::new(test.clone())
- .event(flowy_database2::event_map::DatabaseEvent::GetDatabaseId)
- .payload(DatabaseViewIdPB {
- value: grid_view.id.clone(),
- })
- .async_send()
- .await
- .parse::<flowy_database2::entities::DatabaseIdPB>()
- .value;
- assert_ne!(database_id, grid_view.id);
- }
- #[tokio::test]
- async fn get_database_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- let database = test.get_database(&grid_view.id).await;
- assert_eq!(database.fields.len(), 3);
- assert_eq!(database.rows.len(), 3);
- assert_eq!(database.layout_type, DatabaseLayoutPB::Grid);
- }
- #[tokio::test]
- async fn get_field_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- assert_eq!(fields[0].field_type, FieldType::RichText);
- assert_eq!(fields[1].field_type, FieldType::SingleSelect);
- assert_eq!(fields[2].field_type, FieldType::Checkbox);
- assert_eq!(fields.len(), 3);
- }
- #[tokio::test]
- async fn create_field_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- test.create_field(&grid_view.id, FieldType::Checkbox).await;
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- assert_eq!(fields.len(), 4);
- assert_eq!(fields[3].field_type, FieldType::Checkbox);
- }
- #[tokio::test]
- async fn delete_field_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- assert_eq!(fields[0].field_type, FieldType::RichText);
- assert_eq!(fields[1].field_type, FieldType::SingleSelect);
- assert_eq!(fields[2].field_type, FieldType::Checkbox);
- let error = test.delete_field(&grid_view.id, &fields[1].id).await;
- assert!(error.is_none());
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- assert_eq!(fields.len(), 2);
- }
- #[tokio::test]
- async fn delete_primary_field_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- // the primary field is not allowed to be deleted.
- assert!(fields[0].is_primary);
- let error = test.delete_field(&grid_view.id, &fields[0].id).await;
- assert!(error.is_some());
- }
- #[tokio::test]
- async fn update_field_type_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- let error = test
- .update_field_type(&grid_view.id, &fields[1].id, FieldType::Checklist)
- .await;
- assert!(error.is_none());
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- assert_eq!(fields[1].field_type, FieldType::Checklist);
- }
- #[tokio::test]
- async fn update_primary_field_type_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- // the primary field is not allowed to be deleted.
- assert!(fields[0].is_primary);
- // the primary field is not allowed to be updated.
- let error = test
- .update_field_type(&grid_view.id, &fields[0].id, FieldType::Checklist)
- .await;
- assert!(error.is_some());
- }
- #[tokio::test]
- async fn duplicate_field_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- // the primary field is not allowed to be updated.
- let error = test.duplicate_field(&grid_view.id, &fields[1].id).await;
- assert!(error.is_none());
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- assert_eq!(fields.len(), 4);
- }
- #[tokio::test]
- async fn duplicate_primary_field_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- // the primary field is not allowed to be duplicated.
- let error = test.duplicate_field(&grid_view.id, &fields[0].id).await;
- assert!(error.is_some());
- }
- #[tokio::test]
- async fn create_row_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- let _ = test.create_row(&grid_view.id, None, None).await;
- let database = test.get_database(&grid_view.id).await;
- assert_eq!(database.rows.len(), 4);
- }
- #[tokio::test]
- async fn duplicate_row_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- let database = test.get_database(&grid_view.id).await;
- let error = test
- .duplicate_row(&grid_view.id, &database.rows[0].id)
- .await;
- assert!(error.is_none());
- let database = test.get_database(&grid_view.id).await;
- assert_eq!(database.rows.len(), 4);
- }
- #[tokio::test]
- async fn update_text_cell_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- let database = test.get_database(&grid_view.id).await;
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- let row_id = database.rows[0].id.clone();
- let field_id = fields[0].id.clone();
- assert_eq!(fields[0].field_type, FieldType::RichText);
- // Update the first cell of the first row.
- let error = test
- .update_cell(CellChangesetPB {
- view_id: grid_view.id.clone(),
- row_id: row_id.clone(),
- field_id: field_id.clone(),
- cell_changeset: "hello world".to_string(),
- })
- .await;
- assert!(error.is_none());
- let cell = test.get_cell(&grid_view.id, &row_id, &field_id).await;
- let s = String::from_utf8(cell.data).unwrap();
- assert_eq!(s, "hello world");
- }
- #[tokio::test]
- async fn update_checkbox_cell_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- let database = test.get_database(&grid_view.id).await;
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- let row_id = database.rows[0].id.clone();
- let field_id = fields[2].id.clone();
- assert_eq!(fields[2].field_type, FieldType::Checkbox);
- for input in vec!["yes", "true", "1"] {
- let error = test
- .update_cell(CellChangesetPB {
- view_id: grid_view.id.clone(),
- row_id: row_id.clone(),
- field_id: field_id.clone(),
- cell_changeset: input.to_string(),
- })
- .await;
- assert!(error.is_none());
- let cell = test.get_cell(&grid_view.id, &row_id, &field_id).await;
- let output = String::from_utf8(cell.data).unwrap();
- assert_eq!(output, "Yes");
- }
- }
- #[tokio::test]
- async fn update_single_select_cell_event_test() {
- let test = FlowyCoreTest::new_with_user().await;
- let current_workspace = test.get_current_workspace().await.workspace;
- let grid_view = test
- .create_grid(¤t_workspace.id, "my grid view".to_owned(), vec![])
- .await;
- let database = test.get_database(&grid_view.id).await;
- let fields = test.get_all_database_fields(&grid_view.id).await.items;
- let row_id = database.rows[0].id.clone();
- let field_id = fields[1].id.clone();
- assert_eq!(fields[1].field_type, FieldType::SingleSelect);
- let error = test
- .insert_option(&grid_view.id, &field_id, &row_id, "task 1")
- .await;
- assert!(error.is_none());
- let cell = test.get_cell(&grid_view.id, &row_id, &field_id).await;
- let select_option_cell = SelectOptionCellDataPB::try_from(Bytes::from(cell.data)).unwrap();
- assert_eq!(select_option_cell.options.len(), 1);
- assert_eq!(select_option_cell.select_options.len(), 1);
- }
|