func Test_HookProvider_TransformRequest(t *testing.T) { provider := HookProvider{} t.Log("Should be OK") { request := http.Request{ Header: http.Header{ "Content-Type": {"application/x-www-form-urlencoded"}, }, } form := url.Values{} form.Add("trigger_word", "bitrise:") form.Add("text", "bitrise: branch:master") request.PostForm = form hookTransformResult := provider.TransformRequest(&request) require.NoError(t, hookTransformResult.Error) require.False(t, hookTransformResult.ShouldSkip) require.Equal(t, []bitriseapi.TriggerAPIParamsModel{ { BuildParams: bitriseapi.BuildParamsModel{ Branch: "master", Environments: []bitriseapi.EnvironmentItem{}, }, }, }, hookTransformResult.TriggerAPIParams) } t.Log("Unsupported Event Type") { request := http.Request{ Header: http.Header{ "Content-Type": {"application/json"}, }, } hookTransformResult := provider.TransformRequest(&request) require.False(t, hookTransformResult.ShouldSkip) require.EqualError(t, hookTransformResult.Error, "Content-Type is not supported: application/json") } t.Log("Missing 'text' from request data") { request := http.Request{ Header: http.Header{ "Content-Type": {"application/x-www-form-urlencoded"}, }, } form := url.Values{} form.Add("trigger_word", "the trigger word") request.PostForm = form hookTransformResult := provider.TransformRequest(&request) require.False(t, hookTransformResult.ShouldSkip) require.EqualError(t, hookTransformResult.Error, "Failed to parse the request/message: 'trigger_word' parameter found, but 'text' parameter is missing or empty") } }
func Test_getInputTextFromFormRequest(t *testing.T) { t.Log("Proper Form content") { request := http.Request{} form := url.Values{} form.Add("trigger_word", "the trigger word") form.Add("text", "the trigger word the text") request.PostForm = form text, err := getInputTextFromFormRequest(&request) require.NoError(t, err) require.Equal(t, "the text", text) } t.Log("Missing trigger_word") { request := http.Request{} form := url.Values{} form.Add("text", "the text") request.PostForm = form text, err := getInputTextFromFormRequest(&request) require.EqualError(t, err, "Missing required parameter: either 'command' or 'trigger_word' should be specified") require.Equal(t, "", text) } t.Log("Missing text - trigger_word") { request := http.Request{} form := url.Values{} form.Add("trigger_word", "the trigger word") request.PostForm = form text, err := getInputTextFromFormRequest(&request) require.EqualError(t, err, "'trigger_word' parameter found, but 'text' parameter is missing or empty") require.Equal(t, "", text) } t.Log("Missing text - command") { request := http.Request{} form := url.Values{} form.Add("command", "the-command") request.PostForm = form text, err := getInputTextFromFormRequest(&request) require.EqualError(t, err, "'command' parameter found, but 'text' parameter is missing or empty") require.Equal(t, "", text) } }
func benchRequest(b *testing.B, router http.Handler, r *http.Request) { w := mockResponseWriter{} u := r.URL r.RequestURI = u.RequestURI() b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { router.ServeHTTP(&w, r) // clear caches r.Form = nil r.PostForm = nil r.MultipartForm = nil } }
func requestDataToUrlValues(r *http.Request, data map[string]interface{}) (err error) { var ( form = make(url.Values) postform = make(url.Values) queryValues url.Values ) makeRequestData("", data, postform) for k, v := range postform { form[k] = append(form[k], v...) } if queryValues, err = url.ParseQuery(r.URL.RawQuery); err == nil { for k, v := range queryValues { form[k] = append(form[k], v...) } } r.PostForm = postform r.Form = form return }