mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-30 00:01:25 +00:00
Federate sticky flag dessalines (#1021)
* Federate sticky flag (ref #1018) * Adding tests for federated sticky and lock. * Changing test to make sure it returns the correct locked error. Co-authored-by: Felix Ableitner <me@nutomic.com>
This commit is contained in:
parent
d1342afe93
commit
c066915b8e
3 changed files with 101 additions and 13 deletions
|
@ -7,6 +7,7 @@ use serde::{Deserialize, Serialize};
|
||||||
pub struct PageExtension {
|
pub struct PageExtension {
|
||||||
pub comments_enabled: bool,
|
pub comments_enabled: bool,
|
||||||
pub sensitive: bool,
|
pub sensitive: bool,
|
||||||
|
pub stickied: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<U> UnparsedExtension<U> for PageExtension
|
impl<U> UnparsedExtension<U> for PageExtension
|
||||||
|
@ -19,12 +20,14 @@ where
|
||||||
Ok(PageExtension {
|
Ok(PageExtension {
|
||||||
comments_enabled: unparsed_mut.remove("commentsEnabled")?,
|
comments_enabled: unparsed_mut.remove("commentsEnabled")?,
|
||||||
sensitive: unparsed_mut.remove("sensitive")?,
|
sensitive: unparsed_mut.remove("sensitive")?,
|
||||||
|
stickied: unparsed_mut.remove("stickied")?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn try_into_unparsed(self, unparsed_mut: &mut U) -> Result<(), Self::Error> {
|
fn try_into_unparsed(self, unparsed_mut: &mut U) -> Result<(), Self::Error> {
|
||||||
unparsed_mut.insert("commentsEnabled", self.comments_enabled)?;
|
unparsed_mut.insert("commentsEnabled", self.comments_enabled)?;
|
||||||
unparsed_mut.insert("sensitive", self.sensitive)?;
|
unparsed_mut.insert("sensitive", self.sensitive)?;
|
||||||
|
unparsed_mut.insert("stickied", self.stickied)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,14 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
apub::{
|
apub::{
|
||||||
activities::send_activity_to_community,
|
activities::send_activity_to_community,
|
||||||
create_apub_response,
|
create_apub_response, create_apub_tombstone_response, create_tombstone,
|
||||||
create_apub_tombstone_response,
|
|
||||||
create_tombstone,
|
|
||||||
extensions::page_extension::PageExtension,
|
extensions::page_extension::PageExtension,
|
||||||
fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user},
|
fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user},
|
||||||
ActorType,
|
ActorType, ApubLikeableType, ApubObjectType, FromApub, PageExt, ToApub,
|
||||||
ApubLikeableType,
|
|
||||||
ApubObjectType,
|
|
||||||
FromApub,
|
|
||||||
PageExt,
|
|
||||||
ToApub,
|
|
||||||
},
|
},
|
||||||
blocking,
|
blocking,
|
||||||
routes::DbPoolParam,
|
routes::DbPoolParam,
|
||||||
DbPool,
|
DbPool, LemmyError,
|
||||||
LemmyError,
|
|
||||||
};
|
};
|
||||||
use activitystreams_ext::Ext1;
|
use activitystreams_ext::Ext1;
|
||||||
use activitystreams_new::{
|
use activitystreams_new::{
|
||||||
|
@ -133,6 +125,7 @@ impl ToApub for Post {
|
||||||
let ext = PageExtension {
|
let ext = PageExtension {
|
||||||
comments_enabled: !self.locked,
|
comments_enabled: !self.locked,
|
||||||
sensitive: self.nsfw,
|
sensitive: self.nsfw,
|
||||||
|
stickied: self.stickied,
|
||||||
};
|
};
|
||||||
Ok(Ext1::new(page, ext))
|
Ok(Ext1::new(page, ext))
|
||||||
}
|
}
|
||||||
|
@ -244,7 +237,7 @@ impl FromApub for PostForm {
|
||||||
.map(|u| u.to_owned().naive_local()),
|
.map(|u| u.to_owned().naive_local()),
|
||||||
deleted: None,
|
deleted: None,
|
||||||
nsfw: ext.sensitive,
|
nsfw: ext.sensitive,
|
||||||
stickied: None, // -> put it in "featured" collection of the community
|
stickied: Some(ext.stickied),
|
||||||
embed_title,
|
embed_title,
|
||||||
embed_description,
|
embed_description,
|
||||||
embed_html,
|
embed_html,
|
||||||
|
|
94
ui/src/api_tests/api.spec.ts
vendored
94
ui/src/api_tests/api.spec.ts
vendored
|
@ -6,7 +6,8 @@ import {
|
||||||
PostForm,
|
PostForm,
|
||||||
DeletePostForm,
|
DeletePostForm,
|
||||||
RemovePostForm,
|
RemovePostForm,
|
||||||
// TODO need to test LockPost and StickyPost federated
|
StickyPostForm,
|
||||||
|
LockPostForm,
|
||||||
PostResponse,
|
PostResponse,
|
||||||
SearchResponse,
|
SearchResponse,
|
||||||
FollowCommunityForm,
|
FollowCommunityForm,
|
||||||
|
@ -345,6 +346,27 @@ describe('main', () => {
|
||||||
expect(updateResponse.post.community_local).toBe(false);
|
expect(updateResponse.post.community_local).toBe(false);
|
||||||
expect(updateResponse.post.creator_local).toBe(true);
|
expect(updateResponse.post.creator_local).toBe(true);
|
||||||
|
|
||||||
|
let stickyPostForm: StickyPostForm = {
|
||||||
|
edit_id: 2,
|
||||||
|
stickied: true,
|
||||||
|
auth: lemmyAlphaAuth,
|
||||||
|
};
|
||||||
|
|
||||||
|
let stickyRes: PostResponse = await fetch(
|
||||||
|
`${lemmyAlphaApiUrl}/post/sticky`,
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: wrapper(stickyPostForm),
|
||||||
|
}
|
||||||
|
).then(d => d.json());
|
||||||
|
|
||||||
|
expect(stickyRes.post.name).toBe(name);
|
||||||
|
expect(stickyRes.post.stickied).toBe(true);
|
||||||
|
|
||||||
|
// Fetch from B
|
||||||
let getPostUrl = `${lemmyBetaApiUrl}/post?id=2`;
|
let getPostUrl = `${lemmyBetaApiUrl}/post?id=2`;
|
||||||
let getPostRes: GetPostResponse = await fetch(getPostUrl, {
|
let getPostRes: GetPostResponse = await fetch(getPostUrl, {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
|
@ -353,6 +375,76 @@ describe('main', () => {
|
||||||
expect(getPostRes.post.name).toBe(name);
|
expect(getPostRes.post.name).toBe(name);
|
||||||
expect(getPostRes.post.community_local).toBe(true);
|
expect(getPostRes.post.community_local).toBe(true);
|
||||||
expect(getPostRes.post.creator_local).toBe(false);
|
expect(getPostRes.post.creator_local).toBe(false);
|
||||||
|
expect(getPostRes.post.stickied).toBe(true);
|
||||||
|
|
||||||
|
let lockPostForm: LockPostForm = {
|
||||||
|
edit_id: 2,
|
||||||
|
locked: true,
|
||||||
|
auth: lemmyAlphaAuth,
|
||||||
|
};
|
||||||
|
|
||||||
|
let lockedRes: PostResponse = await fetch(
|
||||||
|
`${lemmyAlphaApiUrl}/post/lock`,
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: wrapper(lockPostForm),
|
||||||
|
}
|
||||||
|
).then(d => d.json());
|
||||||
|
|
||||||
|
expect(lockedRes.post.name).toBe(name);
|
||||||
|
expect(lockedRes.post.locked).toBe(true);
|
||||||
|
|
||||||
|
// Fetch from B to make sure its locked
|
||||||
|
getPostRes = await fetch(getPostUrl, {
|
||||||
|
method: 'GET',
|
||||||
|
}).then(d => d.json());
|
||||||
|
expect(getPostRes.post.locked).toBe(true);
|
||||||
|
|
||||||
|
// Create a test comment on a locked post, it should be undefined
|
||||||
|
// since it shouldn't get created.
|
||||||
|
let content = 'A rejected comment on a locked post';
|
||||||
|
let commentForm: CommentForm = {
|
||||||
|
content,
|
||||||
|
post_id: 2,
|
||||||
|
auth: lemmyAlphaAuth,
|
||||||
|
};
|
||||||
|
|
||||||
|
let createResponse: CommentResponse = await fetch(
|
||||||
|
`${lemmyAlphaApiUrl}/comment`,
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: wrapper(commentForm),
|
||||||
|
}
|
||||||
|
).then(d => d.json());
|
||||||
|
|
||||||
|
expect(createResponse['error']).toBe('locked');
|
||||||
|
|
||||||
|
// Unlock the post for later actions
|
||||||
|
let unlockPostForm: LockPostForm = {
|
||||||
|
edit_id: 2,
|
||||||
|
locked: false,
|
||||||
|
auth: lemmyAlphaAuth,
|
||||||
|
};
|
||||||
|
|
||||||
|
let unlockedRes: PostResponse = await fetch(
|
||||||
|
`${lemmyAlphaApiUrl}/post/lock`,
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: wrapper(unlockPostForm),
|
||||||
|
}
|
||||||
|
).then(d => d.json());
|
||||||
|
|
||||||
|
expect(unlockedRes.post.name).toBe(name);
|
||||||
|
expect(unlockedRes.post.locked).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue