From 940dc73f280742e553395d6a56eaca015a234b3a Mon Sep 17 00:00:00 2001 From: Dessalines Date: Fri, 15 May 2020 12:36:11 -0400 Subject: Federated mentions. Fixes #681 (#717) * Federated mentions. Fixes #681 * Changing some todos, adding comments. --- ui/src/api_tests/api.spec.ts | 45 +++++++++++++++++++++++++++++++++++++++++--- ui/src/utils.ts | 21 ++++++++++++--------- 2 files changed, 54 insertions(+), 12 deletions(-) (limited to 'ui/src') diff --git a/ui/src/api_tests/api.spec.ts b/ui/src/api_tests/api.spec.ts index dcfb5e62..d5da17c7 100644 --- a/ui/src/api_tests/api.spec.ts +++ b/ui/src/api_tests/api.spec.ts @@ -22,6 +22,7 @@ import { EditPrivateMessageForm, PrivateMessageResponse, PrivateMessagesResponse, + GetUserMentionsResponse, } from '../interfaces'; let lemmyAlphaUrl = 'http://localhost:8540'; @@ -379,6 +380,44 @@ describe('main', () => { expect(getPostResAlpha.comments[0].community_local).toBe(false); expect(getPostResAlpha.comments[0].creator_local).toBe(false); expect(getPostResAlpha.comments[0].score).toBe(1); + + // Lemmy alpha responds to their own comment, but mentions lemmy beta. + // Make sure lemmy beta gets that in their inbox. + let mentionContent = 'A test mention of @lemmy_beta@lemmy_beta:8550'; + let mentionCommentForm: CommentForm = { + content: mentionContent, + post_id: 2, + parent_id: createResponse.comment.id, + auth: lemmyAlphaAuth, + }; + + let createMentionRes: CommentResponse = await fetch( + `${lemmyAlphaApiUrl}/comment`, + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: wrapper(mentionCommentForm), + } + ).then(d => d.json()); + + expect(createMentionRes.comment.content).toBe(mentionContent); + expect(createMentionRes.comment.community_local).toBe(false); + expect(createMentionRes.comment.creator_local).toBe(true); + expect(createMentionRes.comment.score).toBe(1); + + // Make sure lemmy beta sees that new mention + let getMentionUrl = `${lemmyBetaApiUrl}/user/mention?sort=New&unread_only=false&auth=${lemmyBetaAuth}`; + let getMentionsRes: GetUserMentionsResponse = await fetch(getMentionUrl, { + method: 'GET', + }).then(d => d.json()); + + // The newest show up first + expect(getMentionsRes.mentions[0].content).toBe(mentionContent); + expect(getMentionsRes.mentions[0].community_local).toBe(true); + expect(getMentionsRes.mentions[0].creator_local).toBe(false); + expect(getMentionsRes.mentions[0].score).toBe(1); }); }); @@ -413,9 +452,9 @@ describe('main', () => { method: 'GET', }).then(d => d.json()); - expect(getPostRes.comments[1].content).toBe(content); - expect(getPostRes.comments[1].community_local).toBe(true); - expect(getPostRes.comments[1].creator_local).toBe(false); + expect(getPostRes.comments[2].content).toBe(content); + expect(getPostRes.comments[2].community_local).toBe(true); + expect(getPostRes.comments[2].creator_local).toBe(false); }); }); diff --git a/ui/src/utils.ts b/ui/src/utils.ts index 277da987..54322c8b 100644 --- a/ui/src/utils.ts +++ b/ui/src/utils.ts @@ -502,8 +502,8 @@ export function setupTribute(): Tribute { trigger: '@', selectTemplate: (item: any) => { let link = item.original.local - ? `[@${item.original.key}](/u/${item.original.key})` - : `[@${item.original.key}](/user/${item.original.id})`; + ? `[${item.original.key}](/u/${item.original.name})` + : `[${item.original.key}](/user/${item.original.id})`; return link; }, values: (text: string, cb: any) => { @@ -520,8 +520,8 @@ export function setupTribute(): Tribute { trigger: '!', selectTemplate: (item: any) => { let link = item.original.local - ? `[!${item.original.key}](/c/${item.original.key})` - : `[!${item.original.key}](/community/${item.original.id})`; + ? `[${item.original.key}](/c/${item.original.name})` + : `[${item.original.key}](/community/${item.original.id})`; return link; }, values: (text: string, cb: any) => { @@ -565,9 +565,9 @@ function userSearch(text: string, cb: any) { if (res.op == UserOperation.Search) { let data = res.data as SearchResponse; let users = data.users.map(u => { - let name_ = u.local ? u.name : `${u.name}@${hostname(u.actor_id)}`; return { - key: name_, + key: `@${u.name}@${hostname(u.actor_id)}`, + name: u.name, local: u.local, id: u.id, }; @@ -602,9 +602,9 @@ function communitySearch(text: string, cb: any) { if (res.op == UserOperation.Search) { let data = res.data as SearchResponse; let communities = data.communities.map(c => { - let name_ = c.local ? c.name : `${c.name}@${hostname(c.actor_id)}`; return { - key: name_, + key: `!${c.name}@${hostname(c.actor_id)}`, + name: c.name, local: c.local, id: c.id, }; @@ -859,5 +859,8 @@ export function previewLines(text: string, lines: number = 3): string { } export function hostname(url: string): string { - return new URL(url).hostname; + let cUrl = new URL(url); + return window.location.port + ? `${cUrl.hostname}:${cUrl.port}` + : `${cUrl.hostname}`; } -- cgit v1.2.3