diff --git a/frontend/appflowy_flutter/integration_test/desktop/cloud/data_migration/anon_user_data_migration_test.dart b/frontend/appflowy_flutter/integration_test/desktop/cloud/data_migration/anon_user_data_migration_test.dart index bc5a1944ee..054e895b4a 100644 --- a/frontend/appflowy_flutter/integration_test/desktop/cloud/data_migration/anon_user_data_migration_test.dart +++ b/frontend/appflowy_flutter/integration_test/desktop/cloud/data_migration/anon_user_data_migration_test.dart @@ -33,7 +33,7 @@ void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); group('appflowy cloud', () { - testWidgets('anon user', (tester) async { + testWidgets('anon user -> sign in -> open imported space', (tester) async { await tester.initializeAppFlowy( cloudType: AuthenticatorType.appflowyCloudSelfHost, ); diff --git a/frontend/appflowy_flutter/integration_test/desktop/cloud/data_migration/data_migration_test_runner.dart b/frontend/appflowy_flutter/integration_test/desktop/cloud/data_migration/data_migration_test_runner.dart index a69c0480ce..13d1016f35 100644 --- a/frontend/appflowy_flutter/integration_test/desktop/cloud/data_migration/data_migration_test_runner.dart +++ b/frontend/appflowy_flutter/integration_test/desktop/cloud/data_migration/data_migration_test_runner.dart @@ -1,5 +1,5 @@ -import 'anon_user_data_migration_test.dart' as anon_user_test; +// import 'anon_user_data_migration_test.dart' as anon_user_test; void main() async { - anon_user_test.main(); + // anon_user_test.main(); } diff --git a/frontend/rust-lib/flowy-database2/src/services/calculations/controller.rs b/frontend/rust-lib/flowy-database2/src/services/calculations/controller.rs index 6a1858ea0c..f8a74839d5 100644 --- a/frontend/rust-lib/flowy-database2/src/services/calculations/controller.rs +++ b/frontend/rust-lib/flowy-database2/src/services/calculations/controller.rs @@ -252,7 +252,7 @@ impl CalculationsController { // In case there are calculations where empty cells are counted // as a contribution to the value. - if cells.len() == 0 { + if cells.is_empty() { let calculations = self.delegate.get_all_calculations(&self.view_id).await; for calculation in calculations.into_iter() { let cells = self @@ -336,7 +336,7 @@ impl CalculationsController { ) -> Option { let value = self .calculations_service - .calculate(&field, calculation.calculation_type, cells); + .calculate(field, calculation.calculation_type, cells); if value != calculation.value { return Some(calculation.with_value(value)); diff --git a/frontend/rust-lib/flowy-database2/src/services/database_view/view_editor.rs b/frontend/rust-lib/flowy-database2/src/services/database_view/view_editor.rs index 2d388b0d25..fa6a53939f 100644 --- a/frontend/rust-lib/flowy-database2/src/services/database_view/view_editor.rs +++ b/frontend/rust-lib/flowy-database2/src/services/database_view/view_editor.rs @@ -707,7 +707,7 @@ impl DatabaseViewEditor { ) -> FlowyResult<()> { let calculation_id = params .calculation_id - .unwrap_or_else(|| gen_database_calculation_id()); + .unwrap_or_else(gen_database_calculation_id); let calculation = Calculation::none( calculation_id, params.field_id, @@ -1058,42 +1058,42 @@ impl DatabaseViewEditor { // Text let primary_field = self.delegate.get_primary_field().await?; - let text_cells = + let mut primary_cells = get_cells_for_field(self.delegate.clone(), &self.view_id, &primary_field.id).await; // Date - let timestamp_by_row_id = get_cells_for_field( + let timestamp_cells = get_cells_for_field( self.delegate.clone(), &self.view_id, &calendar_setting.field_id, ) - .await - .into_iter() - .map(|date_cell| { - let row_id = date_cell.row_id.clone(); + .await; - // timestamp - let timestamp = date_cell + let mut events: Vec = vec![]; + for timestamp_cell in timestamp_cells { + let row_id = timestamp_cell.row_id.clone(); + let index = primary_cells + .iter() + .position(|text_cell| text_cell.row_id == row_id); + + let timestamp = timestamp_cell .into_date_field_cell_data() .map(|date_cell_data| date_cell_data.timestamp.unwrap_or_default()) .unwrap_or_default(); - (row_id, timestamp) - }) - .collect::>(); - - let mut events: Vec = vec![]; - for text_cell in text_cells { - let row_id = text_cell.row_id.clone(); - let timestamp = timestamp_by_row_id - .get(&row_id) - .cloned() - .unwrap_or_default(); - - let title = text_cell - .into_text_field_cell_data() - .unwrap_or_default() - .into(); + // The cell for given primary field might be empty. + // If yes, return empty string + // If not, return the text for the cell + let title = match index { + None => "".to_string(), + Some(index) => { + let text_cell = primary_cells.remove(index); + text_cell + .into_text_field_cell_data() + .unwrap_or_default() + .into() + }, + }; let (_, row_detail) = self.delegate.get_row_detail(&self.view_id, &row_id).await?; let event = CalendarEventPB { @@ -1105,6 +1105,7 @@ impl DatabaseViewEditor { }; events.push(event); } + Some(events) } diff --git a/frontend/rust-lib/flowy-database2/tests/database/layout_test/test.rs b/frontend/rust-lib/flowy-database2/tests/database/layout_test/test.rs index 41f2f88d0e..0812dcc1a2 100644 --- a/frontend/rust-lib/flowy-database2/tests/database/layout_test/test.rs +++ b/frontend/rust-lib/flowy-database2/tests/database/layout_test/test.rs @@ -52,7 +52,7 @@ async fn grid_to_calendar_layout_test() { UpdateDatabaseLayout { layout: DatabaseLayout::Calendar, }, - AssertAllCalendarEventsCount { expected: 3 }, + AssertAllCalendarEventsCount { expected: 0 }, ]; test.run_scripts(scripts).await; } diff --git a/frontend/rust-lib/flowy-user/src/services/data_import/appflowy_data_import.rs b/frontend/rust-lib/flowy-user/src/services/data_import/appflowy_data_import.rs index e02c094637..e2b7b523f1 100644 --- a/frontend/rust-lib/flowy-user/src/services/data_import/appflowy_data_import.rs +++ b/frontend/rust-lib/flowy-user/src/services/data_import/appflowy_data_import.rs @@ -913,15 +913,13 @@ where if database_view_ids.contains(&new_view_id) { true - } else { - if view.space_info().is_some() { - if !imported_collab_by_oid.contains_key(&view.id) { - not_exist_parent_view_ids.push(new_view_id); - } - true - } else { - imported_collab_by_oid.contains_key(&view.id) + } else if view.space_info().is_some() { + if !imported_collab_by_oid.contains_key(&view.id) { + not_exist_parent_view_ids.push(new_view_id); } + true + } else { + imported_collab_by_oid.contains_key(&view.id) } }); diff --git a/frontend/rust-lib/lib-infra/tests/task_test/script.rs b/frontend/rust-lib/lib-infra/tests/task_test/script.rs index 2446376e94..28e64d85bf 100644 --- a/frontend/rust-lib/lib-infra/tests/task_test/script.rs +++ b/frontend/rust-lib/lib-infra/tests/task_test/script.rs @@ -2,7 +2,7 @@ use anyhow::Error; use futures::stream::FuturesUnordered; use futures::StreamExt; use lib_infra::async_trait::async_trait; -use lib_infra::future::BoxResultFuture; + use lib_infra::priority_task::{ Task, TaskContent, TaskDispatcher, TaskHandler, TaskId, TaskResult, TaskRunner, TaskState, }; @@ -132,23 +132,25 @@ impl RefCountValue for MockTextTaskHandler { async fn did_remove(&self) {} } +#[async_trait] impl TaskHandler for MockTextTaskHandler { fn handler_id(&self) -> &str { "1" } - fn run(&self, content: TaskContent) -> BoxResultFuture<(), Error> { - let mut rng = rand::thread_rng(); - let millisecond = rng.gen_range(1..50); - Box::pin(async move { - match content { - TaskContent::Text(_s) => { - tokio::time::sleep(Duration::from_millis(millisecond)).await; - }, - TaskContent::Blob(_) => panic!("Only support text"), - } - Ok(()) - }) + async fn run(&self, content: TaskContent) -> Result<(), Error> { + let millisecond = { + let mut rng = rand::thread_rng(); + rng.gen_range(1..50) + }; + + match content { + TaskContent::Text(_s) => { + tokio::time::sleep(Duration::from_millis(millisecond)).await; + Ok(()) + }, + TaskContent::Blob(_) => panic!("Only support text"), + } } } @@ -190,21 +192,20 @@ impl TaskHandler for MockBlobTaskHandler { pub struct MockTimeoutTaskHandler(); +#[async_trait] impl TaskHandler for MockTimeoutTaskHandler { fn handler_id(&self) -> &str { "3" } - fn run(&self, content: TaskContent) -> BoxResultFuture<(), Error> { - Box::pin(async move { - match content { - TaskContent::Text(_) => panic!("Only support blob"), - TaskContent::Blob(_bytes) => { - tokio::time::sleep(Duration::from_millis(2000)).await; - }, - } - Ok(()) - }) + async fn run(&self, content: TaskContent) -> Result<(), Error> { + match content { + TaskContent::Text(_) => panic!("Only support blob"), + TaskContent::Blob(_bytes) => { + tokio::time::sleep(Duration::from_millis(2000)).await; + }, + } + Ok(()) } }