diff --git a/src/modules/statuses.js b/src/modules/statuses.js index 6fe2558c..5e3a373a 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -114,6 +114,15 @@ export const findMaxId = (...args) => { return (maxBy(flatten(args), 'id') || {}).id } +export const prepareStatus = (status) => { + if (status.nsfw === undefined) { + const nsfwRegex = /#nsfw/i + status.nsfw = !!status.text.match(nsfwRegex) + } + + return status +} + export const mutations = { addNewStatuses (state, { statuses, showImmediately = false, timeline }) { const timelineObject = state.timelines[timeline] diff --git a/test/unit/specs/modules/statuses.spec.js b/test/unit/specs/modules/statuses.spec.js index 372ab3ca..1de15e6a 100644 --- a/test/unit/specs/modules/statuses.spec.js +++ b/test/unit/specs/modules/statuses.spec.js @@ -1,5 +1,5 @@ import { cloneDeep } from 'lodash' -import { defaultState, mutations, findMaxId } from '../../../../src/modules/statuses.js' +import { defaultState, mutations, findMaxId, prepareStatus } from '../../../../src/modules/statuses.js' const makeMockStatus = ({id, text}) => { return { @@ -11,7 +11,24 @@ const makeMockStatus = ({id, text}) => { } } -describe('findMaxId', () => { +describe('Statuses.prepareStatus', () => { + it('sets nsfw for statuses with the #nsfw tag', () => { + const safe = makeMockStatus({id: 1, text: 'Hello oniichan'}) + const nsfw = makeMockStatus({id: 1, text: 'Hello oniichan #nsfw'}) + + expect(prepareStatus(safe).nsfw).to.eq(false) + expect(prepareStatus(nsfw).nsfw).to.eq(true) + }) + + it('leaves existing nsfw settings alone', () => { + const nsfw = makeMockStatus({id: 1, text: 'Hello oniichan #nsfw'}) + nsfw.nsfw = false + + expect(prepareStatus(nsfw).nsfw).to.eq(false) + }) +}) + +describe('Statuses.findMaxId', () => { it('returns the largest id in any of the given arrays', () => { const statusesOne = [{ id: 100 }, { id: 2 }] const statusesTwo = [{ id: 3 }]