/* GoToSocial Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package util_test import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" "github.com/superseriousbusiness/gotosocial/internal/util" ) type StatusTestSuite struct { suite.Suite } func (suite *StatusTestSuite) TestLinkNoMention() { statusText := `here's a link to a post by zork: https://localhost:8080/@the_mighty_zork/statuses/01FGVP55XMF2K6316MQRX6PFG1 that link shouldn't come out formatted as a mention!` menchies := util.DeriveMentionNamesFromText(statusText) suite.Empty(menchies) } func (suite *StatusTestSuite) TestDeriveMentionsOK() { statusText := `@dumpsterqueer@example.org testing testing is this thing on? @someone_else@testing.best-horse.com can you confirm? @hello@test.lgbt @thisisalocaluser! here is a duplicate mention: @hello@test.lgbt @hello@test.lgbt @account1@whatever.com @account2@whatever.com ` menchies := util.DeriveMentionNamesFromText(statusText) assert.Len(suite.T(), menchies, 6) assert.Equal(suite.T(), "@dumpsterqueer@example.org", menchies[0]) assert.Equal(suite.T(), "@someone_else@testing.best-horse.com", menchies[1]) assert.Equal(suite.T(), "@hello@test.lgbt", menchies[2]) assert.Equal(suite.T(), "@thisisalocaluser", menchies[3]) assert.Equal(suite.T(), "@account1@whatever.com", menchies[4]) assert.Equal(suite.T(), "@account2@whatever.com", menchies[5]) } func (suite *StatusTestSuite) TestDeriveMentionsEmpty() { statusText := `` menchies := util.DeriveMentionNamesFromText(statusText) assert.Len(suite.T(), menchies, 0) } func (suite *StatusTestSuite) TestDeriveHashtagsOK() { statusText := `weeeeeeee #testing123 #also testing # testing this one shouldn't work #thisshouldwork here's a link with a fragment: https://example.org/whatever#ahhh #ThisShouldAlsoWork #not_this_though #111111 thisalsoshouldn'twork#### ##` tags := util.DeriveHashtagsFromText(statusText) assert.Len(suite.T(), tags, 5) assert.Equal(suite.T(), "testing123", tags[0]) assert.Equal(suite.T(), "also", tags[1]) assert.Equal(suite.T(), "thisshouldwork", tags[2]) assert.Equal(suite.T(), "ThisShouldAlsoWork", tags[3]) assert.Equal(suite.T(), "111111", tags[4]) } func (suite *StatusTestSuite) TestDeriveEmojiOK() { statusText := `:test: :another: Here's some normal text with an :emoji: at the end :spaces shouldnt work: :emoji1::emoji2: :anotheremoji:emoji2: :anotheremoji::anotheremoji::anotheremoji::anotheremoji: :underscores_ok_too: ` tags := util.DeriveEmojisFromText(statusText) assert.Len(suite.T(), tags, 7) assert.Equal(suite.T(), "test", tags[0]) assert.Equal(suite.T(), "another", tags[1]) assert.Equal(suite.T(), "emoji", tags[2]) assert.Equal(suite.T(), "emoji1", tags[3]) assert.Equal(suite.T(), "emoji2", tags[4]) assert.Equal(suite.T(), "anotheremoji", tags[5]) assert.Equal(suite.T(), "underscores_ok_too", tags[6]) } func (suite *StatusTestSuite) TestDeriveMultiple() { statusText := `Another test @foss_satan@fossbros-anonymous.io #Hashtag Text` ms := util.DeriveMentionNamesFromText(statusText) hs := util.DeriveHashtagsFromText(statusText) es := util.DeriveEmojisFromText(statusText) assert.Len(suite.T(), ms, 1) assert.Equal(suite.T(), "@foss_satan@fossbros-anonymous.io", ms[0]) assert.Len(suite.T(), hs, 1) assert.Equal(suite.T(), "Hashtag", hs[0]) assert.Len(suite.T(), es, 0) } func TestStatusTestSuite(t *testing.T) { suite.Run(t, new(StatusTestSuite)) }