mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-10-30 17:38:40 +00:00 
			
		
		
		
	 171c5634f2
			
		
	
	
		171c5634f2
		
			
		
	
	
	
	
		
			
			* chore: add test * chore: update test * chore: create events * chore: load csv * test: add events * test: clean * chore: fix test * chore: fix test * chore: fix test * chore: fmt --------- Co-authored-by: Mathias Mogensen <mathias@appflowy.io>
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use std::time::Duration;
 | |
| 
 | |
| use crate::util::gen_csv_import_data;
 | |
| use event_integration_test::EventIntegrationTest;
 | |
| use flowy_database2::entities::{
 | |
|   CalculationType, CellChangesetPB, DatabasePB, RemoveCalculationChangesetPB,
 | |
|   UpdateCalculationChangesetPB,
 | |
| };
 | |
| use tokio::time::sleep;
 | |
| 
 | |
| #[tokio::test]
 | |
| async fn calculation_integration_test1() {
 | |
|   let test = EventIntegrationTest::new().await;
 | |
|   test.sign_up_as_anon().await;
 | |
| 
 | |
|   let workspace_id = test.get_current_workspace().await.id;
 | |
|   let payload = gen_csv_import_data("project.csv", &workspace_id);
 | |
|   let view = test.import_data(payload).await.pop().unwrap();
 | |
|   let database = test.open_database(&view.id).await;
 | |
| 
 | |
|   average_calculation(test, database, &view.id).await;
 | |
| }
 | |
| 
 | |
| // Tests for the CalculationType::Average
 | |
| // Is done on the Delay column in the project.csv
 | |
| async fn average_calculation(
 | |
|   test: EventIntegrationTest,
 | |
|   database: DatabasePB,
 | |
|   database_view_id: &str,
 | |
| ) {
 | |
|   // Delay column is the 11th column (index 10) in the project.csv
 | |
|   let delay_field = database.fields.get(10).unwrap();
 | |
| 
 | |
|   let calculation_changeset = UpdateCalculationChangesetPB {
 | |
|     view_id: database_view_id.to_string(),
 | |
|     calculation_id: None,
 | |
|     field_id: delay_field.field_id.clone(),
 | |
|     calculation_type: CalculationType::Average,
 | |
|   };
 | |
| 
 | |
|   test.update_calculation(calculation_changeset).await;
 | |
| 
 | |
|   // Wait for calculation update
 | |
|   sleep(Duration::from_secs(1)).await;
 | |
| 
 | |
|   let all_calculations = test.get_all_calculations(database_view_id).await;
 | |
|   assert!(all_calculations.items.len() == 1);
 | |
| 
 | |
|   let average_calc = all_calculations.items.first().unwrap();
 | |
|   assert!(
 | |
|     average_calc.value == "14.00",
 | |
|     "Expected 14.00, got {}",
 | |
|     average_calc.value
 | |
|   );
 | |
| 
 | |
|   // Update a cell in the delay column at fourth row (3rd index)
 | |
|   let cell_changeset = CellChangesetPB {
 | |
|     view_id: database_view_id.to_string(),
 | |
|     row_id: database.rows.get(3).unwrap().id.clone(),
 | |
|     field_id: delay_field.field_id.clone(),
 | |
|     cell_changeset: "22".to_string(),
 | |
|   };
 | |
|   test.update_cell(cell_changeset).await;
 | |
| 
 | |
|   // wait for awhile because the calculate is done in the background
 | |
|   tokio::time::sleep(Duration::from_secs(6)).await;
 | |
| 
 | |
|   let all_calculations = test.get_all_calculations(database_view_id).await;
 | |
|   assert!(
 | |
|     all_calculations.items.len() == 1,
 | |
|     "Expected 1, got {}",
 | |
|     all_calculations.items.len()
 | |
|   );
 | |
| 
 | |
|   let average_calc = all_calculations.items.first().unwrap();
 | |
|   assert!(
 | |
|     average_calc.value == "16.00",
 | |
|     "Expected 16.00, got {}",
 | |
|     average_calc.value
 | |
|   );
 | |
| 
 | |
|   // Remove the calculation
 | |
|   test
 | |
|     .remove_calculate(RemoveCalculationChangesetPB {
 | |
|       view_id: database_view_id.to_string(),
 | |
|       field_id: delay_field.field_id.clone(),
 | |
|       calculation_id: average_calc.id.clone(),
 | |
|     })
 | |
|     .await;
 | |
| }
 |