]> Untitled Git - lemmy.git/blob - api_tests/src/post.spec.ts
routes.api: fix get_captcha endpoint (#1135)
[lemmy.git] / api_tests / src / post.spec.ts
1 jest.setTimeout(120000);
2 import {
3   alpha,
4   beta,
5   gamma,
6   delta,
7   epsilon,
8   setupLogins,
9   createPost,
10   updatePost,
11   stickyPost,
12   lockPost,
13   searchPost,
14   likePost,
15   followBeta,
16   searchForBetaCommunity,
17   createComment,
18   deletePost,
19   removePost,
20   getPost,
21   unfollowRemotes,
22   delay,
23 } from './shared';
24
25 beforeAll(async () => {
26   await setupLogins();
27   await followBeta(alpha);
28   await followBeta(gamma);
29   await followBeta(delta);
30   await followBeta(epsilon);
31   await delay(10000);
32 });
33
34 afterAll(async () => {
35   await unfollowRemotes(alpha);
36   await unfollowRemotes(gamma);
37   await unfollowRemotes(delta);
38   await unfollowRemotes(epsilon);
39 });
40
41 test('Create a post', async () => {
42   let search = await searchForBetaCommunity(alpha);
43   await delay();
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);
49   await delay();
50
51   // Make sure that post is liked on beta
52   let searchBeta = await searchPost(beta, postRes.post);
53   let betaPost = searchBeta.posts[0];
54
55   expect(betaPost).toBeDefined();
56   expect(betaPost.community_local).toBe(true);
57   expect(betaPost.creator_local).toBe(false);
58   expect(betaPost.score).toBe(1);
59   expect(betaPost.name).toBe(postRes.post.name);
60   expect(betaPost.body).toBe(postRes.post.body);
61   expect(betaPost.url).toBe(postRes.post.url);
62   expect(betaPost.nsfw).toBe(postRes.post.nsfw);
63
64   // Delta only follows beta, so it should not see an alpha ap_id
65   let searchDelta = await searchPost(delta, postRes.post);
66   expect(searchDelta.posts[0]).toBeUndefined();
67
68   // Epsilon has alpha blocked, it should not see the alpha post
69   let searchEpsilon = await searchPost(epsilon, postRes.post);
70   expect(searchEpsilon.posts[0]).toBeUndefined();
71 });
72
73 test('Create a post in a non-existent community', async () => {
74   let postRes = await createPost(alpha, -2);
75   expect(postRes).toStrictEqual({ error: 'couldnt_create_post' });
76 });
77
78 test('Unlike a post', async () => {
79   let search = await searchForBetaCommunity(alpha);
80   let postRes = await createPost(alpha, search.communities[0].id);
81   await delay();
82   let unlike = await likePost(alpha, 0, postRes.post);
83   expect(unlike.post.score).toBe(0);
84   await delay();
85
86   // Try to unlike it again, make sure it stays at 0
87   let unlike2 = await likePost(alpha, 0, postRes.post);
88   expect(unlike2.post.score).toBe(0);
89   await delay();
90
91   // Make sure that post is unliked on beta
92   let searchBeta = await searchPost(beta, postRes.post);
93   let betaPost = searchBeta.posts[0];
94
95   expect(betaPost).toBeDefined();
96   expect(betaPost.community_local).toBe(true);
97   expect(betaPost.creator_local).toBe(false);
98   expect(betaPost.score).toBe(0);
99 });
100
101 test('Update a post', async () => {
102   let search = await searchForBetaCommunity(alpha);
103   let postRes = await createPost(alpha, search.communities[0].id);
104   await delay();
105
106   let updatedName = 'A jest test federated post, updated';
107   let updatedPost = await updatePost(alpha, postRes.post);
108   expect(updatedPost.post.name).toBe(updatedName);
109   expect(updatedPost.post.community_local).toBe(false);
110   expect(updatedPost.post.creator_local).toBe(true);
111   await delay();
112
113   // Make sure that post is updated on beta
114   let searchBeta = await searchPost(beta, postRes.post);
115   let betaPost = searchBeta.posts[0];
116   expect(betaPost.community_local).toBe(true);
117   expect(betaPost.creator_local).toBe(false);
118   expect(betaPost.name).toBe(updatedName);
119   await delay();
120
121   // Make sure lemmy beta cannot update the post
122   let updatedPostBeta = await updatePost(beta, betaPost);
123   expect(updatedPostBeta).toStrictEqual({ error: 'no_post_edit_allowed' });
124 });
125
126 test('Sticky a post', async () => {
127   let search = await searchForBetaCommunity(alpha);
128   let postRes = await createPost(alpha, search.communities[0].id);
129   await delay();
130
131   let stickiedPostRes = await stickyPost(alpha, true, postRes.post);
132   expect(stickiedPostRes.post.stickied).toBe(true);
133   await delay();
134
135   // Make sure that post is stickied on beta
136   let searchBeta = await searchPost(beta, postRes.post);
137   let betaPost = searchBeta.posts[0];
138   expect(betaPost.community_local).toBe(true);
139   expect(betaPost.creator_local).toBe(false);
140   expect(betaPost.stickied).toBe(true);
141
142   // Unsticky a post
143   let unstickiedPost = await stickyPost(alpha, false, postRes.post);
144   expect(unstickiedPost.post.stickied).toBe(false);
145   await delay();
146
147   // Make sure that post is unstickied on beta
148   let searchBeta2 = await searchPost(beta, postRes.post);
149   let betaPost2 = searchBeta2.posts[0];
150   expect(betaPost2.community_local).toBe(true);
151   expect(betaPost2.creator_local).toBe(false);
152   expect(betaPost2.stickied).toBe(false);
153
154   // Make sure that gamma cannot sticky the post on beta
155   let searchGamma = await searchPost(gamma, postRes.post);
156   let gammaPost = searchGamma.posts[0];
157   let gammaTrySticky = await stickyPost(gamma, true, gammaPost);
158   await delay();
159   let searchBeta3 = await searchPost(beta, postRes.post);
160   let betaPost3 = searchBeta3.posts[0];
161   expect(gammaTrySticky.post.stickied).toBe(true);
162   expect(betaPost3.stickied).toBe(false);
163 });
164
165 test('Lock a post', async () => {
166   let search = await searchForBetaCommunity(alpha);
167   await delay();
168   let postRes = await createPost(alpha, search.communities[0].id);
169   await delay();
170
171   let lockedPostRes = await lockPost(alpha, true, postRes.post);
172   expect(lockedPostRes.post.locked).toBe(true);
173   await delay();
174
175   // Make sure that post is locked on beta
176   let searchBeta = await searchPost(beta, postRes.post);
177   let betaPost = searchBeta.posts[0];
178   expect(betaPost.community_local).toBe(true);
179   expect(betaPost.creator_local).toBe(false);
180   expect(betaPost.locked).toBe(true);
181
182   // Try to make a new comment there, on alpha
183   let comment = await createComment(alpha, postRes.post.id);
184   expect(comment['error']).toBe('locked');
185   await delay();
186
187   // Try to create a new comment, on beta
188   let commentBeta = await createComment(beta, betaPost.id);
189   expect(commentBeta['error']).toBe('locked');
190   await delay();
191
192   // Unlock a post
193   let unlockedPost = await lockPost(alpha, false, postRes.post);
194   expect(unlockedPost.post.locked).toBe(false);
195   await delay();
196
197   // Make sure that post is unlocked on beta
198   let searchBeta2 = await searchPost(beta, postRes.post);
199   let betaPost2 = searchBeta2.posts[0];
200   expect(betaPost2.community_local).toBe(true);
201   expect(betaPost2.creator_local).toBe(false);
202   expect(betaPost2.locked).toBe(false);
203 });
204
205 test('Delete a post', async () => {
206   let search = await searchForBetaCommunity(alpha);
207   let postRes = await createPost(alpha, search.communities[0].id);
208   await delay();
209
210   let deletedPost = await deletePost(alpha, true, postRes.post);
211   expect(deletedPost.post.deleted).toBe(true);
212   await delay();
213
214   // Make sure lemmy beta sees post is deleted
215   let searchBeta = await searchPost(beta, postRes.post);
216   let betaPost = searchBeta.posts[0];
217   // This will be undefined because of the tombstone
218   expect(betaPost).toBeUndefined();
219   await delay();
220
221   // Undelete
222   let undeletedPost = await deletePost(alpha, false, postRes.post);
223   expect(undeletedPost.post.deleted).toBe(false);
224   await delay();
225
226   // Make sure lemmy beta sees post is undeleted
227   let searchBeta2 = await searchPost(beta, postRes.post);
228   let betaPost2 = searchBeta2.posts[0];
229   expect(betaPost2.deleted).toBe(false);
230
231   // Make sure lemmy beta cannot delete the post
232   let deletedPostBeta = await deletePost(beta, true, betaPost2);
233   expect(deletedPostBeta).toStrictEqual({ error: 'no_post_edit_allowed' });
234 });
235
236 test('Remove a post from admin and community on different instance', async () => {
237   let search = await searchForBetaCommunity(alpha);
238   let postRes = await createPost(alpha, search.communities[0].id);
239   await delay();
240
241   let removedPost = await removePost(alpha, true, postRes.post);
242   expect(removedPost.post.removed).toBe(true);
243   await delay();
244
245   // Make sure lemmy beta sees post is NOT removed
246   let searchBeta = await searchPost(beta, postRes.post);
247   let betaPost = searchBeta.posts[0];
248   expect(betaPost.removed).toBe(false);
249   await delay();
250
251   // Undelete
252   let undeletedPost = await removePost(alpha, false, postRes.post);
253   expect(undeletedPost.post.removed).toBe(false);
254   await delay();
255
256   // Make sure lemmy beta sees post is undeleted
257   let searchBeta2 = await searchPost(beta, postRes.post);
258   let betaPost2 = searchBeta2.posts[0];
259   expect(betaPost2.removed).toBe(false);
260 });
261
262 test('Remove a post from admin and community on same instance', async () => {
263   let search = await searchForBetaCommunity(alpha);
264   let postRes = await createPost(alpha, search.communities[0].id);
265   await delay();
266
267   // Get the id for beta
268   let searchBeta = await searchPost(beta, postRes.post);
269   let betaPost = searchBeta.posts[0];
270   await delay();
271
272   // The beta admin removes it (the community lives on beta)
273   let removePostRes = await removePost(beta, true, betaPost);
274   expect(removePostRes.post.removed).toBe(true);
275   await delay();
276
277   // Make sure lemmy alpha sees post is removed
278   let alphaPost = await getPost(alpha, postRes.post.id);
279   expect(alphaPost.post.removed).toBe(true);
280   await delay();
281
282   // Undelete
283   let undeletedPost = await removePost(beta, false, betaPost);
284   expect(undeletedPost.post.removed).toBe(false);
285   await delay();
286
287   // Make sure lemmy alpha sees post is undeleted
288   let alphaPost2 = await getPost(alpha, postRes.post.id);
289   expect(alphaPost2.post.removed).toBe(false);
290 });
291
292 test('Search for a post', async () => {
293   let search = await searchForBetaCommunity(alpha);
294   await delay();
295   let postRes = await createPost(alpha, search.communities[0].id);
296   await delay();
297   let searchBeta = await searchPost(beta, postRes.post);
298
299   expect(searchBeta.posts[0].name).toBeDefined();
300 });
301
302 test('A and G subscribe to B (center) A posts, it gets announced to G', async () => {
303   let search = await searchForBetaCommunity(alpha);
304   let postRes = await createPost(alpha, search.communities[0].id);
305   await delay();
306
307   let search2 = await searchPost(gamma, postRes.post);
308   expect(search2.posts[0].name).toBeDefined();
309 });