Add tests for ToApub, private message, remove update script

pleroma-federation2
Felix Ableitner 2021-10-21 12:25:27 +02:00
parent 837c058843
commit b4d06b7705
11 changed files with 109 additions and 31 deletions

11
Cargo.lock generated
View File

@ -315,6 +315,16 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
[[package]]
name = "assert-json-diff"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50f1c3703dd33532d7f0ca049168930e9099ecac238e23cf932f3a69c42f06da"
dependencies = [
"serde",
"serde_json",
]
[[package]]
name = "async-mutex"
version = "1.4.0"
@ -1811,6 +1821,7 @@ dependencies = [
"actix-rt",
"actix-web",
"anyhow",
"assert-json-diff",
"async-trait",
"awc",
"background-jobs",

View File

@ -1,7 +1,7 @@
# See the documentation for available config fields and descriptions:
# https://join-lemmy.org/docs/en/administration/configuration.html
{
hostname: lemmy-alphan
hostname: lemmy-alpha
federation: {
enabled: true
}

View File

@ -53,3 +53,4 @@ html2md = "0.2.13"
[dev-dependencies]
serial_test = "0.5.1"
assert-json-diff = "2.0.1"

View File

@ -30,9 +30,9 @@
"id": "https://lemmy.ml/c/announcements",
"inbox": "https://lemmy.ml/c/announcements/inbox",
"mediaType": "text/html",
"moderators": "https://lemmy.ml/c/announcements/not_moderators",
"moderators": "https://lemmy.ml/c/announcements/moderators",
"name": "Announcements",
"outbox": "https://lemmy.ml/c/announcements/not_outbox",
"outbox": "https://lemmy.ml/c/announcements/outbox",
"preferredUsername": "announcements",
"publicKey": {
"id": "https://lemmy.ml/c/announcements#main-key",

View File

@ -0,0 +1,32 @@
{
"@context": [
"https://www.w3.org/ns/activitystreams",
{
"comments_enabled": {
"id": "pt:commentsEnabled",
"type": "sc:Boolean"
},
"matrixUserId": {
"id": "as:alsoKnownAs",
"type": "sc:Text"
},
"moderators": "as:moderators",
"pt": "https://join-lemmy.org#",
"sc": "http://schema.org#",
"sensitive": "as:sensitive",
"stickied": "as:stickied"
},
"https://w3id.org/security/v1"
],
"attributedTo": "https://lemmy.ml/u/nutomic",
"content": "test",
"id": "https://lemmy.ml/private_message/1621",
"mediaType": "text/html",
"published": "2021-10-21T10:13:14.597721+00:00",
"source": {
"content": "test",
"mediaType": "text/markdown"
},
"to": "https://queer.hacktivis.me/users/lanodan",
"type": "Note"
}

View File

@ -316,6 +316,7 @@ mod tests {
community::ApubCommunity,
tests::{file_to_json_object, init_context},
};
use assert_json_diff::assert_json_include;
use serial_test::serial;
async fn prepare_comment_test(url: &Url, context: &LemmyContext) {
@ -350,6 +351,9 @@ mod tests {
assert_eq!(comment.content.len(), 1063);
assert!(!comment.local);
assert_eq!(request_counter, 0);
let to_apub = comment.to_apub(context.pool()).await.unwrap();
assert_json_include!(actual: json, expected: to_apub);
}
#[actix_rt::test]

View File

@ -318,15 +318,22 @@ impl CommunityType for Community {
mod tests {
use super::*;
use crate::objects::tests::{file_to_json_object, init_context};
use assert_json_diff::assert_json_include;
use serial_test::serial;
#[actix_rt::test]
#[serial]
async fn test_fetch_lemmy_community() {
let json = file_to_json_object("assets/lemmy-community.json");
let context = init_context();
let mut json: Group = file_to_json_object("assets/lemmy-community.json");
let json_orig = json.clone();
// change these links so they dont fetch over the network
json.moderators = Some(Url::parse("https://lemmy.ml/c/announcements/not_moderators").unwrap());
json.outbox = Url::parse("https://lemmy.ml/c/announcements/not_outbox").unwrap();
let url = Url::parse("https://lemmy.ml/c/announcements").unwrap();
let mut request_counter = 0;
let community = ApubCommunity::from_apub(&json, &init_context(), &url, &mut request_counter)
let community = ApubCommunity::from_apub(&json, &context, &url, &mut request_counter)
.await
.unwrap();
@ -337,5 +344,8 @@ mod tests {
assert_eq!(community.description.as_ref().unwrap().len(), 126);
// this makes two requests to the (intentionally) broken outbox/moderators collections
assert_eq!(request_counter, 2);
let to_apub = community.to_apub(context.pool()).await.unwrap();
assert_json_include!(actual: json_orig, expected: to_apub);
}
}

View File

@ -271,15 +271,17 @@ impl FromApub for ApubPerson {
mod tests {
use super::*;
use crate::objects::tests::{file_to_json_object, init_context};
use assert_json_diff::assert_json_include;
use serial_test::serial;
#[actix_rt::test]
#[serial]
async fn test_fetch_lemmy_person() {
let context = init_context();
let json = file_to_json_object("assets/lemmy-person.json");
let url = Url::parse("https://lemmy.ml/u/nutomic").unwrap();
let mut request_counter = 0;
let person = ApubPerson::from_apub(&json, &init_context(), &url, &mut request_counter)
let person = ApubPerson::from_apub(&json, &context, &url, &mut request_counter)
.await
.unwrap();
@ -289,6 +291,9 @@ mod tests {
assert!(!person.local);
assert!(person.bio.is_some());
assert_eq!(request_counter, 0);
let to_apub = person.to_apub(context.pool()).await.unwrap();
assert_json_include!(actual: json, expected: to_apub);
}
#[actix_rt::test]

View File

@ -285,6 +285,7 @@ mod tests {
community::ApubCommunity,
tests::{file_to_json_object, init_context},
};
use assert_json_diff::assert_json_include;
use serial_test::serial;
#[actix_rt::test]
@ -312,7 +313,9 @@ mod tests {
assert_eq!(post.body.as_ref().unwrap().len(), 2144);
assert!(!post.locked);
assert!(post.stickied);
// see comment in test_fetch_lemmy_community() about this
assert_eq!(request_counter, 0);
let to_apub = post.to_apub(context.pool()).await.unwrap();
assert_json_include!(actual: json, expected: to_apub);
}
}

View File

@ -199,3 +199,39 @@ impl FromApub for ApubPrivateMessage {
Ok(pm.into())
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::objects::tests::{file_to_json_object, init_context};
use assert_json_diff::assert_json_include;
use serial_test::serial;
#[actix_rt::test]
#[serial]
async fn test_fetch_lemmy_pm() {
let context = init_context();
let url = Url::parse("https://lemmy.ml/private_message/1621").unwrap();
let lemmy_person = file_to_json_object("assets/lemmy-person.json");
ApubPerson::from_apub(&lemmy_person, &context, &url, &mut 0)
.await
.unwrap();
let pleroma_person = file_to_json_object("assets/pleroma-person.json");
let pleroma_url = Url::parse("https://queer.hacktivis.me/users/lanodan").unwrap();
ApubPerson::from_apub(&pleroma_person, &context, &pleroma_url, &mut 0)
.await
.unwrap();
let json = file_to_json_object("assets/lemmy-private-message.json");
let mut request_counter = 0;
let pm = ApubPrivateMessage::from_apub(&json, &context, &url, &mut request_counter)
.await
.unwrap();
assert_eq!(pm.ap_id.clone().into_inner(), url);
assert_eq!(pm.content.len(), 4);
assert_eq!(request_counter, 0);
let to_apub = pm.to_apub(context.pool()).await.unwrap();
assert_json_include!(actual: json, expected: to_apub);
}
}

View File

@ -1,24 +0,0 @@
#!/bin/bash
set -e
curl -H "Accept: application/activity+json" https://lemmy.ml/u/nutomic | jq -S \
> crates/apub/assets/lemmy-person.json
curl -H "Accept: application/activity+json" https://lemmy.ml/c/announcements | jq -S \
> crates/apub/assets/lemmy-community.json
# replace these collection links so that tests dont make any actual http requests
sed -i 's/https:\/\/lemmy.ml\/c\/announcements\/outbox/https:\/\/lemmy.ml\/c\/announcements\/not_outbox/g' crates/apub/assets/lemmy-community.json
sed -i 's/https:\/\/lemmy.ml\/c\/announcements\/moderators/https:\/\/lemmy.ml\/c\/announcements\/not_moderators/g' crates/apub/assets/lemmy-community.json
curl -H "Accept: application/activity+json" https://lemmy.ml/post/55143 | jq -S \
> crates/apub/assets/lemmy-post.json
curl -H "Accept: application/activity+json" https://lemmy.ml/comment/38741 | jq -S \
> crates/apub/assets/lemmy-comment.json
# replace attributed_to user, so that it takes the same one from above
sed -i 's/https:\/\/lemmy.ml\/u\/my_test/https:\/\/lemmy.ml\/u\/nutomic/g' crates/apub/assets/lemmy-comment.json
curl -H "Accept: application/activity+json" https://queer.hacktivis.me/users/lanodan | jq -S \
> crates/apub/assets/pleroma-person.json
curl -H "Accept: application/activity+json" https://queer.hacktivis.me/objects/8d4973f4-53de-49cd-8c27-df160e16a9c2 | jq -S \
> crates/apub/assets/pleroma-comment.json
# rewrite comment inReplyTo so that it refers to our post above (cause lemmy doesnt support standalone comments)
sed -i 's/https:\/\/pleroma.popolon.org\/objects\/bf84a0fb-2ec2-4dff-a1d9-6b573f94fb16/https:\/\/lemmy.ml\/post\/55143/g' crates/apub/assets/pleroma-comment.json