From 331b239cc93ab3d4fcb6ae558aaa524f08fbc9d4 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 23 Feb 2022 22:31:35 -0500 Subject: [PATCH] Normalize mentions, add tests --- .../ui/util/pending_status_builder.js | 5 +--- .../normalizers/__tests__/status-test.js | 26 +++++++++++++++++++ app/soapbox/normalizers/status.js | 4 +-- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/app/soapbox/features/ui/util/pending_status_builder.js b/app/soapbox/features/ui/util/pending_status_builder.js index b51b1ceed..7812dbec6 100644 --- a/app/soapbox/features/ui/util/pending_status_builder.js +++ b/app/soapbox/features/ui/util/pending_status_builder.js @@ -8,10 +8,7 @@ const getAccount = makeGetAccount(); const buildMentions = pendingStatus => { if (pendingStatus.get('in_reply_to_id')) { - return ImmutableList(pendingStatus.get('to') || []).map(acct => ImmutableMap({ - acct, - username: acct.split('@')[0], - })); + return ImmutableList(pendingStatus.get('to') || []).map(acct => ImmutableMap({ acct })); } else { return ImmutableList(); } diff --git a/app/soapbox/normalizers/__tests__/status-test.js b/app/soapbox/normalizers/__tests__/status-test.js index ae9052ccc..8e32555a8 100644 --- a/app/soapbox/normalizers/__tests__/status-test.js +++ b/app/soapbox/normalizers/__tests__/status-test.js @@ -3,6 +3,18 @@ import { fromJS } from 'immutable'; import { normalizeStatus } from '../status'; describe('normalizeStatus', () => { + it('adds base fields', () => { + const status = fromJS({}); + const result = normalizeStatus(status); + + expect(result.get('emojis')).toEqual(fromJS([])); + expect(result.get('favourites_count')).toBe(0); + expect(result.get('mentions')).toEqual(fromJS([])); + expect(result.get('reblog')).toBe(null); + expect(result.get('uri')).toBe(''); + expect(result.get('visibility')).toBe('public'); + }); + it('fixes the order of mentions', () => { const status = fromJS(require('soapbox/__fixtures__/status-unordered-mentions.json')); @@ -31,6 +43,20 @@ describe('normalizeStatus', () => { expect(result).toEqual(expected); }); + it('normalizes mentions with only acct', () => { + const status = fromJS({ mentions: [{ acct: 'alex@gleasonator.com' }] }); + + const expected = fromJS([{ + acct: 'alex@gleasonator.com', + username: 'alex', + url: '', + }]); + + const result = normalizeStatus(status).get('mentions'); + + expect(result).toEqual(expected); + }); + it('normalizes Mitra attachments', () => { const status = fromJS(require('soapbox/__fixtures__/mitra-status-with-attachments.json')); diff --git a/app/soapbox/normalizers/status.js b/app/soapbox/normalizers/status.js index 8377a1a51..38819fb2d 100644 --- a/app/soapbox/normalizers/status.js +++ b/app/soapbox/normalizers/status.js @@ -32,7 +32,7 @@ const baseStatus = ImmutableMap({ const mergeDefined = (oldVal, newVal) => oldVal === undefined ? newVal : oldVal; // Merge base status -const setRequiredFields = status => { +const mergeBase = status => { return status.mergeDeepWith(mergeDefined, baseStatus); }; @@ -121,7 +121,7 @@ const fixQuote = status => { export const normalizeStatus = status => { return status.withMutations(status => { - setRequiredFields(status); + mergeBase(status); normalizeAttachments(status); normalizeMentions(status); fixMentionsOrder(status);