[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
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
638c38cc0d
Коммит
4cf316fcd3
@@ -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
Обычный файл
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);
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user