]> Untitled Git - lemmy.git/commitdiff
Adding some more integration tests for locked posts and bans.
authorDessalines <tyhou13@gmx.com>
Tue, 10 Nov 2020 16:53:35 +0000 (10:53 -0600)
committerDessalines <tyhou13@gmx.com>
Tue, 10 Nov 2020 16:53:35 +0000 (10:53 -0600)
api_tests/src/post.spec.ts
api_tests/src/shared.ts

index b964e72eb4380ad4d949ced4206da6794c2e20a1..cf60987c663dddd6d2279ff58ada9f865e4c2b84 100644 (file)
@@ -21,6 +21,10 @@ import {
   unfollowRemotes,
   delay,
   longDelay,
+  searchForUser,
+  banUserFromSite,
+  searchPostLocal,
+  banUserFromCommunity,
 } from './shared';
 import {
   Post,
@@ -189,27 +193,22 @@ test('Lock a post', async () => {
   let postRes = await createPost(alpha, search.communities[0].id);
   await delay();
 
+  // Lock the post
   let lockedPostRes = await lockPost(alpha, true, postRes.post);
   expect(lockedPostRes.post.locked).toBe(true);
-  await delay();
+  await longDelay();
 
   // Make sure that post is locked on beta
-  let searchBeta = await searchPost(beta, postRes.post);
-  let betaPost = searchBeta.posts[0];
-  expect(betaPost.community_local).toBe(true);
-  expect(betaPost.creator_local).toBe(false);
-  expect(betaPost.locked).toBe(true);
+  let searchBeta = await searchPostLocal(beta, postRes.post);
+  let betaPost1 = searchBeta.posts[0];
+  expect(betaPost1.locked).toBe(true);
+  await delay();
 
   // Try to make a new comment there, on alpha
   let comment = await createComment(alpha, postRes.post.id);
   expect(comment['error']).toBe('locked');
   await delay();
 
-  // Try to create a new comment, on beta
-  let commentBeta = await createComment(beta, betaPost.id);
-  expect(commentBeta['error']).toBe('locked');
-  await delay();
-
   // Unlock a post
   let unlockedPost = await lockPost(alpha, false, postRes.post);
   expect(unlockedPost.post.locked).toBe(false);
@@ -221,6 +220,10 @@ test('Lock a post', async () => {
   expect(betaPost2.community_local).toBe(true);
   expect(betaPost2.creator_local).toBe(false);
   expect(betaPost2.locked).toBe(false);
+
+  // Try to create a new comment, on beta
+  let commentBeta = await createComment(beta, betaPost2.id);
+  expect(commentBeta).toBeDefined();
 });
 
 test('Delete a post', async () => {
@@ -333,3 +336,70 @@ test('A and G subscribe to B (center) A posts, it gets announced to G', async ()
   let search2 = await searchPost(gamma, postRes.post);
   expect(search2.posts[0].name).toBeDefined();
 });
+
+test('Enforce site ban for federated user', async () => {
+
+  let alphaShortname = `@lemmy_alpha@lemmy-alpha:8541`;
+  let userSearch = await searchForUser(beta, alphaShortname);
+  let alphaUser = userSearch.users[0];
+  expect(alphaUser).toBeDefined();
+  await delay();
+
+  // ban alpha from beta site
+  let banAlpha = await banUserFromSite(beta, alphaUser.id, true);
+  expect(banAlpha.banned).toBe(true);
+  await longDelay();
+
+  // Alpha makes post on beta
+  let search = await searchForBetaCommunity(alpha);
+  await delay();
+  let postRes = await createPost(alpha, search.communities[0].id);
+  expect(postRes.post).toBeDefined();
+  expect(postRes.post.community_local).toBe(false);
+  expect(postRes.post.creator_local).toBe(true);
+  expect(postRes.post.score).toBe(1);
+  await longDelay();
+
+  // Make sure that post doesn't make it to beta
+  let searchBeta = await searchPostLocal(beta, postRes.post);
+  let betaPost = searchBeta.posts[0];
+  expect(betaPost).toBeUndefined();
+  await delay();
+
+  // Unban alpha
+  let unBanAlpha = await banUserFromSite(beta, alphaUser.id, false);
+  expect(unBanAlpha.banned).toBe(false);
+});
+
+test('Enforce community ban for federated user', async () => {
+  let alphaShortname = `@lemmy_alpha@lemmy-alpha:8541`;
+  let userSearch = await searchForUser(beta, alphaShortname);
+  let alphaUser = userSearch.users[0];
+  expect(alphaUser).toBeDefined();
+  await delay();
+
+  // ban alpha from beta site
+  await banUserFromCommunity(beta, alphaUser.id, 2, false);
+  let banAlpha = await banUserFromCommunity(beta, alphaUser.id, 2, true);
+  expect(banAlpha.banned).toBe(true);
+  await longDelay();
+
+  // Alpha makes post on beta
+  let search = await searchForBetaCommunity(alpha);
+  await delay();
+  let postRes = await createPost(alpha, search.communities[0].id);
+  expect(postRes.post).toBeDefined();
+  expect(postRes.post.community_local).toBe(false);
+  expect(postRes.post.creator_local).toBe(true);
+  expect(postRes.post.score).toBe(1);
+  await longDelay();
+
+  // Make sure that post doesn't make it to beta community
+  let searchBeta = await searchPostLocal(beta, postRes.post);
+  let betaPost = searchBeta.posts[0];
+  expect(betaPost).toBeUndefined();
+
+  // Unban alpha
+  let unBanAlpha = await banUserFromCommunity(beta, alphaUser.id, 2, false);
+  expect(unBanAlpha.banned).toBe(false);
+});
index 3c9cc5d86d34e82534d03259c76b88301dbca319..ed4899f8e4b14efcf7072d2c026c13a23e3c0343 100644 (file)
@@ -43,6 +43,10 @@ import {
   GetSiteResponse,
   SearchType,
   LemmyHttp,
+  BanUserResponse,
+  BanUserForm,
+  BanFromCommunityForm,
+  BanFromCommunityResponse,
 } from 'lemmy-js-client';
 
 export interface API {
@@ -120,8 +124,8 @@ export async function createPost(
   api: API,
   community_id: number
 ): Promise<PostResponse> {
-  let name = 'A jest test post';
-  let body = 'Some body';
+  let name = randomString(5);
+  let body = randomString(10);
   let url = 'https://google.com/';
   let form: PostForm = {
     name,
@@ -209,6 +213,18 @@ export async function searchPost(
   return api.client.search(form);
 }
 
+export async function searchPostLocal(
+  api: API,
+  post: Post
+): Promise<SearchResponse> {
+  let form: SearchForm = {
+    q: post.name,
+    type_: SearchType.Posts,
+    sort: SortType.TopAll,
+  };
+  return api.client.search(form);
+}
+
 export async function getPost(
   api: API,
   post_id: number
@@ -271,6 +287,38 @@ export async function searchForUser(
   return api.client.search(form);
 }
 
+export async function banUserFromSite(
+  api: API,
+  user_id: number,
+  ban: boolean,
+): Promise<BanUserResponse> {
+  // Make sure lemmy-beta/c/main is cached on lemmy_alpha
+  // Use short-hand search url
+  let form: BanUserForm = {
+    user_id,
+    ban,
+    auth: api.auth,
+  };
+  return api.client.banUser(form);
+}
+
+export async function banUserFromCommunity(
+  api: API,
+  user_id: number,
+  community_id: number,
+  ban: boolean,
+): Promise<BanFromCommunityResponse> {
+  // Make sure lemmy-beta/c/main is cached on lemmy_alpha
+  // Use short-hand search url
+  let form: BanFromCommunityForm = {
+    user_id,
+    community_id,
+    ban,
+    auth: api.auth,
+  };
+  return api.client.banFromCommunity(form);
+}
+
 export async function followCommunity(
   api: API,
   follow: boolean,