35 PrivateMessageResponse,
36 PrivateMessagesResponse,
37 GetPersonMentionsResponse,
47 BanFromCommunityResponse,
50 ResolveObjectResponse,
52 } from 'lemmy-js-client';
54 export interface API {
59 export let alpha: API = {
60 client: new LemmyHttp('http://localhost:8541'),
63 export let beta: API = {
64 client: new LemmyHttp('http://localhost:8551'),
67 export let gamma: API = {
68 client: new LemmyHttp('http://localhost:8561'),
71 export let delta: API = {
72 client: new LemmyHttp('http://localhost:8571'),
75 export let epsilon: API = {
76 client: new LemmyHttp('http://localhost:8581'),
79 export async function setupLogins() {
80 let formAlpha: Login = {
81 username_or_email: 'lemmy_alpha',
84 let resAlpha = alpha.client.login(formAlpha);
87 username_or_email: 'lemmy_beta',
90 let resBeta = beta.client.login(formBeta);
93 username_or_email: 'lemmy_gamma',
96 let resGamma = gamma.client.login(formGamma);
99 username_or_email: 'lemmy_delta',
102 let resDelta = delta.client.login(formDelta);
105 username_or_email: 'lemmy_epsilon',
108 let resEpsilon = epsilon.client.login(formEpsilon);
110 let res = await Promise.all([
118 alpha.auth = res[0].jwt;
119 beta.auth = res[1].jwt;
120 gamma.auth = res[2].jwt;
121 delta.auth = res[3].jwt;
122 epsilon.auth = res[4].jwt;
125 export async function createPost(
128 ): Promise<PostResponse> {
129 let name = randomString(5);
130 let body = randomString(10);
131 let url = 'https://google.com/';
132 let form: CreatePost = {
140 return api.client.createPost(form);
143 export async function editPost(api: API, post: Post): Promise<PostResponse> {
144 let name = 'A jest test federated post, updated';
145 let form: EditPost = {
151 return api.client.editPost(form);
154 export async function deletePost(
158 ): Promise<PostResponse> {
159 let form: DeletePost = {
164 return api.client.deletePost(form);
167 export async function removePost(
171 ): Promise<PostResponse> {
172 let form: RemovePost = {
177 return api.client.removePost(form);
180 export async function stickyPost(
184 ): Promise<PostResponse> {
185 let form: StickyPost = {
190 return api.client.stickyPost(form);
193 export async function lockPost(
197 ): Promise<PostResponse> {
198 let form: LockPost = {
203 return api.client.lockPost(form);
206 export async function resolvePost(
209 ): Promise<ResolveObjectResponse> {
210 let form: ResolveObject = {
213 return api.client.resolveObject(form);
216 export async function searchPostLocal(
219 ): Promise<SearchResponse> {
222 type_: SearchType.Posts,
223 sort: SortType.TopAll,
225 return api.client.search(form);
228 export async function getPost(
231 ): Promise<GetPostResponse> {
232 let form: GetPost = {
235 return api.client.getPost(form);
238 export async function resolveComment(
241 ): Promise<ResolveObjectResponse> {
242 let form: ResolveObject = {
245 return api.client.resolveObject(form);
248 export async function resolveBetaCommunity(
250 ): Promise<ResolveObjectResponse> {
251 // Use short-hand search url
252 let form: ResolveObject = {
253 q: '!main@lemmy-beta:8551',
255 return api.client.resolveObject(form);
258 export async function resolveCommunity(
261 ): Promise<ResolveObjectResponse> {
262 let form: ResolveObject = {
265 return api.client.resolveObject(form);
268 export async function resolvePerson(
271 ): Promise<ResolveObjectResponse> {
272 let form: ResolveObject = {
275 return api.client.resolveObject(form);
278 export async function banPersonFromSite(
282 ): Promise<BanPersonResponse> {
283 // Make sure lemmy-beta/c/main is cached on lemmy_alpha
284 let form: BanPerson = {
290 return api.client.banPerson(form);
293 export async function banPersonFromCommunity(
296 community_id: number,
298 ): Promise<BanFromCommunityResponse> {
299 // Make sure lemmy-beta/c/main is cached on lemmy_alpha
300 let form: BanFromCommunity = {
307 return api.client.banFromCommunity(form);
310 export async function followCommunity(
314 ): Promise<CommunityResponse> {
315 let form: FollowCommunity = {
320 return api.client.followCommunity(form);
323 export async function likePost(
327 ): Promise<PostResponse> {
328 let form: CreatePostLike = {
334 return api.client.likePost(form);
337 export async function createComment(
341 content = 'a jest test comment'
342 ): Promise<CommentResponse> {
343 let form: CreateComment = {
349 return api.client.createComment(form);
352 export async function editComment(
355 content = 'A jest test federated comment update'
356 ): Promise<CommentResponse> {
357 let form: EditComment = {
362 return api.client.editComment(form);
365 export async function deleteComment(
369 ): Promise<CommentResponse> {
370 let form: DeleteComment = {
375 return api.client.deleteComment(form);
378 export async function removeComment(
382 ): Promise<CommentResponse> {
383 let form: RemoveComment = {
388 return api.client.removeComment(form);
391 export async function getMentions(api: API): Promise<GetPersonMentionsResponse> {
392 let form: GetPersonMentions = {
397 return api.client.getPersonMentions(form);
400 export async function likeComment(
404 ): Promise<CommentResponse> {
405 let form: CreateCommentLike = {
406 comment_id: comment.id,
410 return api.client.likeComment(form);
413 export async function createCommunity(
415 name_: string = randomString(5)
416 ): Promise<CommunityResponse> {
417 let description = 'a sample description';
418 let icon = 'https://image.flaticon.com/icons/png/512/35/35896.png';
419 let banner = 'https://image.flaticon.com/icons/png/512/35/35896.png';
420 let form: CreateCommunity = {
429 return api.client.createCommunity(form);
432 export async function getCommunity(
435 ): Promise<CommunityResponse> {
436 let form: GetCommunity = {
439 return api.client.getCommunity(form);
442 export async function deleteCommunity(
446 ): Promise<CommunityResponse> {
447 let form: DeleteCommunity = {
452 return api.client.deleteCommunity(form);
455 export async function removeCommunity(
459 ): Promise<CommunityResponse> {
460 let form: RemoveCommunity = {
465 return api.client.removeCommunity(form);
468 export async function createPrivateMessage(
471 ): Promise<PrivateMessageResponse> {
472 let content = 'A jest test federated private message';
473 let form: CreatePrivateMessage = {
478 return api.client.createPrivateMessage(form);
481 export async function editPrivateMessage(
483 private_message_id: number
484 ): Promise<PrivateMessageResponse> {
485 let updatedContent = 'A jest test federated private message edited';
486 let form: EditPrivateMessage = {
487 content: updatedContent,
491 return api.client.editPrivateMessage(form);
494 export async function deletePrivateMessage(
497 private_message_id: number
498 ): Promise<PrivateMessageResponse> {
499 let form: DeletePrivateMessage = {
504 return api.client.deletePrivateMessage(form);
507 export async function registerUser(
509 username: string = randomString(5)
510 ): Promise<LoginResponse> {
511 let form: Register = {
514 password_verify: 'test',
517 return api.client.register(form);
520 export async function saveUserSettingsBio(
522 ): Promise<LoginResponse> {
523 let form: SaveUserSettings = {
526 default_sort_type: Object.keys(SortType).indexOf(SortType.Active),
527 default_listing_type: Object.keys(ListingType).indexOf(ListingType.All),
530 send_notifications_to_email: false,
531 bio: 'a changed bio',
534 return saveUserSettings(api, form);
537 export async function saveUserSettings(
539 form: SaveUserSettings
540 ): Promise<LoginResponse> {
541 return api.client.saveUserSettings(form);
544 export async function getSite(
546 ): Promise<GetSiteResponse> {
547 let form: GetSite = {
550 return api.client.getSite(form);
553 export async function listPrivateMessages(
555 ): Promise<PrivateMessagesResponse> {
556 let form: GetPrivateMessages = {
561 return api.client.getPrivateMessages(form);
564 export async function unfollowRemotes(
566 ): Promise<GetSiteResponse> {
567 // Unfollow all remote communities
568 let site = await getSite(api);
569 let remoteFollowed = site.my_user.follows.filter(
570 c => c.community.local == false
572 for (let cu of remoteFollowed) {
573 await followCommunity(api, false, cu.community.id);
575 let siteRes = await getSite(api);
579 export async function followBeta(api: API): Promise<CommunityResponse> {
580 let betaCommunity = (await resolveBetaCommunity(api)).community;
582 let follow = await followCommunity(api, true, betaCommunity.community.id);
587 export function delay(millis: number = 500) {
588 return new Promise(resolve => setTimeout(resolve, millis));
591 export function longDelay() {
595 export function wrapper(form: any): string {
596 return JSON.stringify(form);
599 function randomString(length: number): string {
601 var characters = 'abcdefghijklmnopqrstuvwxyz0123456789_';
602 var charactersLength = characters.length;
603 for (var i = 0; i < length; i++) {
604 result += characters.charAt(Math.floor(Math.random() * charactersLength));