* Fix following local communities stuck on pending (fixes #4160) * fmt * remove import --------- Co-authored-by: Dessalines <dessalines@users.noreply.github.com>
This commit is contained in:
parent
2070381e81
commit
25450ea090
5 changed files with 48 additions and 19 deletions
|
@ -10,6 +10,7 @@
|
||||||
"lint": "tsc --noEmit && eslint --report-unused-disable-directives --ext .js,.ts,.tsx src && prettier --check 'src/**/*.ts'",
|
"lint": "tsc --noEmit && eslint --report-unused-disable-directives --ext .js,.ts,.tsx src && prettier --check 'src/**/*.ts'",
|
||||||
"fix": "prettier --write src && eslint --fix src",
|
"fix": "prettier --write src && eslint --fix src",
|
||||||
"api-test": "jest -i follow.spec.ts && jest -i post.spec.ts && jest -i comment.spec.ts && jest -i private_message.spec.ts && jest -i user.spec.ts && jest -i community.spec.ts && jest -i image.spec.ts",
|
"api-test": "jest -i follow.spec.ts && jest -i post.spec.ts && jest -i comment.spec.ts && jest -i private_message.spec.ts && jest -i user.spec.ts && jest -i community.spec.ts && jest -i image.spec.ts",
|
||||||
|
"api-test-follow": "jest -i follow.spec.ts",
|
||||||
"api-test-comment": "jest -i comment.spec.ts",
|
"api-test-comment": "jest -i comment.spec.ts",
|
||||||
"api-test-post": "jest -i post.spec.ts",
|
"api-test-post": "jest -i post.spec.ts",
|
||||||
"api-test-user": "jest -i user.spec.ts",
|
"api-test-user": "jest -i user.spec.ts",
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
jest.setTimeout(120000);
|
jest.setTimeout(120000);
|
||||||
|
|
||||||
|
import { LemmyHttp } from "lemmy-js-client";
|
||||||
import {
|
import {
|
||||||
alpha,
|
alpha,
|
||||||
setupLogins,
|
setupLogins,
|
||||||
|
@ -8,6 +9,9 @@ import {
|
||||||
unfollowRemotes,
|
unfollowRemotes,
|
||||||
getSite,
|
getSite,
|
||||||
waitUntil,
|
waitUntil,
|
||||||
|
beta,
|
||||||
|
registerUser,
|
||||||
|
betaUrl,
|
||||||
} from "./shared";
|
} from "./shared";
|
||||||
|
|
||||||
beforeAll(setupLogins);
|
beforeAll(setupLogins);
|
||||||
|
@ -16,12 +20,35 @@ afterAll(() => {
|
||||||
unfollowRemotes(alpha);
|
unfollowRemotes(alpha);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("Follow local community", async () => {
|
||||||
|
let userRes = await registerUser(beta);
|
||||||
|
expect(userRes.jwt).toBeDefined();
|
||||||
|
let user = new LemmyHttp(betaUrl, {
|
||||||
|
headers: { Authorization: `Bearer ${userRes.jwt ?? ""}` },
|
||||||
|
});
|
||||||
|
|
||||||
|
let community = (await resolveBetaCommunity(user)).community!;
|
||||||
|
expect(community.counts.subscribers).toBe(1);
|
||||||
|
let follow = await followCommunity(user, true, community.community.id);
|
||||||
|
|
||||||
|
// Make sure the follow response went through
|
||||||
|
expect(follow.community_view.community.local).toBe(true);
|
||||||
|
expect(follow.community_view.subscribed).toBe("Subscribed");
|
||||||
|
expect(follow.community_view.counts.subscribers).toBe(2);
|
||||||
|
|
||||||
|
// Test an unfollow
|
||||||
|
let unfollow = await followCommunity(user, false, community.community.id);
|
||||||
|
expect(unfollow.community_view.subscribed).toBe("NotSubscribed");
|
||||||
|
expect(unfollow.community_view.counts.subscribers).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
test("Follow federated community", async () => {
|
test("Follow federated community", async () => {
|
||||||
let betaCommunity = (await resolveBetaCommunity(alpha)).community;
|
let betaCommunity = (await resolveBetaCommunity(alpha)).community;
|
||||||
if (!betaCommunity) {
|
if (!betaCommunity) {
|
||||||
throw "Missing beta community";
|
throw "Missing beta community";
|
||||||
}
|
}
|
||||||
await followCommunity(alpha, true, betaCommunity.community.id);
|
let follow = await followCommunity(alpha, true, betaCommunity.community.id);
|
||||||
|
expect(follow.community_view.subscribed).toBe("Pending");
|
||||||
betaCommunity = (
|
betaCommunity = (
|
||||||
await waitUntil(
|
await waitUntil(
|
||||||
() => resolveBetaCommunity(alpha),
|
() => resolveBetaCommunity(alpha),
|
||||||
|
@ -34,6 +61,10 @@ test("Follow federated community", async () => {
|
||||||
expect(betaCommunity?.community.name).toBe("main");
|
expect(betaCommunity?.community.name).toBe("main");
|
||||||
expect(betaCommunity?.subscribed).toBe("Subscribed");
|
expect(betaCommunity?.subscribed).toBe("Subscribed");
|
||||||
|
|
||||||
|
// check that unfollow was federated
|
||||||
|
let communityOnBeta1 = await resolveBetaCommunity(beta);
|
||||||
|
expect(communityOnBeta1.community?.counts.subscribers).toBe(2);
|
||||||
|
|
||||||
// Check it from local
|
// Check it from local
|
||||||
let site = await getSite(alpha);
|
let site = await getSite(alpha);
|
||||||
let remoteCommunityId = site.my_user?.follows.find(
|
let remoteCommunityId = site.my_user?.follows.find(
|
||||||
|
@ -53,4 +84,8 @@ test("Follow federated community", async () => {
|
||||||
// Make sure you are unsubbed locally
|
// Make sure you are unsubbed locally
|
||||||
let siteUnfollowCheck = await getSite(alpha);
|
let siteUnfollowCheck = await getSite(alpha);
|
||||||
expect(siteUnfollowCheck.my_user?.follows.length).toBe(1);
|
expect(siteUnfollowCheck.my_user?.follows.length).toBe(1);
|
||||||
|
|
||||||
|
// check that unfollow was federated
|
||||||
|
let communityOnBeta2 = await resolveBetaCommunity(beta);
|
||||||
|
expect(communityOnBeta2.community?.counts.subscribers).toBe(1);
|
||||||
});
|
});
|
||||||
|
|
|
@ -425,8 +425,9 @@ export async function followCommunity(
|
||||||
};
|
};
|
||||||
const res = await api.followCommunity(form);
|
const res = await api.followCommunity(form);
|
||||||
await waitUntil(
|
await waitUntil(
|
||||||
() => resolveCommunity(api, res.community_view.community.actor_id),
|
() => getCommunity(api, res.community_view.community.id),
|
||||||
g => g.community?.subscribed === (follow ? "Subscribed" : "NotSubscribed"),
|
g =>
|
||||||
|
g.community_view.subscribed === (follow ? "Subscribed" : "NotSubscribed"),
|
||||||
);
|
);
|
||||||
// wait FOLLOW_ADDITIONS_RECHECK_DELAY (there's no API to wait for this currently)
|
// wait FOLLOW_ADDITIONS_RECHECK_DELAY (there's no API to wait for this currently)
|
||||||
await delay(2000);
|
await delay(2000);
|
||||||
|
|
|
@ -45,18 +45,19 @@ pub async fn follow_community(
|
||||||
.await
|
.await
|
||||||
.with_lemmy_type(LemmyErrorType::CommunityFollowerAlreadyExists)?;
|
.with_lemmy_type(LemmyErrorType::CommunityFollowerAlreadyExists)?;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
if !data.follow {
|
|
||||||
CommunityFollower::unfollow(&mut context.pool(), &community_follower_form)
|
CommunityFollower::unfollow(&mut context.pool(), &community_follower_form)
|
||||||
.await
|
.await
|
||||||
.with_lemmy_type(LemmyErrorType::CommunityFollowerAlreadyExists)?;
|
.with_lemmy_type(LemmyErrorType::CommunityFollowerAlreadyExists)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !community.local {
|
||||||
ActivityChannel::submit_activity(
|
ActivityChannel::submit_activity(
|
||||||
SendActivityData::FollowCommunity(community, local_user_view.person.clone(), data.follow),
|
SendActivityData::FollowCommunity(community, local_user_view.person.clone(), data.follow),
|
||||||
&context,
|
&context,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
}
|
||||||
|
|
||||||
let community_id = data.community_id;
|
let community_id = data.community_id;
|
||||||
let person_id = local_user_view.person.id;
|
let person_id = local_user_view.person.id;
|
||||||
|
|
|
@ -52,15 +52,6 @@ impl Follow {
|
||||||
community: &ApubCommunity,
|
community: &ApubCommunity,
|
||||||
context: &Data<LemmyContext>,
|
context: &Data<LemmyContext>,
|
||||||
) -> Result<(), LemmyError> {
|
) -> Result<(), LemmyError> {
|
||||||
let community_follower_form = CommunityFollowerForm {
|
|
||||||
community_id: community.id,
|
|
||||||
person_id: actor.id,
|
|
||||||
pending: true,
|
|
||||||
};
|
|
||||||
CommunityFollower::follow(&mut context.pool(), &community_follower_form)
|
|
||||||
.await
|
|
||||||
.ok();
|
|
||||||
|
|
||||||
let follow = Follow::new(actor, community, context)?;
|
let follow = Follow::new(actor, community, context)?;
|
||||||
let inbox = if community.local {
|
let inbox = if community.local {
|
||||||
ActivitySendTargets::empty()
|
ActivitySendTargets::empty()
|
||||||
|
|
Loading…
Reference in a new issue