fix: order comments by recency
This commit is contained in:
parent
762e558d72
commit
122520e9f4
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT\n avc.comment_id,\n avc.created_at,\n avc.updated_at,\n avc.content,\n avc.reply_comment_id,\n avc.is_deleted,\n au.uuid AS \"user_uuid?\",\n au.name AS \"user_name?\"\n FROM af_published_view_comment avc\n LEFT OUTER JOIN af_user au ON avc.created_by = au.uid\n WHERE view_id = $1\n ",
|
||||
"query": "\n SELECT\n avc.comment_id,\n avc.created_at,\n avc.updated_at,\n avc.content,\n avc.reply_comment_id,\n avc.is_deleted,\n au.uuid AS \"user_uuid?\",\n au.name AS \"user_name?\"\n FROM af_published_view_comment avc\n LEFT OUTER JOIN af_user au ON avc.created_by = au.uid\n WHERE view_id = $1\n ORDER BY avc.created_at DESC\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
|
|
@ -60,5 +60,5 @@
|
|||
false
|
||||
]
|
||||
},
|
||||
"hash": "c2e4e6e5db677977c00654223532cadaec9513b76f79965d591cf5bf5cc68707"
|
||||
"hash": "ba86638be27dfdf52e157e07e3e22ccb5547a7815b8313b241b8b535a83e6ff1"
|
||||
}
|
||||
|
|
@ -1118,7 +1118,10 @@ pub async fn select_published_collab_info<'a, E: Executor<'a, Database = Postgre
|
|||
Ok(res)
|
||||
}
|
||||
|
||||
pub async fn select_comments_for_published_view<'a, E: Executor<'a, Database = Postgres>>(
|
||||
pub async fn select_comments_for_published_view_orderd_by_recency<
|
||||
'a,
|
||||
E: Executor<'a, Database = Postgres>,
|
||||
>(
|
||||
executor: E,
|
||||
view_id: &Uuid,
|
||||
) -> Result<Vec<GlobalComment>, AppError> {
|
||||
|
|
@ -1136,6 +1139,7 @@ pub async fn select_comments_for_published_view<'a, E: Executor<'a, Database = P
|
|||
FROM af_published_view_comment avc
|
||||
LEFT OUTER JOIN af_user au ON avc.created_by = au.uid
|
||||
WHERE view_id = $1
|
||||
ORDER BY avc.created_at DESC
|
||||
"#,
|
||||
view_id,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ use database::workspace::{
|
|||
change_workspace_icon, delete_from_workspace, delete_published_collabs, delete_workspace_members,
|
||||
get_invitation_by_id, insert_comment_to_published_view, insert_or_replace_publish_collab_metas,
|
||||
insert_user_workspace, insert_workspace_invitation, rename_workspace, select_all_user_workspaces,
|
||||
select_comments_for_published_view, select_member_count_for_workspaces,
|
||||
select_comments_for_published_view_orderd_by_recency, select_member_count_for_workspaces,
|
||||
select_publish_collab_meta, select_published_collab_blob, select_published_collab_info,
|
||||
select_user_is_allowed_to_delete_comment, select_user_is_collab_publisher_for_all_views,
|
||||
select_user_is_workspace_owner, select_workspace, select_workspace_invitations_for_user,
|
||||
|
|
@ -180,7 +180,7 @@ pub async fn get_comments_on_published_view(
|
|||
pg_pool: &PgPool,
|
||||
view_id: &Uuid,
|
||||
) -> Result<Vec<GlobalComment>, AppError> {
|
||||
let comments = select_comments_for_published_view(pg_pool, view_id).await?;
|
||||
let comments = select_comments_for_published_view_orderd_by_recency(pg_pool, view_id).await?;
|
||||
Ok(comments)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ async fn test_publish_comments() {
|
|||
.unwrap()
|
||||
.comments;
|
||||
assert_eq!(published_view_comments.len(), 2);
|
||||
let mut published_view_comments: Vec<GlobalComment> = guest_client
|
||||
let published_view_comments: Vec<GlobalComment> = guest_client
|
||||
.get_published_view_comments(&view_id)
|
||||
.await
|
||||
.unwrap()
|
||||
|
|
@ -287,8 +287,7 @@ async fn test_publish_comments() {
|
|||
assert_eq!(published_view_comments.len(), 2);
|
||||
assert!(published_view_comments.iter().all(|c| !c.is_deleted));
|
||||
|
||||
// Test if the comments have the correct content when sorted by creation time
|
||||
published_view_comments.sort_by_key(|c| c.created_at);
|
||||
// Test if the comments are correctly sorted
|
||||
let comment_creators = published_view_comments
|
||||
.iter()
|
||||
.map(|c| {
|
||||
|
|
@ -300,7 +299,7 @@ async fn test_publish_comments() {
|
|||
.collect_vec();
|
||||
assert_eq!(
|
||||
comment_creators,
|
||||
vec![page_owner.email.clone(), first_user.email.clone()]
|
||||
vec![first_user.email.clone(), page_owner.email.clone()]
|
||||
);
|
||||
let comment_content = published_view_comments
|
||||
.iter()
|
||||
|
|
@ -308,7 +307,7 @@ async fn test_publish_comments() {
|
|||
.collect_vec();
|
||||
assert_eq!(
|
||||
comment_content,
|
||||
vec![page_owner_comment_content, first_user_comment_content]
|
||||
vec![first_user_comment_content, page_owner_comment_content]
|
||||
);
|
||||
|
||||
// Test if it's possible to reply to another user's comment
|
||||
|
|
@ -319,16 +318,15 @@ async fn test_publish_comments() {
|
|||
.create_comment_on_published_view(
|
||||
&view_id,
|
||||
second_user_comment_content,
|
||||
&Some(published_view_comments[1].comment_id),
|
||||
&Some(published_view_comments[0].comment_id),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let mut published_view_comments: Vec<GlobalComment> = guest_client
|
||||
let published_view_comments: Vec<GlobalComment> = guest_client
|
||||
.get_published_view_comments(&view_id)
|
||||
.await
|
||||
.unwrap()
|
||||
.comments;
|
||||
published_view_comments.sort_by_key(|c| c.created_at);
|
||||
let comment_creators = published_view_comments
|
||||
.iter()
|
||||
.map(|c| {
|
||||
|
|
@ -341,20 +339,20 @@ async fn test_publish_comments() {
|
|||
assert_eq!(
|
||||
comment_creators,
|
||||
vec![
|
||||
page_owner.email.clone(),
|
||||
second_user.email.clone(),
|
||||
first_user.email.clone(),
|
||||
second_user.email.clone()
|
||||
page_owner.email.clone()
|
||||
]
|
||||
);
|
||||
assert_eq!(
|
||||
published_view_comments[2].reply_comment_id,
|
||||
published_view_comments[0].reply_comment_id,
|
||||
Some(published_view_comments[1].comment_id)
|
||||
);
|
||||
|
||||
// Test if only the page owner or the comment creator can delete a comment
|
||||
// User 1 attempt to delete page owner's comment
|
||||
let result = first_user_client
|
||||
.delete_comment_on_published_view(&view_id, &published_view_comments[0].comment_id)
|
||||
.delete_comment_on_published_view(&view_id, &published_view_comments[2].comment_id)
|
||||
.await;
|
||||
assert!(result.is_err());
|
||||
assert_eq!(result.unwrap_err().code, ErrorCode::UserUnAuthorized);
|
||||
|
|
@ -365,17 +363,16 @@ async fn test_publish_comments() {
|
|||
.unwrap();
|
||||
// Guest client attempt to delete user 2's comment
|
||||
let result = guest_client
|
||||
.delete_comment_on_published_view(&view_id, &published_view_comments[2].comment_id)
|
||||
.delete_comment_on_published_view(&view_id, &published_view_comments[0].comment_id)
|
||||
.await;
|
||||
assert!(result.is_err());
|
||||
assert_eq!(result.unwrap_err().code, ErrorCode::NotLoggedIn);
|
||||
// Verify that the comments are not deleted from the database, only the is_deleted status changes.
|
||||
let mut published_view_comments: Vec<GlobalComment> = guest_client
|
||||
let published_view_comments: Vec<GlobalComment> = guest_client
|
||||
.get_published_view_comments(&view_id)
|
||||
.await
|
||||
.unwrap()
|
||||
.comments;
|
||||
published_view_comments.sort_by_key(|c| c.created_at);
|
||||
assert_eq!(
|
||||
published_view_comments
|
||||
.iter()
|
||||
|
|
@ -385,7 +382,7 @@ async fn test_publish_comments() {
|
|||
);
|
||||
// Verify that the reference id is still preserved
|
||||
assert_eq!(
|
||||
published_view_comments[2].reply_comment_id,
|
||||
published_view_comments[0].reply_comment_id,
|
||||
Some(published_view_comments[1].comment_id)
|
||||
);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue