package application import ( "github.com/stretchr/testify/require" "net/url" "testing" ) func TestBuildQuery(t *testing.T) { urlParcer := func(u string) *url.URL { res, _ := url.Parse(u) return res } table := []struct { url *url.URL expWidth int expHeight int expURL *url.URL err bool msg string }{ { url: urlParcer("/fill/10/10/domain.me/some/pic.jpg"), expWidth: 10, expHeight: 10, expURL: urlParcer("http://domain.me/some/pic.jpg"), err: false, msg: "Normal request", }, { url: urlParcer("/fill/10/10/pic.jpg"), expWidth: 10, expHeight: 10, expURL: urlParcer("http://pic.jpg"), err: false, msg: "Short URL", }, { url: urlParcer("/fill/10"), expWidth: 0, expHeight: 0, expURL: nil, err: true, msg: "Only width", }, { url: urlParcer("/fill/10/10"), expWidth: 0, expHeight: 0, expURL: nil, err: true, msg: "Only dimensions", }, { url: urlParcer("/fill/qwew/qwew/domain.me/some/pic.jpg"), expWidth: 0, expHeight: 0, expURL: nil, err: true, msg: "Strings in dimensions", }, { url: urlParcer("/fill/domain.me/some/pic.jpg"), expWidth: 0, expHeight: 0, expURL: nil, err: true, msg: "No dimensions", }, } for _, dat := range table { t.Run(dat.msg, func(t *testing.T) { i := false query, err := buildQuery(dat.url) if err != nil { i = true } require.Equal(t, dat.err, i, dat.msg) require.Equal(t, dat.expWidth, query.Width, dat.msg) require.Equal(t, dat.expHeight, query.Height, dat.msg) require.Equal(t, dat.expURL, query.URL, dat.msg) }) } }