lemmy/api_tests/src/community.spec.ts

202 lines
7.1 KiB
TypeScript
Raw Normal View History

jest.setTimeout(120000);
import { CommunityView } from 'lemmy-js-client';
import {
alpha,
beta,
gamma,
setupLogins,
resolveCommunity,
createCommunity,
deleteCommunity,
removeCommunity,
getCommunity,
followCommunity,
banPersonFromCommunity,
resolvePerson,
getSite,
createPost,
getPost,
resolvePost,
} from './shared';
beforeAll(async () => {
await setupLogins();
});
function assertCommunityFederation(
2020-12-20 21:16:57 +00:00
communityOne: CommunityView,
communityTwo: CommunityView
) {
expect(communityOne.community.actor_id).toBe(communityTwo.community.actor_id);
expect(communityOne.community.name).toBe(communityTwo.community.name);
expect(communityOne.community.title).toBe(communityTwo.community.title);
expect(communityOne.community.description.unwrapOr("none")).toBe(
communityTwo.community.description.unwrapOr("none")
2020-12-20 21:16:57 +00:00
);
expect(communityOne.community.icon.unwrapOr("none")).toBe(communityTwo.community.icon.unwrapOr("none"));
expect(communityOne.community.banner.unwrapOr("none")).toBe(communityTwo.community.banner.unwrapOr("none"));
2020-12-20 21:16:57 +00:00
expect(communityOne.community.published).toBe(
communityTwo.community.published
);
expect(communityOne.community.nsfw).toBe(communityTwo.community.nsfw);
expect(communityOne.community.removed).toBe(communityTwo.community.removed);
expect(communityOne.community.deleted).toBe(communityTwo.community.deleted);
}
test('Create community', async () => {
let communityRes = await createCommunity(alpha);
2020-12-20 21:16:57 +00:00
expect(communityRes.community_view.community.name).toBeDefined();
// A dupe check
2020-12-20 21:16:57 +00:00
let prevName = communityRes.community_view.community.name;
let communityRes2: any = await createCommunity(alpha, prevName);
expect(communityRes2['error']).toBe('community_already_exists');
// Cache the community on beta, make sure it has the other fields
let searchShort = `!${prevName}@lemmy-alpha:8541`;
let betaCommunity = (await resolveCommunity(beta, searchShort)).community.unwrap();
assertCommunityFederation(betaCommunity, communityRes.community_view);
});
test('Delete community', async () => {
let communityRes = await createCommunity(beta);
// Cache the community on Alpha
2020-12-20 21:16:57 +00:00
let searchShort = `!${communityRes.community_view.community.name}@lemmy-beta:8551`;
let alphaCommunity = (await resolveCommunity(alpha, searchShort)).community.unwrap();
assertCommunityFederation(alphaCommunity, communityRes.community_view);
// Follow the community from alpha
2020-12-20 21:16:57 +00:00
let follow = await followCommunity(
alpha,
true,
alphaCommunity.community.id
2020-12-20 21:16:57 +00:00
);
// Make sure the follow response went through
expect(follow.community_view.community.local).toBe(false);
let deleteCommunityRes = await deleteCommunity(
beta,
true,
2020-12-20 21:16:57 +00:00
communityRes.community_view.community.id
);
2020-12-20 21:16:57 +00:00
expect(deleteCommunityRes.community_view.community.deleted).toBe(true);
expect(deleteCommunityRes.community_view.community.title).toBe(communityRes.community_view.community.title);
// Make sure it got deleted on A
2020-12-20 21:16:57 +00:00
let communityOnAlphaDeleted = await getCommunity(
alpha,
alphaCommunity.community.id
2020-12-20 21:16:57 +00:00
);
expect(communityOnAlphaDeleted.community_view.community.deleted).toBe(true);
// Undelete
let undeleteCommunityRes = await deleteCommunity(
beta,
false,
2020-12-20 21:16:57 +00:00
communityRes.community_view.community.id
);
2020-12-20 21:16:57 +00:00
expect(undeleteCommunityRes.community_view.community.deleted).toBe(false);
// Make sure it got undeleted on A
2020-12-20 21:16:57 +00:00
let communityOnAlphaUnDeleted = await getCommunity(
alpha,
alphaCommunity.community.id
2020-12-20 21:16:57 +00:00
);
expect(communityOnAlphaUnDeleted.community_view.community.deleted).toBe(
false
);
});
test('Remove community', async () => {
let communityRes = await createCommunity(beta);
// Cache the community on Alpha
2020-12-20 21:16:57 +00:00
let searchShort = `!${communityRes.community_view.community.name}@lemmy-beta:8551`;
let alphaCommunity = (await resolveCommunity(alpha, searchShort)).community.unwrap();
assertCommunityFederation(alphaCommunity, communityRes.community_view);
// Follow the community from alpha
2020-12-20 21:16:57 +00:00
let follow = await followCommunity(
alpha,
true,
alphaCommunity.community.id
2020-12-20 21:16:57 +00:00
);
// Make sure the follow response went through
expect(follow.community_view.community.local).toBe(false);
let removeCommunityRes = await removeCommunity(
beta,
true,
2020-12-20 21:16:57 +00:00
communityRes.community_view.community.id
);
2020-12-20 21:16:57 +00:00
expect(removeCommunityRes.community_view.community.removed).toBe(true);
expect(removeCommunityRes.community_view.community.title).toBe(communityRes.community_view.community.title);
// Make sure it got Removed on A
2020-12-20 21:16:57 +00:00
let communityOnAlphaRemoved = await getCommunity(
alpha,
alphaCommunity.community.id
2020-12-20 21:16:57 +00:00
);
expect(communityOnAlphaRemoved.community_view.community.removed).toBe(true);
// unremove
let unremoveCommunityRes = await removeCommunity(
beta,
false,
2020-12-20 21:16:57 +00:00
communityRes.community_view.community.id
);
2020-12-20 21:16:57 +00:00
expect(unremoveCommunityRes.community_view.community.removed).toBe(false);
// Make sure it got undeleted on A
2020-12-20 21:16:57 +00:00
let communityOnAlphaUnRemoved = await getCommunity(
alpha,
alphaCommunity.community.id
2020-12-20 21:16:57 +00:00
);
expect(communityOnAlphaUnRemoved.community_view.community.removed).toBe(
false
);
});
test('Search for beta community', async () => {
let communityRes = await createCommunity(beta);
2020-12-20 21:16:57 +00:00
expect(communityRes.community_view.community.name).toBeDefined();
2020-12-20 21:16:57 +00:00
let searchShort = `!${communityRes.community_view.community.name}@lemmy-beta:8551`;
let alphaCommunity = (await resolveCommunity(alpha, searchShort)).community.unwrap();
assertCommunityFederation(alphaCommunity, communityRes.community_view);
});
test('Admin actions in remote community are not federated to origin', async () => {
// create a community on alpha
let communityRes = (await createCommunity(alpha)).community_view;
expect(communityRes.community.name).toBeDefined();
// gamma follows community and posts in it
let gammaCommunity = (await resolveCommunity(gamma, communityRes.community.actor_id)).community.unwrap();
let gammaFollow = (await followCommunity(gamma, true, gammaCommunity.community.id));
expect(gammaFollow.community_view.subscribed).toBe("Subscribed");
let gammaPost = (await createPost(gamma, gammaCommunity.community.id)).post_view;
expect(gammaPost.post.id).toBeDefined();
expect(gammaPost.creator_banned_from_community).toBe(false);
// admin of beta decides to ban gamma from community
let betaCommunity = (await resolveCommunity(beta, communityRes.community.actor_id)).community.unwrap();
let bannedUserInfo1 = (await getSite(gamma)).my_user.unwrap().local_user_view.person;
let bannedUserInfo2 = (await resolvePerson(beta, bannedUserInfo1.actor_id)).person.unwrap();
let banRes = (await banPersonFromCommunity(beta, bannedUserInfo2.person.id, betaCommunity.community.id, true, true));
console.log(banRes);
expect(banRes.banned).toBe(true);
// ban doesnt federate to community's origin instance alpha
let alphaPost = (await resolvePost(alpha, gammaPost.post)).post.unwrap();
expect(alphaPost.creator_banned_from_community).toBe(false);
// and neither to gamma
let gammaPost2 = (await getPost(gamma, gammaPost.post.id));
expect(gammaPost2.post_view.creator_banned_from_community).toBe(false);
});