| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 | use std::collections::HashMap;use std::vec;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 crate::database::group_test::script::DatabaseGroupTest;use crate::database::group_test::script::GroupScript::*;#[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)    .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());}
 |