Nathan.fooo 171c5634f2
fix: calculation UI refresh (#6615)
* 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>
2024-12-24 21:27:34 +08:00

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;
}