package shortner import ( "errors" "strings" "testing" "github.com/jimeh/ozu.io/shortner/mocks" "github.com/stretchr/testify/suite" ) // Mocks //go:generate mockery -name Store -dir .. -recursive // Suite Setup type ShortnerSuite struct { suite.Suite store *mocks.Store shortner *Shortner errNotFound error } func (s *ShortnerSuite) SetupTest() { s.store = new(mocks.Store) s.shortner = New(s.store) s.errNotFound = errors.New("not found") } // Tests func (s *ShortnerSuite) TestShortenExisting() { rawURL := []byte("http://google.com/") uid := []byte("ig") s.store.On("Get", append([]byte("url:"), rawURL...)).Return(uid, nil) resultUID, resultURL, err := s.shortner.Shorten(rawURL) s.NoError(err) s.Equal(uid, resultUID) s.Equal(rawURL, resultURL) s.store.AssertExpectations(s.T()) } func (s *ShortnerSuite) TestShortenNew() { rawURL := []byte("https://google.com") url := []byte("https://google.com/") uid := []byte("ig") s.store.On("Get", append([]byte("url:"), url...)).Return(nil, s.errNotFound) s.store.On("NextSequence").Return(1001, nil) s.store.On("Set", append([]byte("url:"), url...), uid).Return(nil) s.store.On("Set", append([]byte("uid:"), uid...), url).Return(nil) rUID, rURL, err := s.shortner.Shorten(rawURL) s.NoError(err) s.Equal(uid, rUID) s.Equal(url, rURL) s.store.AssertExpectations(s.T()) } func (s *ShortnerSuite) TestShortenInvalidURL() { examples := []struct { url string error string }{ { url: "*$)]+_