+ let post_spanish = PostInsertForm::builder()
+ .name("asffgdsc".to_string())
+ .creator_id(data.inserted_person.id)
+ .community_id(data.inserted_community.id)
+ .language_id(Some(spanish_id))
+ .build();
+
+ Post::create(pool, &post_spanish).await.unwrap();
+
+ let post_listings_all = PostQuery {
+ sort: (Some(SortType::New)),
+ local_user: (Some(&data.inserted_local_user)),
+ ..Default::default()
+ }
+ .list(pool)
+ .await
+ .unwrap();
+
+ // no language filters specified, all posts should be returned
+ assert_eq!(3, post_listings_all.len());
+
+ let french_id = Language::read_id_from_code(pool, Some("fr"))
+ .await
+ .unwrap()
+ .unwrap();
+ LocalUserLanguage::update(pool, vec![french_id], data.inserted_local_user.id)
+ .await
+ .unwrap();
+
+ let post_listing_french = PostQuery {
+ sort: (Some(SortType::New)),
+ local_user: (Some(&data.inserted_local_user)),
+ ..Default::default()
+ }
+ .list(pool)
+ .await
+ .unwrap();
+
+ // only one post in french and one undetermined should be returned
+ assert_eq!(2, post_listing_french.len());
+ assert!(post_listing_french
+ .iter()
+ .any(|p| p.post.language_id == french_id));
+
+ LocalUserLanguage::update(
+ pool,
+ vec![french_id, UNDETERMINED_ID],
+ data.inserted_local_user.id,
+ )
+ .await
+ .unwrap();
+ let post_listings_french_und = PostQuery {
+ sort: (Some(SortType::New)),
+ local_user: (Some(&data.inserted_local_user)),
+ ..Default::default()
+ }
+ .list(pool)
+ .await
+ .unwrap();
+
+ // french post and undetermined language post should be returned
+ assert_eq!(2, post_listings_french_und.len());
+ assert_eq!(
+ UNDETERMINED_ID,
+ post_listings_french_und[0].post.language_id
+ );
+ assert_eq!(french_id, post_listings_french_und[1].post.language_id);
+
+ cleanup(data, pool).await;
+ }
+
+ #[tokio::test]
+ #[serial]
+ async fn post_listings_deleted() {
+ let pool = &build_db_pool_for_tests().await;
+ let pool = &mut pool.into();
+ let data = init_data(pool).await;
+
+ // Delete the post
+ Post::update(
+ pool,
+ data.inserted_post.id,
+ &PostUpdateForm::builder().deleted(Some(true)).build(),
+ )
+ .await
+ .unwrap();
+
+ // Make sure you don't see the deleted post in the results
+ let post_listings_no_admin = PostQuery {
+ sort: (Some(SortType::New)),
+ local_user: (Some(&data.inserted_local_user)),
+ is_mod_or_admin: (Some(false)),
+ ..Default::default()
+ }
+ .list(pool)
+ .await
+ .unwrap();
+
+ assert_eq!(1, post_listings_no_admin.len());
+
+ // Make sure they see both
+ let post_listings_is_admin = PostQuery {
+ sort: (Some(SortType::New)),
+ local_user: (Some(&data.inserted_local_user)),
+ is_mod_or_admin: (Some(true)),
+ ..Default::default()
+ }
+ .list(pool)
+ .await
+ .unwrap();
+
+ assert_eq!(2, post_listings_is_admin.len());
+
+ cleanup(data, pool).await;
+ }