123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- use crate::database::group_test::script::DatabaseGroupTest;
- use crate::database::group_test::script::GroupScript::*;
- use chrono::NaiveDateTime;
- use chrono::{offset, Duration};
- use collab_database::database::gen_row_id;
- use collab_database::rows::CreateRowParams;
- use flowy_database2::entities::FieldType;
- use flowy_database2::services::cell::CellBuilder;
- use flowy_database2::services::field::DateCellData;
- use std::collections::HashMap;
- use std::vec;
- #[tokio::test]
- async fn group_by_date_test() {
- let date_diffs = vec![-1, 0, 7, -15, -1];
- let mut test = DatabaseGroupTest::new().await;
- let date_field = test.get_field(FieldType::DateTime).await;
- for diff in date_diffs {
- let timestamp = offset::Local::now()
- .checked_add_signed(Duration::days(diff))
- .unwrap()
- .timestamp()
- .to_string();
- let mut cells = HashMap::new();
- cells.insert(date_field.id.clone(), timestamp);
- let cells = CellBuilder::with_cells(cells, &[date_field.clone()]).build();
- let params = CreateRowParams {
- id: gen_row_id(),
- cells,
- height: 60,
- visibility: true,
- prev_row_id: None,
- timestamp: 0,
- };
- let res = test.editor.create_row(&test.view_id, None, params).await;
- assert!(res.is_ok());
- }
- let today = offset::Local::now();
- let last_day = today
- .checked_add_signed(Duration::days(-1))
- .unwrap()
- .format("%Y/%m/%d")
- .to_string();
- let last_30_days = today
- .checked_add_signed(Duration::days(-30))
- .unwrap()
- .format("%Y/%m/%d")
- .to_string();
- let next_7_days = today
- .checked_add_signed(Duration::days(2))
- .unwrap()
- .format("%Y/%m/%d")
- .to_string();
- let scripts = vec![
- GroupByField {
- field_id: date_field.id.clone(),
- },
- AssertGroupCount(7),
- AssertGroupRowCount {
- group_index: 0,
- row_count: 0,
- },
- // Added via `make_test_board`
- AssertGroupIDName {
- group_index: 1,
- group_id: "2022/03/01".to_string(),
- group_name: "Mar 2022".to_string(),
- },
- AssertGroupRowCount {
- group_index: 1,
- row_count: 3,
- },
- // Added via `make_test_board`
- AssertGroupIDName {
- group_index: 2,
- group_id: "2022/11/01".to_string(),
- group_name: "Nov 2022".to_string(),
- },
- AssertGroupRowCount {
- group_index: 2,
- row_count: 2,
- },
- AssertGroupIDName {
- group_index: 3,
- group_id: last_30_days,
- group_name: "Last 30 days".to_string(),
- },
- AssertGroupRowCount {
- group_index: 3,
- row_count: 1,
- },
- AssertGroupIDName {
- group_index: 4,
- group_id: last_day,
- group_name: "Yesterday".to_string(),
- },
- AssertGroupRowCount {
- group_index: 4,
- row_count: 2,
- },
- AssertGroupIDName {
- group_index: 5,
- group_id: today.format("%Y/%m/%d").to_string(),
- group_name: "Today".to_string(),
- },
- AssertGroupRowCount {
- group_index: 5,
- row_count: 1,
- },
- AssertGroupIDName {
- group_index: 6,
- group_id: next_7_days,
- group_name: "Next 7 days".to_string(),
- },
- AssertGroupRowCount {
- group_index: 6,
- row_count: 1,
- },
- ];
- test.run_scripts(scripts).await;
- }
- #[tokio::test]
- async fn change_row_group_on_date_cell_changed_test() {
- let mut test = DatabaseGroupTest::new().await;
- let date_field = test.get_field(FieldType::DateTime).await;
- let scripts = vec![
- GroupByField {
- field_id: date_field.id.clone(),
- },
- AssertGroupCount(3),
- // Nov 2, 2022
- UpdateGroupedCellWithData {
- from_group_index: 1,
- row_index: 0,
- cell_data: "1667408732".to_string(),
- },
- AssertGroupRowCount {
- group_index: 1,
- row_count: 2,
- },
- AssertGroupRowCount {
- group_index: 2,
- row_count: 3,
- },
- ];
- test.run_scripts(scripts).await;
- }
- #[tokio::test]
- async fn change_date_on_moving_row_to_another_group() {
- let mut test = DatabaseGroupTest::new().await;
- let date_field = test.get_field(FieldType::DateTime).await;
- let scripts = vec![
- GroupByField {
- field_id: date_field.id.clone(),
- },
- AssertGroupCount(3),
- AssertGroupRowCount {
- group_index: 1,
- row_count: 3,
- },
- AssertGroupRowCount {
- group_index: 2,
- row_count: 2,
- },
- MoveRow {
- from_group_index: 1,
- from_row_index: 0,
- to_group_index: 2,
- to_row_index: 0,
- },
- AssertGroupRowCount {
- group_index: 1,
- row_count: 2,
- },
- AssertGroupRowCount {
- group_index: 2,
- row_count: 3,
- },
- AssertGroupIDName {
- group_index: 2,
- group_id: "2022/11/01".to_string(),
- group_name: "Nov 2022".to_string(),
- },
- ];
- test.run_scripts(scripts).await;
- let group = test.group_at_index(2).await;
- let rows = group.clone().rows;
- let row_id = &rows.get(0).unwrap().id;
- let row_detail = test
- .get_rows()
- .await
- .into_iter()
- .find(|r| r.row.id.to_string() == row_id.to_string())
- .unwrap();
- let cell = row_detail.row.cells.get(&date_field.id.clone()).unwrap();
- let date_cell = DateCellData::from(cell);
- let date_time =
- NaiveDateTime::parse_from_str("2022/11/01 00:00:00", "%Y/%m/%d %H:%M:%S").unwrap();
- assert_eq!(date_time.timestamp(), date_cell.timestamp.unwrap());
- }
|