Fixing unit tests.
This commit is contained in:
parent
6d96f105c6
commit
3f36730dba
6 changed files with 223 additions and 8 deletions
|
@ -20,4 +20,210 @@ impl CommentAggregates {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO add tests here
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::{
|
||||||
|
aggregates::comment_aggregates::CommentAggregates,
|
||||||
|
source::{
|
||||||
|
comment::{Comment, CommentForm, CommentLike, CommentLikeForm},
|
||||||
|
community::{Community, CommunityForm},
|
||||||
|
post::{Post, PostForm},
|
||||||
|
user::{UserForm, User_},
|
||||||
|
},
|
||||||
|
tests::establish_unpooled_connection,
|
||||||
|
Crud,
|
||||||
|
Likeable,
|
||||||
|
ListingType,
|
||||||
|
SortType,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_crud() {
|
||||||
|
let conn = establish_unpooled_connection();
|
||||||
|
|
||||||
|
let new_user = UserForm {
|
||||||
|
name: "thommy_comment_agg".into(),
|
||||||
|
preferred_username: None,
|
||||||
|
password_encrypted: "nope".into(),
|
||||||
|
email: None,
|
||||||
|
matrix_user_id: None,
|
||||||
|
avatar: None,
|
||||||
|
banner: None,
|
||||||
|
admin: false,
|
||||||
|
banned: Some(false),
|
||||||
|
published: None,
|
||||||
|
updated: None,
|
||||||
|
show_nsfw: false,
|
||||||
|
theme: "browser".into(),
|
||||||
|
default_sort_type: SortType::Hot as i16,
|
||||||
|
default_listing_type: ListingType::Subscribed as i16,
|
||||||
|
lang: "browser".into(),
|
||||||
|
show_avatars: true,
|
||||||
|
send_notifications_to_email: false,
|
||||||
|
actor_id: None,
|
||||||
|
bio: None,
|
||||||
|
local: true,
|
||||||
|
private_key: None,
|
||||||
|
public_key: None,
|
||||||
|
last_refreshed_at: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
let inserted_user = User_::create(&conn, &new_user).unwrap();
|
||||||
|
|
||||||
|
let another_user = UserForm {
|
||||||
|
name: "jerry_comment_agg".into(),
|
||||||
|
preferred_username: None,
|
||||||
|
password_encrypted: "nope".into(),
|
||||||
|
email: None,
|
||||||
|
matrix_user_id: None,
|
||||||
|
avatar: None,
|
||||||
|
banner: None,
|
||||||
|
admin: false,
|
||||||
|
banned: Some(false),
|
||||||
|
published: None,
|
||||||
|
updated: None,
|
||||||
|
show_nsfw: false,
|
||||||
|
theme: "browser".into(),
|
||||||
|
default_sort_type: SortType::Hot as i16,
|
||||||
|
default_listing_type: ListingType::Subscribed as i16,
|
||||||
|
lang: "browser".into(),
|
||||||
|
show_avatars: true,
|
||||||
|
send_notifications_to_email: false,
|
||||||
|
actor_id: None,
|
||||||
|
bio: None,
|
||||||
|
local: true,
|
||||||
|
private_key: None,
|
||||||
|
public_key: None,
|
||||||
|
last_refreshed_at: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
let another_inserted_user = User_::create(&conn, &another_user).unwrap();
|
||||||
|
|
||||||
|
let new_community = CommunityForm {
|
||||||
|
name: "TIL_comment_agg".into(),
|
||||||
|
creator_id: inserted_user.id,
|
||||||
|
title: "nada".to_owned(),
|
||||||
|
description: None,
|
||||||
|
category_id: 1,
|
||||||
|
nsfw: false,
|
||||||
|
removed: None,
|
||||||
|
deleted: None,
|
||||||
|
updated: None,
|
||||||
|
actor_id: None,
|
||||||
|
local: true,
|
||||||
|
private_key: None,
|
||||||
|
public_key: None,
|
||||||
|
last_refreshed_at: None,
|
||||||
|
published: None,
|
||||||
|
icon: None,
|
||||||
|
banner: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
let inserted_community = Community::create(&conn, &new_community).unwrap();
|
||||||
|
|
||||||
|
let new_post = PostForm {
|
||||||
|
name: "A test post".into(),
|
||||||
|
url: None,
|
||||||
|
body: None,
|
||||||
|
creator_id: inserted_user.id,
|
||||||
|
community_id: inserted_community.id,
|
||||||
|
removed: None,
|
||||||
|
deleted: None,
|
||||||
|
locked: None,
|
||||||
|
stickied: None,
|
||||||
|
nsfw: false,
|
||||||
|
updated: None,
|
||||||
|
embed_title: None,
|
||||||
|
embed_description: None,
|
||||||
|
embed_html: None,
|
||||||
|
thumbnail_url: None,
|
||||||
|
ap_id: None,
|
||||||
|
local: true,
|
||||||
|
published: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
let inserted_post = Post::create(&conn, &new_post).unwrap();
|
||||||
|
|
||||||
|
let comment_form = CommentForm {
|
||||||
|
content: "A test comment".into(),
|
||||||
|
creator_id: inserted_user.id,
|
||||||
|
post_id: inserted_post.id,
|
||||||
|
removed: None,
|
||||||
|
deleted: None,
|
||||||
|
read: None,
|
||||||
|
parent_id: None,
|
||||||
|
published: None,
|
||||||
|
updated: None,
|
||||||
|
ap_id: None,
|
||||||
|
local: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
let inserted_comment = Comment::create(&conn, &comment_form).unwrap();
|
||||||
|
|
||||||
|
let child_comment_form = CommentForm {
|
||||||
|
content: "A test comment".into(),
|
||||||
|
creator_id: inserted_user.id,
|
||||||
|
post_id: inserted_post.id,
|
||||||
|
removed: None,
|
||||||
|
deleted: None,
|
||||||
|
read: None,
|
||||||
|
parent_id: Some(inserted_comment.id),
|
||||||
|
published: None,
|
||||||
|
updated: None,
|
||||||
|
ap_id: None,
|
||||||
|
local: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
let _inserted_child_comment = Comment::create(&conn, &child_comment_form).unwrap();
|
||||||
|
|
||||||
|
let comment_like = CommentLikeForm {
|
||||||
|
comment_id: inserted_comment.id,
|
||||||
|
post_id: inserted_post.id,
|
||||||
|
user_id: inserted_user.id,
|
||||||
|
score: 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
CommentLike::like(&conn, &comment_like).unwrap();
|
||||||
|
|
||||||
|
let comment_aggs_before_delete = CommentAggregates::read(&conn, inserted_comment.id).unwrap();
|
||||||
|
|
||||||
|
assert_eq!(1, comment_aggs_before_delete.score);
|
||||||
|
assert_eq!(1, comment_aggs_before_delete.upvotes);
|
||||||
|
assert_eq!(0, comment_aggs_before_delete.downvotes);
|
||||||
|
|
||||||
|
// Add a post dislike from the other user
|
||||||
|
let comment_dislike = CommentLikeForm {
|
||||||
|
comment_id: inserted_comment.id,
|
||||||
|
post_id: inserted_post.id,
|
||||||
|
user_id: another_inserted_user.id,
|
||||||
|
score: -1,
|
||||||
|
};
|
||||||
|
|
||||||
|
CommentLike::like(&conn, &comment_dislike).unwrap();
|
||||||
|
|
||||||
|
let comment_aggs_after_dislike = CommentAggregates::read(&conn, inserted_comment.id).unwrap();
|
||||||
|
|
||||||
|
assert_eq!(0, comment_aggs_after_dislike.score);
|
||||||
|
assert_eq!(1, comment_aggs_after_dislike.upvotes);
|
||||||
|
assert_eq!(1, comment_aggs_after_dislike.downvotes);
|
||||||
|
|
||||||
|
// Remove the first comment like
|
||||||
|
CommentLike::remove(&conn, inserted_user.id, inserted_comment.id).unwrap();
|
||||||
|
let after_like_remove = CommentAggregates::read(&conn, inserted_comment.id).unwrap();
|
||||||
|
assert_eq!(-1, after_like_remove.score);
|
||||||
|
assert_eq!(0, after_like_remove.upvotes);
|
||||||
|
assert_eq!(1, after_like_remove.downvotes);
|
||||||
|
|
||||||
|
// Remove the parent post
|
||||||
|
Post::delete(&conn, inserted_post.id).unwrap();
|
||||||
|
|
||||||
|
// Should be none found, since the post was deleted
|
||||||
|
let after_delete = CommentAggregates::read(&conn, inserted_comment.id);
|
||||||
|
assert!(after_delete.is_err());
|
||||||
|
|
||||||
|
// This should delete all the associated rows, and fire triggers
|
||||||
|
User_::delete(&conn, another_inserted_user.id).unwrap();
|
||||||
|
let user_num_deleted = User_::delete(&conn, inserted_user.id).unwrap();
|
||||||
|
assert_eq!(1, user_num_deleted);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -3,7 +3,9 @@ use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{naive_now, schema::comment_report, source::comment::Comment, Reportable};
|
use crate::{naive_now, schema::comment_report, source::comment::Comment, Reportable};
|
||||||
|
|
||||||
#[derive(Identifiable, Queryable, Associations, PartialEq, Serialize, Deserialize, Debug, Clone)]
|
#[derive(
|
||||||
|
Identifiable, Queryable, Associations, PartialEq, Serialize, Deserialize, Debug, Clone,
|
||||||
|
)]
|
||||||
#[belongs_to(Comment)]
|
#[belongs_to(Comment)]
|
||||||
#[table_name = "comment_report"]
|
#[table_name = "comment_report"]
|
||||||
pub struct CommentReport {
|
pub struct CommentReport {
|
||||||
|
|
|
@ -3,7 +3,9 @@ use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{naive_now, schema::post_report, source::post::Post, Reportable};
|
use crate::{naive_now, schema::post_report, source::post::Post, Reportable};
|
||||||
|
|
||||||
#[derive(Identifiable, Queryable, Associations, PartialEq, Serialize, Deserialize, Debug, Clone)]
|
#[derive(
|
||||||
|
Identifiable, Queryable, Associations, PartialEq, Serialize, Deserialize, Debug, Clone,
|
||||||
|
)]
|
||||||
#[belongs_to(Post)]
|
#[belongs_to(Post)]
|
||||||
#[table_name = "post_report"]
|
#[table_name = "post_report"]
|
||||||
pub struct PostReport {
|
pub struct PostReport {
|
||||||
|
|
|
@ -519,6 +519,8 @@ mod tests {
|
||||||
|
|
||||||
let _inserted_comment_like = CommentLike::like(&conn, &comment_like_form).unwrap();
|
let _inserted_comment_like = CommentLike::like(&conn, &comment_like_form).unwrap();
|
||||||
|
|
||||||
|
let agg = CommentAggregates::read(&conn, inserted_comment.id).unwrap();
|
||||||
|
|
||||||
let expected_comment_view_no_user = CommentView {
|
let expected_comment_view_no_user = CommentView {
|
||||||
creator_banned_from_community: false,
|
creator_banned_from_community: false,
|
||||||
my_vote: None,
|
my_vote: None,
|
||||||
|
@ -594,7 +596,7 @@ mod tests {
|
||||||
published: inserted_community.published,
|
published: inserted_community.published,
|
||||||
},
|
},
|
||||||
counts: CommentAggregates {
|
counts: CommentAggregates {
|
||||||
id: inserted_comment.id, // TODO
|
id: agg.id,
|
||||||
comment_id: inserted_comment.id,
|
comment_id: inserted_comment.id,
|
||||||
score: 1,
|
score: 1,
|
||||||
upvotes: 1,
|
upvotes: 1,
|
||||||
|
|
|
@ -188,7 +188,7 @@ impl<'a> PostQueryBuilder<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn my_user_id<T: MaybeOptional<i32>>(mut self, my_user_id: T) -> Self {
|
pub fn my_user_id<T: MaybeOptional<i32>>(mut self, my_user_id: T) -> Self {
|
||||||
self.community_id = my_user_id.get_optional();
|
self.my_user_id = my_user_id.get_optional();
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -531,6 +531,8 @@ mod tests {
|
||||||
let read_post_listing_with_user =
|
let read_post_listing_with_user =
|
||||||
PostView::read(&conn, inserted_post.id, Some(inserted_user.id)).unwrap();
|
PostView::read(&conn, inserted_post.id, Some(inserted_user.id)).unwrap();
|
||||||
|
|
||||||
|
let agg = PostAggregates::read(&conn, inserted_post.id).unwrap();
|
||||||
|
|
||||||
// the non user version
|
// the non user version
|
||||||
let expected_post_listing_no_user = PostView {
|
let expected_post_listing_no_user = PostView {
|
||||||
post: Post {
|
post: Post {
|
||||||
|
@ -590,7 +592,7 @@ mod tests {
|
||||||
published: inserted_community.published,
|
published: inserted_community.published,
|
||||||
},
|
},
|
||||||
counts: PostAggregates {
|
counts: PostAggregates {
|
||||||
id: inserted_post.id, // TODO this might fail
|
id: agg.id,
|
||||||
post_id: inserted_post.id,
|
post_id: inserted_post.id,
|
||||||
comments: 0,
|
comments: 0,
|
||||||
score: 1,
|
score: 1,
|
||||||
|
|
5
test.sh
5
test.sh
|
@ -1,8 +1,9 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
export DATABASE_URL=postgres://lemmy:password@localhost:5432/lemmy
|
export DATABASE_URL=postgres://lemmy:password@localhost:5432/lemmy
|
||||||
diesel migration run
|
|
||||||
export LEMMY_DATABASE_URL=postgres://lemmy:password@localhost:5432/lemmy
|
export LEMMY_DATABASE_URL=postgres://lemmy:password@localhost:5432/lemmy
|
||||||
|
# Commenting since this will overwrite schema.rs, which will break things now
|
||||||
|
# diesel migration run
|
||||||
# Integration tests only work on stable due to a bug in config-rs
|
# Integration tests only work on stable due to a bug in config-rs
|
||||||
# https://github.com/mehcode/config-rs/issues/158
|
# https://github.com/mehcode/config-rs/issues/158
|
||||||
RUST_BACKTRACE=1 RUST_TEST_THREADS=1 \
|
RUST_BACKTRACE=1 RUST_TEST_THREADS=1 \
|
||||||
cargo +stable test --workspace --no-fail-fast
|
cargo +1.47.0 test --workspace --no-fail-fast
|
||||||
|
|
Loading…
Reference in a new issue