mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-10-31 18:15:09 +00:00 
			
		
		
		
	 5cbc8b1e18
			
		
	
	
		5cbc8b1e18
		
			
		
	
	
	
	
		
			
			* feat: initial calculation controller * fix: entities * feat: calculations * fix: review comments and support floats * fix: abstract business logic into calculations service * fix: clean calculation entities after merge * feat: react to changes to row/cell/field_type * chore: changes after merging main * feat: handle delete field * test: add grid calculations tests * fix: add validation + format numbers * refactor: get cell number * chore: bump collab * chore: fix clippy * chore: update docs * chore: update docs * chore: fmt * chore: fix flutter * chore: collab rev * fix: cleanup and hover to show * fix: localization * test: add basic rust test * fix: clippy * fix: support updating calculation on duplicate row --------- Co-authored-by: nathan <nathan@appflowy.io>
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use std::sync::Arc;
 | |
| 
 | |
| use crate::database::calculations_test::script::{CalculationScript::*, DatabaseCalculationTest};
 | |
| 
 | |
| use collab_database::fields::Field;
 | |
| use flowy_database2::entities::{CalculationType, FieldType, UpdateCalculationChangesetPB};
 | |
| 
 | |
| #[tokio::test]
 | |
| async fn calculations_test() {
 | |
|   let mut test = DatabaseCalculationTest::new().await;
 | |
| 
 | |
|   let expected_sum = 25.00000;
 | |
|   let expected_min = 1.00000;
 | |
|   let expected_average = 5.00000;
 | |
|   let expected_max = 14.00000;
 | |
|   let expected_median = 3.00000;
 | |
| 
 | |
|   let view_id = &test.view_id;
 | |
|   let number_fields = test
 | |
|     .fields
 | |
|     .clone()
 | |
|     .into_iter()
 | |
|     .filter(|field| field.field_type == FieldType::Number as i64)
 | |
|     .collect::<Vec<Arc<Field>>>();
 | |
|   let field_id = &number_fields.first().unwrap().id;
 | |
| 
 | |
|   let calculation_id = "calc_id".to_owned();
 | |
|   let scripts = vec![
 | |
|     // Insert Sum calculation first time
 | |
|     InsertCalculation {
 | |
|       payload: UpdateCalculationChangesetPB {
 | |
|         view_id: view_id.to_owned(),
 | |
|         field_id: field_id.to_owned(),
 | |
|         calculation_id: Some(calculation_id.clone()),
 | |
|         calculation_type: CalculationType::Sum,
 | |
|       },
 | |
|     },
 | |
|     AssertCalculationValue {
 | |
|       expected: expected_sum,
 | |
|     },
 | |
|     InsertCalculation {
 | |
|       payload: UpdateCalculationChangesetPB {
 | |
|         view_id: view_id.to_owned(),
 | |
|         field_id: field_id.to_owned(),
 | |
|         calculation_id: Some(calculation_id.clone()),
 | |
|         calculation_type: CalculationType::Min,
 | |
|       },
 | |
|     },
 | |
|     AssertCalculationValue {
 | |
|       expected: expected_min,
 | |
|     },
 | |
|     InsertCalculation {
 | |
|       payload: UpdateCalculationChangesetPB {
 | |
|         view_id: view_id.to_owned(),
 | |
|         field_id: field_id.to_owned(),
 | |
|         calculation_id: Some(calculation_id.clone()),
 | |
|         calculation_type: CalculationType::Average,
 | |
|       },
 | |
|     },
 | |
|     AssertCalculationValue {
 | |
|       expected: expected_average,
 | |
|     },
 | |
|     InsertCalculation {
 | |
|       payload: UpdateCalculationChangesetPB {
 | |
|         view_id: view_id.to_owned(),
 | |
|         field_id: field_id.to_owned(),
 | |
|         calculation_id: Some(calculation_id.clone()),
 | |
|         calculation_type: CalculationType::Max,
 | |
|       },
 | |
|     },
 | |
|     AssertCalculationValue {
 | |
|       expected: expected_max,
 | |
|     },
 | |
|     InsertCalculation {
 | |
|       payload: UpdateCalculationChangesetPB {
 | |
|         view_id: view_id.to_owned(),
 | |
|         field_id: field_id.to_owned(),
 | |
|         calculation_id: Some(calculation_id),
 | |
|         calculation_type: CalculationType::Median,
 | |
|       },
 | |
|     },
 | |
|     AssertCalculationValue {
 | |
|       expected: expected_median,
 | |
|     },
 | |
|   ];
 | |
|   test.run_scripts(scripts).await;
 | |
| }
 |