[PLT-7342] Add function and tests to specifically determine @all & @channel (#7181)

* add function and tests to specifically determine @all & @channel

* uodate per comments - regex and tests
Этот коммит содержится в:
Saturnino Abril
2017-08-12 02:01:11 +08:00
коммит произвёл GitHub
родитель 638c38cc0d
Коммит 4cf316fcd3
3 изменённых файлов: 108 добавлений и 1 удалений

Просмотреть файл

@@ -14,6 +14,7 @@ import * as EmojiPicker from 'components/emoji_picker/emoji_picker.jsx';
import AppDispatcher from 'dispatcher/app_dispatcher.jsx';
import * as GlobalActions from 'actions/global_actions.jsx';
import * as Utils from 'utils/utils.jsx';
import * as PostUtils from 'utils/post_utils.jsx';
import * as UserAgent from 'utils/user_agent.jsx';
import * as ChannelActions from 'actions/channel_actions.jsx';
import * as PostActions from 'actions/post_actions.jsx';
@@ -224,7 +225,7 @@ export default class CreatePost extends React.Component {
const members = stats.member_count - 1;
const updateChannel = ChannelStore.getCurrent();
if ((this.state.message.includes('@all') || this.state.message.includes('@channel')) && members >= Constants.NOTIFY_ALL_MEMBERS) {
if ((PostUtils.containsAtMention(this.state.message, '@all') || PostUtils.containsAtMention(this.state.message, '@channel')) && members >= Constants.NOTIFY_ALL_MEMBERS) {
this.setState({totalMembers: members});
this.showNotifyAllModal();
return;

97
webapp/tests/utils/post_utils.test.jsx Обычный файл
Просмотреть файл

@@ -0,0 +1,97 @@
import * as PostUtils from 'utils/post_utils.jsx';
describe('PostUtils.containsAtMention', function() {
test('should return correct @all (same for @channel)', function() {
for (const data of [
{
text: undefined, //eslint-disable-line no-undefined
key: undefined, //eslint-disable-line no-undefined
result: false
},
{
text: '',
key: '',
result: false
},
{
text: 'all',
key: '@all',
result: false
},
{
text: '@allison',
key: '@all',
result: false
},
{
text: '@ALLISON',
key: '@all',
result: false
},
{
text: '@all123',
key: '@all',
result: false
},
{
text: '123@all',
key: '@all',
result: false
},
{
text: 'hey@all',
key: '@all',
result: false
},
{
text: 'hey@all.com',
key: '@all',
result: false
},
{
text: '@all',
key: '@all',
result: true
},
{
text: '@ALL',
key: '@all',
result: true
},
{
text: '@all hey',
key: '@all',
result: true
},
{
text: 'hey @all',
key: '@all',
result: true
},
{
text: 'HEY @ALL',
key: '@all',
result: true
},
{
text: 'hey @all!',
key: '@all',
result: true
},
{
text: 'hey @all:+1:',
key: '@all',
result: true
},
{
text: 'hey @ALL:+1:',
key: '@all',
result: true
}
]) {
const containsAtMention = PostUtils.containsAtMention(data.text, data.key);
expect(containsAtMention).toEqual(data.result);
}
});
});

Просмотреть файл

@@ -107,3 +107,12 @@ export function shouldShowDotMenu(post) {
return false;
}
export function containsAtMention(text, key) {
if (!text || !key) {
return false;
}
// This doesn't work for at mentions containing periods or hyphens
return new RegExp(`\\B${key}\\b`, 'i').test(text);
}