From 59647798b97615d43710dde8f6c52894f39b8c4a Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Sun, 13 Nov 2016 22:40:33 +0100
Subject: [PATCH] prepareStatus: nsfw tag parsing.

---
 src/modules/statuses.js                  |  9 +++++++++
 test/unit/specs/modules/statuses.spec.js | 21 +++++++++++++++++++--
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/src/modules/statuses.js b/src/modules/statuses.js
index 6fe2558c8..5e3a373a5 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 372ab3ca4..1de15e6ab 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 }]
-- 
GitLab