// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import assert from 'assert'; import * as TextFormatting from 'utils/text_formatting.jsx'; describe('TextFormatting.Hashtags', function() { it('Not hashtags', function(done) { assert.equal( TextFormatting.formatText('# hashtag').trim(), '

hashtag

' ); assert.equal( TextFormatting.formatText('#ab').trim(), '

#ab

' ); assert.equal( TextFormatting.formatText('#123test').trim(), '

#123test

' ); done(); }); it('Hashtags', function(done) { assert.equal( TextFormatting.formatText('#test').trim(), "

#test

" ); assert.equal( TextFormatting.formatText('#test123').trim(), "

#test123

" ); assert.equal( TextFormatting.formatText('#test-test').trim(), "

#test-test

" ); assert.equal( TextFormatting.formatText('#test_test').trim(), "

#test_test

" ); assert.equal( TextFormatting.formatText('#test.test').trim(), "

#test.test

" ); assert.equal( TextFormatting.formatText('#test1/#test2').trim(), "

#test1/#test2

" ); assert.equal( TextFormatting.formatText('(#test)').trim(), "

(#test)

" ); assert.equal( TextFormatting.formatText('#test-').trim(), "

#test-

" ); assert.equal( TextFormatting.formatText('#test.').trim(), "

#test.

" ); assert.equal( TextFormatting.formatText('This is a sentence #test containing a hashtag').trim(), "

This is a sentence #test containing a hashtag

" ); done(); }); it('Formatted hashtags', function(done) { assert.equal( TextFormatting.formatText('*#test*').trim(), "

#test

" ); assert.equal( TextFormatting.formatText('_#test_').trim(), "

#test

" ); assert.equal( TextFormatting.formatText('**#test**').trim(), "

#test

" ); assert.equal( TextFormatting.formatText('__#test__').trim(), "

#test

" ); assert.equal( TextFormatting.formatText('~~#test~~').trim(), "

#test

" ); assert.equal( TextFormatting.formatText('`#test`').trim(), '

' + '' + '' + '#test' + '' + '' + '

' ); assert.equal( TextFormatting.formatText('[this is a link #test](example.com)').trim(), '

this is a link #test

' ); done(); }); it('Searching for hashtags', function(done) { assert.equal( TextFormatting.formatText('#test', {searchTerm: 'test'}).trim(), "

#test

" ); assert.equal( TextFormatting.formatText('#test', {searchTerm: '#test'}).trim(), "

#test

" ); assert.equal( TextFormatting.formatText('#foo/#bar', {searchTerm: '#foo'}).trim(), "

#foo/#bar

" ); assert.equal( TextFormatting.formatText('#foo/#bar', {searchTerm: 'bar'}).trim(), "

#foo/#bar

" ); assert.equal( TextFormatting.formatText('not#test', {searchTerm: '#test'}).trim(), '

not#test

' ); done(); }); it('Potential hashtags with other entities nested', function(done) { assert.equal( TextFormatting.formatText('#@test').trim(), '

#@test

' ); let options = { usernameMap: { test: {id: '1234', username: 'test'} } }; assert.equal( TextFormatting.formatText('#@test', options).trim(), "

#@test

" ); assert.equal( TextFormatting.formatText('#~test').trim(), '

#~test

' ); options = { channelNamesMap: { test: {id: '1234', name: 'test', display_name: 'Test Channel'} }, team: {id: 'abcd', name: 'abcd', display_name: 'Alphabet'} }; assert.equal( TextFormatting.formatText('#~test', options).trim(), '

#~test

' ); assert.equal( TextFormatting.formatText('#:taco:').trim(), '

#

' ); assert.equal( TextFormatting.formatText('#test@example.com').trim(), "

#test@example.com

" ); done(); }); });