1 jest.setTimeout(120000);
16 searchForBetaCommunity,
25 beforeAll(async () => {
27 await followBeta(alpha);
28 await followBeta(gamma);
29 await followBeta(delta);
30 await followBeta(epsilon);
34 afterAll(async () => {
35 await unfollowRemotes(alpha);
36 await unfollowRemotes(gamma);
37 await unfollowRemotes(delta);
38 await unfollowRemotes(epsilon);
41 test('Create a post', async () => {
42 let search = await searchForBetaCommunity(alpha);
44 let postRes = await createPost(alpha, search.communities[0].id);
45 expect(postRes.post).toBeDefined();
46 expect(postRes.post.community_local).toBe(false);
47 expect(postRes.post.creator_local).toBe(true);
48 expect(postRes.post.score).toBe(1);
51 // Make sure that post is liked on beta
52 let searchBeta = await searchPost(beta, postRes.post);
53 let betaPost = searchBeta.posts[0];
55 expect(betaPost).toBeDefined();
56 expect(betaPost.community_local).toBe(true);
57 expect(betaPost.creator_local).toBe(false);
58 expect(betaPost.score).toBe(1);
60 // Delta only follows beta, so it should not see an alpha ap_id
61 let searchDelta = await searchPost(delta, postRes.post);
62 expect(searchDelta.posts[0]).toBeUndefined();
64 // Epsilon has alpha blocked, it should not see the alpha post
65 let searchEpsilon = await searchPost(epsilon, postRes.post);
66 expect(searchEpsilon.posts[0]).toBeUndefined();
69 test('Create a post in a non-existent community', async () => {
70 let postRes = await createPost(alpha, -2);
71 expect(postRes).toStrictEqual({ error: 'couldnt_create_post' });
74 test('Unlike a post', async () => {
75 let search = await searchForBetaCommunity(alpha);
76 let postRes = await createPost(alpha, search.communities[0].id);
78 let unlike = await likePost(alpha, 0, postRes.post);
79 expect(unlike.post.score).toBe(0);
82 // Try to unlike it again, make sure it stays at 0
83 let unlike2 = await likePost(alpha, 0, postRes.post);
84 expect(unlike2.post.score).toBe(0);
87 // Make sure that post is unliked on beta
88 let searchBeta = await searchPost(beta, postRes.post);
89 let betaPost = searchBeta.posts[0];
91 expect(betaPost).toBeDefined();
92 expect(betaPost.community_local).toBe(true);
93 expect(betaPost.creator_local).toBe(false);
94 expect(betaPost.score).toBe(0);
97 test('Update a post', async () => {
98 let search = await searchForBetaCommunity(alpha);
99 let postRes = await createPost(alpha, search.communities[0].id);
102 let updatedName = 'A jest test federated post, updated';
103 let updatedPost = await updatePost(alpha, postRes.post);
104 expect(updatedPost.post.name).toBe(updatedName);
105 expect(updatedPost.post.community_local).toBe(false);
106 expect(updatedPost.post.creator_local).toBe(true);
109 // Make sure that post is updated on beta
110 let searchBeta = await searchPost(beta, postRes.post);
111 let betaPost = searchBeta.posts[0];
112 expect(betaPost.community_local).toBe(true);
113 expect(betaPost.creator_local).toBe(false);
114 expect(betaPost.name).toBe(updatedName);
117 // Make sure lemmy beta cannot update the post
118 let updatedPostBeta = await updatePost(beta, betaPost);
119 expect(updatedPostBeta).toStrictEqual({ error: 'no_post_edit_allowed' });
122 test('Sticky a post', async () => {
123 let search = await searchForBetaCommunity(alpha);
124 let postRes = await createPost(alpha, search.communities[0].id);
127 let stickiedPostRes = await stickyPost(alpha, true, postRes.post);
128 expect(stickiedPostRes.post.stickied).toBe(true);
131 // Make sure that post is stickied on beta
132 let searchBeta = await searchPost(beta, postRes.post);
133 let betaPost = searchBeta.posts[0];
134 expect(betaPost.community_local).toBe(true);
135 expect(betaPost.creator_local).toBe(false);
136 expect(betaPost.stickied).toBe(true);
139 let unstickiedPost = await stickyPost(alpha, false, postRes.post);
140 expect(unstickiedPost.post.stickied).toBe(false);
143 // Make sure that post is unstickied on beta
144 let searchBeta2 = await searchPost(beta, postRes.post);
145 let betaPost2 = searchBeta2.posts[0];
146 expect(betaPost2.community_local).toBe(true);
147 expect(betaPost2.creator_local).toBe(false);
148 expect(betaPost2.stickied).toBe(false);
150 // Make sure that gamma cannot sticky the post on beta
151 let searchGamma = await searchPost(gamma, postRes.post);
152 let gammaPost = searchGamma.posts[0];
153 let gammaTrySticky = await stickyPost(gamma, true, gammaPost);
155 let searchBeta3 = await searchPost(beta, postRes.post);
156 let betaPost3 = searchBeta3.posts[0];
157 expect(gammaTrySticky.post.stickied).toBe(true);
158 expect(betaPost3.stickied).toBe(false);
161 test('Lock a post', async () => {
162 let search = await searchForBetaCommunity(alpha);
164 let postRes = await createPost(alpha, search.communities[0].id);
167 let lockedPostRes = await lockPost(alpha, true, postRes.post);
168 expect(lockedPostRes.post.locked).toBe(true);
171 // Make sure that post is locked on beta
172 let searchBeta = await searchPost(beta, postRes.post);
173 let betaPost = searchBeta.posts[0];
174 expect(betaPost.community_local).toBe(true);
175 expect(betaPost.creator_local).toBe(false);
176 expect(betaPost.locked).toBe(true);
178 // Try to make a new comment there, on alpha
179 let comment = await createComment(alpha, postRes.post.id);
180 expect(comment['error']).toBe('locked');
183 // Try to create a new comment, on beta
184 let commentBeta = await createComment(beta, betaPost.id);
185 expect(commentBeta['error']).toBe('locked');
189 let unlockedPost = await lockPost(alpha, false, postRes.post);
190 expect(unlockedPost.post.locked).toBe(false);
193 // Make sure that post is unlocked on beta
194 let searchBeta2 = await searchPost(beta, postRes.post);
195 let betaPost2 = searchBeta2.posts[0];
196 expect(betaPost2.community_local).toBe(true);
197 expect(betaPost2.creator_local).toBe(false);
198 expect(betaPost2.locked).toBe(false);
201 test('Delete a post', async () => {
202 let search = await searchForBetaCommunity(alpha);
203 let postRes = await createPost(alpha, search.communities[0].id);
206 let deletedPost = await deletePost(alpha, true, postRes.post);
207 expect(deletedPost.post.deleted).toBe(true);
210 // Make sure lemmy beta sees post is deleted
211 let searchBeta = await searchPost(beta, postRes.post);
212 let betaPost = searchBeta.posts[0];
213 // This will be undefined because of the tombstone
214 expect(betaPost).toBeUndefined();
218 let undeletedPost = await deletePost(alpha, false, postRes.post);
219 expect(undeletedPost.post.deleted).toBe(false);
222 // Make sure lemmy beta sees post is undeleted
223 let searchBeta2 = await searchPost(beta, postRes.post);
224 let betaPost2 = searchBeta2.posts[0];
225 expect(betaPost2.deleted).toBe(false);
227 // Make sure lemmy beta cannot delete the post
228 let deletedPostBeta = await deletePost(beta, true, betaPost2);
229 expect(deletedPostBeta).toStrictEqual({ error: 'no_post_edit_allowed' });
232 test('Remove a post from admin and community on different instance', async () => {
233 let search = await searchForBetaCommunity(alpha);
234 let postRes = await createPost(alpha, search.communities[0].id);
237 let removedPost = await removePost(alpha, true, postRes.post);
238 expect(removedPost.post.removed).toBe(true);
241 // Make sure lemmy beta sees post is NOT removed
242 let searchBeta = await searchPost(beta, postRes.post);
243 let betaPost = searchBeta.posts[0];
244 expect(betaPost.removed).toBe(false);
248 let undeletedPost = await removePost(alpha, false, postRes.post);
249 expect(undeletedPost.post.removed).toBe(false);
252 // Make sure lemmy beta sees post is undeleted
253 let searchBeta2 = await searchPost(beta, postRes.post);
254 let betaPost2 = searchBeta2.posts[0];
255 expect(betaPost2.removed).toBe(false);
258 test('Remove a post from admin and community on same instance', async () => {
259 let search = await searchForBetaCommunity(alpha);
260 let postRes = await createPost(alpha, search.communities[0].id);
263 // Get the id for beta
264 let searchBeta = await searchPost(beta, postRes.post);
265 let betaPost = searchBeta.posts[0];
268 // The beta admin removes it (the community lives on beta)
269 let removePostRes = await removePost(beta, true, betaPost);
270 expect(removePostRes.post.removed).toBe(true);
273 // Make sure lemmy alpha sees post is removed
274 let alphaPost = await getPost(alpha, postRes.post.id);
275 expect(alphaPost.post.removed).toBe(true);
279 let undeletedPost = await removePost(beta, false, betaPost);
280 expect(undeletedPost.post.removed).toBe(false);
283 // Make sure lemmy alpha sees post is undeleted
284 let alphaPost2 = await getPost(alpha, postRes.post.id);
285 expect(alphaPost2.post.removed).toBe(false);
288 test('Search for a post', async () => {
289 let search = await searchForBetaCommunity(alpha);
291 let postRes = await createPost(alpha, search.communities[0].id);
293 let searchBeta = await searchPost(beta, postRes.post);
295 expect(searchBeta.posts[0].name).toBeDefined();
298 test('A and G subscribe to B (center) A posts, it gets announced to G', async () => {
299 let search = await searchForBetaCommunity(alpha);
300 let postRes = await createPost(alpha, search.communities[0].id);
303 let search2 = await searchPost(gamma, postRes.post);
304 expect(search2.posts[0].name).toBeDefined();