diff --git a/crates/apub/assets/mastodon/activities/create_note.json b/crates/apub/assets/mastodon/activities/create_note.json index 8b836fb24..d796a043e 100644 --- a/crates/apub/assets/mastodon/activities/create_note.json +++ b/crates/apub/assets/mastodon/activities/create_note.json @@ -1,4 +1,11 @@ { + "@context": [ + "https://www.w3.org/ns/activitystreams", + { + "ostatus": "http://ostatus.org#", + "atomUri": "ostatus:atomUri" + } + ], "id": "https://mastodon.madrid/users/felix/statuses/107224289116410645/activity", "type": "Create", "actor": "https://mastodon.madrid/users/felix", diff --git a/crates/apub/assets/mastodon/activities/follow.json b/crates/apub/assets/mastodon/activities/follow.json new file mode 100644 index 000000000..2381ed521 --- /dev/null +++ b/crates/apub/assets/mastodon/activities/follow.json @@ -0,0 +1,7 @@ +{ + "@context": "https://www.w3.org/ns/activitystreams", + "id": "https://masto.asonix.dog/1ea87517-63c5-4118-8831-460ee641b2cf", + "type": "Follow", + "actor": "https://masto.asonix.dog/users/asonix", + "object": "https://ds9.lemmy.ml/c/testcom" +} diff --git a/crates/apub/assets/mastodon/activities/undo_follow.json b/crates/apub/assets/mastodon/activities/undo_follow.json new file mode 100644 index 000000000..d47ecd886 --- /dev/null +++ b/crates/apub/assets/mastodon/activities/undo_follow.json @@ -0,0 +1,13 @@ +{ + "@context": "https://www.w3.org/ns/activitystreams", + "id": "https://masto.asonix.dog/users/asonix#follows/449/undo", + "type": "Undo", + "actor": "https://masto.asonix.dog/users/asonix", + "object": { + "id": "https://masto.asonix.dog/1ea87517-63c5-4118-8831-460ee641b2cf", + "type": "Follow", + "actor": "https://masto.asonix.dog/users/asonix", + "object": "https://ds9.lemmy.ml/c/testcom" + } +} + diff --git a/crates/apub/assets/smithereen/objects/note.json b/crates/apub/assets/smithereen/objects/note.json index 0a948ee3d..a8080cae1 100644 --- a/crates/apub/assets/smithereen/objects/note.json +++ b/crates/apub/assets/smithereen/objects/note.json @@ -28,5 +28,11 @@ } }, "sensitive": false, - "likes": "https://friends.grishka.me/posts/66561/likes" + "likes": "https://friends.grishka.me/posts/66561/likes", + "@context": [ + "https://www.w3.org/ns/activitystreams", + { + "sensitive": "as:sensitive" + } + ] } \ No newline at end of file diff --git a/crates/apub/src/collections/community_moderators.rs b/crates/apub/src/collections/community_moderators.rs index 72d23d4ac..d24f06a13 100644 --- a/crates/apub/src/collections/community_moderators.rs +++ b/crates/apub/src/collections/community_moderators.rs @@ -138,10 +138,13 @@ impl ApubObject for ApubCommunityModerators { #[cfg(test)] mod tests { use super::*; - use crate::objects::{ - community::tests::parse_lemmy_community, - person::tests::parse_lemmy_person, - tests::{file_to_json_object, init_context}, + use crate::{ + objects::{ + community::tests::parse_lemmy_community, + person::tests::parse_lemmy_person, + tests::init_context, + }, + protocol::tests::file_to_json_object, }; use lemmy_apub_lib::activity_queue::create_activity_queue; use lemmy_db_schema::{ diff --git a/crates/apub/src/objects/comment.rs b/crates/apub/src/objects/comment.rs index 82d9e4e44..7bb2dfa5b 100644 --- a/crates/apub/src/objects/comment.rs +++ b/crates/apub/src/objects/comment.rs @@ -208,12 +208,15 @@ impl ApubObject for ApubComment { #[cfg(test)] pub(crate) mod tests { use super::*; - use crate::objects::{ - community::{tests::parse_lemmy_community, ApubCommunity}, - instance::ApubSite, - person::{tests::parse_lemmy_person, ApubPerson}, - post::ApubPost, - tests::{file_to_json_object, init_context}, + use crate::{ + objects::{ + community::{tests::parse_lemmy_community, ApubCommunity}, + instance::ApubSite, + person::{tests::parse_lemmy_person, ApubPerson}, + post::ApubPost, + tests::init_context, + }, + protocol::tests::file_to_json_object, }; use assert_json_diff::assert_json_include; use lemmy_apub_lib::activity_queue::create_activity_queue; diff --git a/crates/apub/src/objects/community.rs b/crates/apub/src/objects/community.rs index 4a618bf88..f8f2e9454 100644 --- a/crates/apub/src/objects/community.rs +++ b/crates/apub/src/objects/community.rs @@ -214,9 +214,9 @@ impl ApubCommunity { #[cfg(test)] pub(crate) mod tests { use super::*; - use crate::objects::{ - instance::tests::parse_lemmy_instance, - tests::{file_to_json_object, init_context}, + use crate::{ + objects::{instance::tests::parse_lemmy_instance, tests::init_context}, + protocol::tests::file_to_json_object, }; use lemmy_apub_lib::activity_queue::create_activity_queue; use lemmy_db_schema::{source::site::Site, traits::Crud}; diff --git a/crates/apub/src/objects/instance.rs b/crates/apub/src/objects/instance.rs index cdd76c5a9..10ff44c28 100644 --- a/crates/apub/src/objects/instance.rs +++ b/crates/apub/src/objects/instance.rs @@ -186,7 +186,7 @@ pub(in crate::objects) async fn fetch_instance_actor_for_object( #[cfg(test)] pub(crate) mod tests { use super::*; - use crate::objects::tests::{file_to_json_object, init_context}; + use crate::{objects::tests::init_context, protocol::tests::file_to_json_object}; use lemmy_apub_lib::activity_queue::create_activity_queue; use lemmy_db_schema::traits::Crud; use serial_test::serial; diff --git a/crates/apub/src/objects/mod.rs b/crates/apub/src/objects/mod.rs index d7e386b10..cfe1ecd36 100644 --- a/crates/apub/src/objects/mod.rs +++ b/crates/apub/src/objects/mod.rs @@ -41,8 +41,7 @@ pub(crate) mod tests { use lemmy_websocket::{chat_server::ChatServer, LemmyContext}; use reqwest::Client; use reqwest_middleware::ClientBuilder; - use serde::de::DeserializeOwned; - use std::{fs::File, io::BufReader, sync::Arc}; + use std::sync::Arc; use tokio::sync::Mutex; // TODO: would be nice if we didnt have to use a full context for tests. @@ -90,10 +89,4 @@ pub(crate) mod tests { .start(); LemmyContext::create(pool, chat_server, client, activity_queue, settings, secret) } - - pub(crate) fn file_to_json_object(path: &str) -> Result { - let file = File::open(path)?; - let reader = BufReader::new(file); - Ok(serde_json::from_reader(reader)?) - } } diff --git a/crates/apub/src/objects/person.rs b/crates/apub/src/objects/person.rs index 80dd8bfd1..7d9d257dd 100644 --- a/crates/apub/src/objects/person.rs +++ b/crates/apub/src/objects/person.rs @@ -204,9 +204,9 @@ pub(crate) mod tests { use crate::{ objects::{ instance::{tests::parse_lemmy_instance, ApubSite}, - tests::{file_to_json_object, init_context}, + tests::init_context, }, - protocol::objects::instance::Instance, + protocol::{objects::instance::Instance, tests::file_to_json_object}, }; use lemmy_apub_lib::activity_queue::create_activity_queue; use lemmy_db_schema::{source::site::Site, traits::Crud}; diff --git a/crates/apub/src/objects/post.rs b/crates/apub/src/objects/post.rs index b15c9374b..c6c9af2cf 100644 --- a/crates/apub/src/objects/post.rs +++ b/crates/apub/src/objects/post.rs @@ -207,11 +207,14 @@ impl ApubObject for ApubPost { #[cfg(test)] mod tests { use super::*; - use crate::objects::{ - community::tests::parse_lemmy_community, - person::tests::parse_lemmy_person, - post::ApubPost, - tests::{file_to_json_object, init_context}, + use crate::{ + objects::{ + community::tests::parse_lemmy_community, + person::tests::parse_lemmy_person, + post::ApubPost, + tests::init_context, + }, + protocol::tests::file_to_json_object, }; use lemmy_apub_lib::activity_queue::create_activity_queue; use lemmy_db_schema::source::site::Site; diff --git a/crates/apub/src/objects/private_message.rs b/crates/apub/src/objects/private_message.rs index 62af38553..f346e9f68 100644 --- a/crates/apub/src/objects/private_message.rs +++ b/crates/apub/src/objects/private_message.rs @@ -159,9 +159,9 @@ impl ApubObject for ApubPrivateMessage { #[cfg(test)] mod tests { use super::*; - use crate::objects::{ - person::ApubPerson, - tests::{file_to_json_object, init_context}, + use crate::{ + objects::{person::ApubPerson, tests::init_context}, + protocol::tests::file_to_json_object, }; use assert_json_diff::assert_json_include; use lemmy_apub_lib::activity_queue::create_activity_queue; diff --git a/crates/apub/src/protocol/activities/block/mod.rs b/crates/apub/src/protocol/activities/block/mod.rs index eb3736f76..eaf05b9ac 100644 --- a/crates/apub/src/protocol/activities/block/mod.rs +++ b/crates/apub/src/protocol/activities/block/mod.rs @@ -8,8 +8,8 @@ mod tests { tests::test_parse_lemmy_item, }; - #[actix_rt::test] - async fn test_parse_lemmy_block() { + #[test] + fn test_parse_lemmy_block() { test_parse_lemmy_item::("assets/lemmy/activities/block/block_user.json").unwrap(); test_parse_lemmy_item::("assets/lemmy/activities/block/undo_block_user.json") .unwrap(); diff --git a/crates/apub/src/protocol/activities/community/mod.rs b/crates/apub/src/protocol/activities/community/mod.rs index a25d5ca2d..47771891f 100644 --- a/crates/apub/src/protocol/activities/community/mod.rs +++ b/crates/apub/src/protocol/activities/community/mod.rs @@ -17,8 +17,8 @@ mod tests { tests::test_parse_lemmy_item, }; - #[actix_rt::test] - async fn test_parse_lemmy_community() { + #[test] + fn test_parse_lemmy_community_activities() { test_parse_lemmy_item::( "assets/lemmy/activities/community/announce_create_page.json", ) diff --git a/crates/apub/src/protocol/activities/create_or_update/mod.rs b/crates/apub/src/protocol/activities/create_or_update/mod.rs index ff03c5a09..0d233ccfc 100644 --- a/crates/apub/src/protocol/activities/create_or_update/mod.rs +++ b/crates/apub/src/protocol/activities/create_or_update/mod.rs @@ -4,21 +4,17 @@ pub mod private_message; #[cfg(test)] mod tests { - use crate::{ - context::WithContext, - objects::tests::file_to_json_object, - protocol::{ - activities::create_or_update::{ - comment::CreateOrUpdateComment, - post::CreateOrUpdatePost, - private_message::CreateOrUpdatePrivateMessage, - }, - tests::test_parse_lemmy_item, + use crate::protocol::{ + activities::create_or_update::{ + comment::CreateOrUpdateComment, + post::CreateOrUpdatePost, + private_message::CreateOrUpdatePrivateMessage, }, + tests::test_parse_lemmy_item, }; - #[actix_rt::test] - async fn test_parse_create_or_update() { + #[test] + fn test_parse_lemmy_create_or_update() { test_parse_lemmy_item::( "assets/lemmy/activities/create_or_update/create_page.json", ) @@ -35,23 +31,5 @@ mod tests { "assets/lemmy/activities/create_or_update/create_private_message.json", ) .unwrap(); - - file_to_json_object::>( - "assets/pleroma/activities/create_note.json", - ) - .unwrap(); - file_to_json_object::>( - "assets/smithereen/activities/create_note.json", - ) - .unwrap(); - file_to_json_object::("assets/mastodon/activities/create_note.json") - .unwrap(); - - file_to_json_object::("assets/lotide/activities/create_page.json").unwrap(); - file_to_json_object::("assets/lotide/activities/create_note_reply.json") - .unwrap(); - - file_to_json_object::("assets/friendica/activities/create_note.json") - .unwrap(); } } diff --git a/crates/apub/src/protocol/activities/deletion/mod.rs b/crates/apub/src/protocol/activities/deletion/mod.rs index 9ecb65c4c..24f7ab16e 100644 --- a/crates/apub/src/protocol/activities/deletion/mod.rs +++ b/crates/apub/src/protocol/activities/deletion/mod.rs @@ -3,17 +3,13 @@ pub mod undo_delete; #[cfg(test)] mod tests { - use crate::{ - context::WithContext, - objects::tests::file_to_json_object, - protocol::{ - activities::deletion::{delete::Delete, undo_delete::UndoDelete}, - tests::test_parse_lemmy_item, - }, + use crate::protocol::{ + activities::deletion::{delete::Delete, undo_delete::UndoDelete}, + tests::test_parse_lemmy_item, }; - #[actix_rt::test] - async fn test_parse_deletion() { + #[test] + fn test_parse_lemmy_deletion() { test_parse_lemmy_item::("assets/lemmy/activities/deletion/remove_note.json").unwrap(); test_parse_lemmy_item::("assets/lemmy/activities/deletion/delete_page.json").unwrap(); @@ -27,8 +23,5 @@ mod tests { "assets/lemmy/activities/deletion/undo_delete_private_message.json", ) .unwrap(); - - file_to_json_object::>("assets/pleroma/activities/delete.json").unwrap(); - file_to_json_object::>("assets/mastodon/activities/delete.json").unwrap(); } } diff --git a/crates/apub/src/protocol/activities/following/mod.rs b/crates/apub/src/protocol/activities/following/mod.rs index 2b21b4834..1265512f9 100644 --- a/crates/apub/src/protocol/activities/following/mod.rs +++ b/crates/apub/src/protocol/activities/following/mod.rs @@ -4,21 +4,17 @@ pub mod undo_follow; #[cfg(test)] mod tests { - use crate::{ - context::WithContext, - objects::tests::file_to_json_object, - protocol::{ - activities::following::{ - accept::AcceptFollowCommunity, - follow::FollowCommunity, - undo_follow::UndoFollowCommunity, - }, - tests::test_parse_lemmy_item, + use crate::protocol::{ + activities::following::{ + accept::AcceptFollowCommunity, + follow::FollowCommunity, + undo_follow::UndoFollowCommunity, }, + tests::test_parse_lemmy_item, }; - #[actix_rt::test] - async fn test_parse_lemmy_accept_follow() { + #[test] + fn test_parse_lemmy_accept_follow() { test_parse_lemmy_item::("assets/lemmy/activities/following/follow.json") .unwrap(); test_parse_lemmy_item::("assets/lemmy/activities/following/accept.json") @@ -27,8 +23,5 @@ mod tests { "assets/lemmy/activities/following/undo_follow.json", ) .unwrap(); - - file_to_json_object::>("assets/pleroma/activities/follow.json") - .unwrap(); } } diff --git a/crates/apub/src/protocol/activities/mod.rs b/crates/apub/src/protocol/activities/mod.rs index 9279cab12..0f9509319 100644 --- a/crates/apub/src/protocol/activities/mod.rs +++ b/crates/apub/src/protocol/activities/mod.rs @@ -13,3 +13,46 @@ pub enum CreateOrUpdateType { Create, Update, } + +#[cfg(test)] +mod tests { + use crate::protocol::{ + activities::{ + create_or_update::{comment::CreateOrUpdateComment, post::CreateOrUpdatePost}, + deletion::delete::Delete, + following::{follow::FollowCommunity, undo_follow::UndoFollowCommunity}, + }, + tests::test_json, + }; + + #[test] + fn test_parse_smithereen_activities() { + test_json::("assets/smithereen/activities/create_note.json").unwrap(); + } + + #[test] + fn test_parse_pleroma_activities() { + test_json::("assets/pleroma/activities/create_note.json").unwrap(); + test_json::("assets/pleroma/activities/delete.json").unwrap(); + test_json::("assets/pleroma/activities/follow.json").unwrap(); + } + + #[test] + fn test_parse_mastodon_activities() { + test_json::("assets/mastodon/activities/create_note.json").unwrap(); + test_json::("assets/mastodon/activities/delete.json").unwrap(); + test_json::("assets/mastodon/activities/follow.json").unwrap(); + test_json::("assets/mastodon/activities/undo_follow.json").unwrap(); + } + + #[test] + fn test_parse_lotide_activities() { + test_json::("assets/lotide/activities/create_page.json").unwrap(); + test_json::("assets/lotide/activities/create_note_reply.json").unwrap(); + } + + #[test] + fn test_parse_friendica_activities() { + test_json::("assets/friendica/activities/create_note.json").unwrap(); + } +} diff --git a/crates/apub/src/protocol/activities/voting/mod.rs b/crates/apub/src/protocol/activities/voting/mod.rs index ab405d0d8..94f759ed8 100644 --- a/crates/apub/src/protocol/activities/voting/mod.rs +++ b/crates/apub/src/protocol/activities/voting/mod.rs @@ -8,8 +8,8 @@ mod tests { tests::test_parse_lemmy_item, }; - #[actix_rt::test] - async fn test_parse_lemmy_voting() { + #[test] + fn test_parse_lemmy_voting() { test_parse_lemmy_item::("assets/lemmy/activities/voting/like_note.json").unwrap(); test_parse_lemmy_item::("assets/lemmy/activities/voting/dislike_page.json").unwrap(); diff --git a/crates/apub/src/protocol/collections/mod.rs b/crates/apub/src/protocol/collections/mod.rs index f34dd1d10..0e251a1bb 100644 --- a/crates/apub/src/protocol/collections/mod.rs +++ b/crates/apub/src/protocol/collections/mod.rs @@ -15,8 +15,8 @@ mod tests { tests::test_parse_lemmy_item, }; - #[actix_rt::test] - async fn test_parse_lemmy_collections() { + #[test] + fn test_parse_lemmy_collections() { test_parse_lemmy_item::("assets/lemmy/collections/group_followers.json") .unwrap(); let outbox = diff --git a/crates/apub/src/protocol/mod.rs b/crates/apub/src/protocol/mod.rs index d1532a952..bb384de64 100644 --- a/crates/apub/src/protocol/mod.rs +++ b/crates/apub/src/protocol/mod.rs @@ -49,11 +49,21 @@ pub struct Unparsed(HashMap); #[cfg(test)] pub(crate) mod tests { - use crate::objects::tests::file_to_json_object; + use crate::context::WithContext; use assert_json_diff::assert_json_include; use lemmy_utils::LemmyError; use serde::{de::DeserializeOwned, Serialize}; - use std::collections::HashMap; + use std::{collections::HashMap, fs::File, io::BufReader}; + + pub(crate) fn file_to_json_object(path: &str) -> Result { + let file = File::open(path)?; + let reader = BufReader::new(file); + Ok(serde_json::from_reader(reader)?) + } + + pub(crate) fn test_json(path: &str) -> Result, LemmyError> { + file_to_json_object::>(path) + } /// Check that json deserialize -> serialize -> deserialize gives identical file as initial one. /// Ensures that there are no breaking changes in sent data. diff --git a/crates/apub/src/protocol/objects/mod.rs b/crates/apub/src/protocol/objects/mod.rs index 20aaca181..dfe502f3a 100644 --- a/crates/apub/src/protocol/objects/mod.rs +++ b/crates/apub/src/protocol/objects/mod.rs @@ -17,25 +17,21 @@ pub struct Endpoints { #[cfg(test)] mod tests { - use crate::{ - context::WithContext, - objects::tests::file_to_json_object, - protocol::{ - objects::{ - chat_message::ChatMessage, - group::Group, - instance::Instance, - note::Note, - page::Page, - person::Person, - tombstone::Tombstone, - }, - tests::test_parse_lemmy_item, + use crate::protocol::{ + objects::{ + chat_message::ChatMessage, + group::Group, + instance::Instance, + note::Note, + page::Page, + person::Person, + tombstone::Tombstone, }, + tests::{test_json, test_parse_lemmy_item}, }; - #[actix_rt::test] - async fn test_parse_objects_lemmy() { + #[test] + fn test_parse_objects_lemmy() { test_parse_lemmy_item::("assets/lemmy/objects/instance.json").unwrap(); test_parse_lemmy_item::("assets/lemmy/objects/group.json").unwrap(); test_parse_lemmy_item::("assets/lemmy/objects/person.json").unwrap(); @@ -45,38 +41,37 @@ mod tests { test_parse_lemmy_item::("assets/lemmy/objects/tombstone.json").unwrap(); } - #[actix_rt::test] - async fn test_parse_objects_pleroma() { - file_to_json_object::>("assets/pleroma/objects/person.json").unwrap(); - file_to_json_object::>("assets/pleroma/objects/note.json").unwrap(); - file_to_json_object::>("assets/pleroma/objects/chat_message.json") - .unwrap(); + #[test] + fn test_parse_objects_pleroma() { + test_json::("assets/pleroma/objects/person.json").unwrap(); + test_json::("assets/pleroma/objects/note.json").unwrap(); + test_json::("assets/pleroma/objects/chat_message.json").unwrap(); } - #[actix_rt::test] - async fn test_parse_objects_smithereen() { - file_to_json_object::>("assets/smithereen/objects/person.json").unwrap(); - file_to_json_object::("assets/smithereen/objects/note.json").unwrap(); + #[test] + fn test_parse_objects_smithereen() { + test_json::("assets/smithereen/objects/person.json").unwrap(); + test_json::("assets/smithereen/objects/note.json").unwrap(); } - #[actix_rt::test] - async fn test_parse_objects_mastodon() { - file_to_json_object::>("assets/mastodon/objects/person.json").unwrap(); - file_to_json_object::>("assets/mastodon/objects/note.json").unwrap(); + #[test] + fn test_parse_objects_mastodon() { + test_json::("assets/mastodon/objects/person.json").unwrap(); + test_json::("assets/mastodon/objects/note.json").unwrap(); } - #[actix_rt::test] - async fn test_parse_objects_lotide() { - file_to_json_object::>("assets/lotide/objects/group.json").unwrap(); - file_to_json_object::>("assets/lotide/objects/person.json").unwrap(); - file_to_json_object::>("assets/lotide/objects/note.json").unwrap(); - file_to_json_object::>("assets/lotide/objects/page.json").unwrap(); - file_to_json_object::>("assets/lotide/objects/tombstone.json").unwrap(); + #[test] + fn test_parse_objects_lotide() { + test_json::("assets/lotide/objects/group.json").unwrap(); + test_json::("assets/lotide/objects/person.json").unwrap(); + test_json::("assets/lotide/objects/note.json").unwrap(); + test_json::("assets/lotide/objects/page.json").unwrap(); + test_json::("assets/lotide/objects/tombstone.json").unwrap(); } - #[actix_rt::test] - async fn test_parse_object_friendica() { - file_to_json_object::>("assets/friendica/objects/person.json").unwrap(); - file_to_json_object::>("assets/friendica/objects/note.json").unwrap(); + #[test] + fn test_parse_object_friendica() { + test_json::("assets/friendica/objects/person.json").unwrap(); + test_json::("assets/friendica/objects/note.json").unwrap(); } }