date_group_test.rs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. use crate::database::group_test::script::DatabaseGroupTest;
  2. use crate::database::group_test::script::GroupScript::*;
  3. use chrono::NaiveDateTime;
  4. use chrono::{offset, Duration};
  5. use collab_database::database::gen_row_id;
  6. use collab_database::rows::CreateRowParams;
  7. use flowy_database2::entities::FieldType;
  8. use flowy_database2::services::cell::CellBuilder;
  9. use flowy_database2::services::field::DateCellData;
  10. use std::collections::HashMap;
  11. use std::vec;
  12. #[tokio::test]
  13. async fn group_by_date_test() {
  14. let date_diffs = vec![-1, 0, 7, -15, -1];
  15. let mut test = DatabaseGroupTest::new().await;
  16. let date_field = test.get_field(FieldType::DateTime).await;
  17. for diff in date_diffs {
  18. let timestamp = offset::Local::now()
  19. .checked_add_signed(Duration::days(diff))
  20. .unwrap()
  21. .timestamp()
  22. .to_string();
  23. let mut cells = HashMap::new();
  24. cells.insert(date_field.id.clone(), timestamp);
  25. let cells = CellBuilder::with_cells(cells, &[date_field.clone()]).build();
  26. let params = CreateRowParams {
  27. id: gen_row_id(),
  28. cells,
  29. height: 60,
  30. visibility: true,
  31. prev_row_id: None,
  32. timestamp: 0,
  33. };
  34. let res = test.editor.create_row(&test.view_id, None, params).await;
  35. assert!(res.is_ok());
  36. }
  37. let today = offset::Local::now();
  38. let last_day = today
  39. .checked_add_signed(Duration::days(-1))
  40. .unwrap()
  41. .format("%Y/%m/%d")
  42. .to_string();
  43. let last_30_days = today
  44. .checked_add_signed(Duration::days(-30))
  45. .unwrap()
  46. .format("%Y/%m/%d")
  47. .to_string();
  48. let next_7_days = today
  49. .checked_add_signed(Duration::days(2))
  50. .unwrap()
  51. .format("%Y/%m/%d")
  52. .to_string();
  53. let scripts = vec![
  54. GroupByField {
  55. field_id: date_field.id.clone(),
  56. },
  57. AssertGroupCount(7),
  58. AssertGroupRowCount {
  59. group_index: 0,
  60. row_count: 0,
  61. },
  62. // Added via `make_test_board`
  63. AssertGroupIDName {
  64. group_index: 1,
  65. group_id: "2022/03/01".to_string(),
  66. group_name: "Mar 2022".to_string(),
  67. },
  68. AssertGroupRowCount {
  69. group_index: 1,
  70. row_count: 3,
  71. },
  72. // Added via `make_test_board`
  73. AssertGroupIDName {
  74. group_index: 2,
  75. group_id: "2022/11/01".to_string(),
  76. group_name: "Nov 2022".to_string(),
  77. },
  78. AssertGroupRowCount {
  79. group_index: 2,
  80. row_count: 2,
  81. },
  82. AssertGroupIDName {
  83. group_index: 3,
  84. group_id: last_30_days,
  85. group_name: "Last 30 days".to_string(),
  86. },
  87. AssertGroupRowCount {
  88. group_index: 3,
  89. row_count: 1,
  90. },
  91. AssertGroupIDName {
  92. group_index: 4,
  93. group_id: last_day,
  94. group_name: "Yesterday".to_string(),
  95. },
  96. AssertGroupRowCount {
  97. group_index: 4,
  98. row_count: 2,
  99. },
  100. AssertGroupIDName {
  101. group_index: 5,
  102. group_id: today.format("%Y/%m/%d").to_string(),
  103. group_name: "Today".to_string(),
  104. },
  105. AssertGroupRowCount {
  106. group_index: 5,
  107. row_count: 1,
  108. },
  109. AssertGroupIDName {
  110. group_index: 6,
  111. group_id: next_7_days,
  112. group_name: "Next 7 days".to_string(),
  113. },
  114. AssertGroupRowCount {
  115. group_index: 6,
  116. row_count: 1,
  117. },
  118. ];
  119. test.run_scripts(scripts).await;
  120. }
  121. #[tokio::test]
  122. async fn change_row_group_on_date_cell_changed_test() {
  123. let mut test = DatabaseGroupTest::new().await;
  124. let date_field = test.get_field(FieldType::DateTime).await;
  125. let scripts = vec![
  126. GroupByField {
  127. field_id: date_field.id.clone(),
  128. },
  129. AssertGroupCount(3),
  130. // Nov 2, 2022
  131. UpdateGroupedCellWithData {
  132. from_group_index: 1,
  133. row_index: 0,
  134. cell_data: "1667408732".to_string(),
  135. },
  136. AssertGroupRowCount {
  137. group_index: 1,
  138. row_count: 2,
  139. },
  140. AssertGroupRowCount {
  141. group_index: 2,
  142. row_count: 3,
  143. },
  144. ];
  145. test.run_scripts(scripts).await;
  146. }
  147. #[tokio::test]
  148. async fn change_date_on_moving_row_to_another_group() {
  149. let mut test = DatabaseGroupTest::new().await;
  150. let date_field = test.get_field(FieldType::DateTime).await;
  151. let scripts = vec![
  152. GroupByField {
  153. field_id: date_field.id.clone(),
  154. },
  155. AssertGroupCount(3),
  156. AssertGroupRowCount {
  157. group_index: 1,
  158. row_count: 3,
  159. },
  160. AssertGroupRowCount {
  161. group_index: 2,
  162. row_count: 2,
  163. },
  164. MoveRow {
  165. from_group_index: 1,
  166. from_row_index: 0,
  167. to_group_index: 2,
  168. to_row_index: 0,
  169. },
  170. AssertGroupRowCount {
  171. group_index: 1,
  172. row_count: 2,
  173. },
  174. AssertGroupRowCount {
  175. group_index: 2,
  176. row_count: 3,
  177. },
  178. AssertGroupIDName {
  179. group_index: 2,
  180. group_id: "2022/11/01".to_string(),
  181. group_name: "Nov 2022".to_string(),
  182. },
  183. ];
  184. test.run_scripts(scripts).await;
  185. let group = test.group_at_index(2).await;
  186. let rows = group.clone().rows;
  187. let row_id = &rows.get(0).unwrap().id;
  188. let row_detail = test
  189. .get_rows()
  190. .await
  191. .into_iter()
  192. .find(|r| r.row.id.to_string() == row_id.to_string())
  193. .unwrap();
  194. let cell = row_detail.row.cells.get(&date_field.id.clone()).unwrap();
  195. let date_cell = DateCellData::from(cell);
  196. let date_time =
  197. NaiveDateTime::parse_from_str("2022/11/01 00:00:00", "%Y/%m/%d %H:%M:%S").unwrap();
  198. assert_eq!(date_time.timestamp(), date_cell.timestamp.unwrap());
  199. }