offline-twitter/pkg/persistence/compound_ssf_queries_parse_test.go

110 lines
2.9 KiB
Go

package persistence_test
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
. "gitlab.com/offline-twitter/twitter_offline_engine/pkg/persistence"
)
func TestTokenizeSearchString(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
c, err := NewCursorFromSearchQuery("think")
require.NoError(err)
assert.Len(c.Keywords, 1)
assert.Equal(c.Keywords[0], "think")
}
func TestTokenizeSearchStringMultipleWords(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
c, err := NewCursorFromSearchQuery("think tank")
require.NoError(err)
assert.Len(c.Keywords, 2)
assert.Equal(c.Keywords[0], "think")
assert.Equal(c.Keywords[1], "tank")
}
func TestTokenizeSearchStringQuotedTokens(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
c, err := NewCursorFromSearchQuery("\"think tank\"")
require.NoError(err)
assert.Len(c.Keywords, 1)
assert.Equal("think tank", c.Keywords[0])
}
func TestTokenizeSearchStringFromUser(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
c, err := NewCursorFromSearchQuery("from:cernovich retweeted_by:blehbleh to:somebody")
require.NoError(err)
assert.Len(c.Keywords, 0)
assert.Equal(c.FromUserHandle, UserHandle("cernovich"))
assert.Equal(c.RetweetedByUserHandle, UserHandle("blehbleh"))
assert.Equal(c.ToUserHandles, []UserHandle{"somebody"})
}
func TestComplexSearchString(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
c, err := NewCursorFromSearchQuery("stupid \"think tank\" from:kashi")
require.NoError(err)
assert.Len(c.Keywords, 2)
assert.Equal("stupid", c.Keywords[0])
assert.Equal("think tank", c.Keywords[1])
assert.Equal(c.FromUserHandle, UserHandle("kashi"))
}
func TestSearchStringBadQuotes(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
_, err := NewCursorFromSearchQuery("asdf \"fjk")
require.Error(err)
assert.ErrorIs(err, ErrUnmatchedQuotes)
assert.ErrorIs(err, ErrInvalidQuery)
}
func TestSearchWithDates(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
c, err := NewCursorFromSearchQuery("since:2020-01-01 until:2020-05-01")
require.NoError(err)
assert.Equal(c.SinceTimestamp.Time, time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC))
assert.Equal(c.UntilTimestamp.Time, time.Date(2020, 5, 1, 0, 0, 0, 0, time.UTC))
}
func TestSearchWithInvalidDates(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
_, err := NewCursorFromSearchQuery("since:fawejk")
require.Error(err)
assert.ErrorIs(err, ErrInvalidQuery)
}
func TestSearchContentFilters(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
c, err := NewCursorFromSearchQuery("filter:links filter:videos filter:images filter:polls filter:spaces")
require.NoError(err)
assert.Equal(c.FilterLinks, REQUIRE)
assert.Equal(c.FilterVideos, REQUIRE)
assert.Equal(c.FilterImages, REQUIRE)
assert.Equal(c.FilterPolls, REQUIRE)
assert.Equal(c.FilterSpaces, REQUIRE)
}