mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-07-13 12:06:03 +00:00

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