fix: date fixes; go middleware refactors; regex fixes; etc (#368)
fix: format of date when MR was closed or merged (#367) refactor: Add Payload Validators + Middleware In Go Code (#366) fix: Add better checks for leaving comments (#369) fix: regex support for http credentials embedded in remote url (#372) fix: Comment on single line selects two lines (#371) This is a #PATCH release.
This commit is contained in:
committed by
GitHub
parent
f1faf603b0
commit
22bfd0c83e
114
cmd/app/middleware_test.go
Normal file
114
cmd/app/middleware_test.go
Normal file
@@ -0,0 +1,114 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"github.com/harrisoncramer/gitlab.nvim/cmd/app/git"
|
||||
)
|
||||
|
||||
type FakePayload struct {
|
||||
Foo string `json:"foo" validate:"required"`
|
||||
}
|
||||
|
||||
type fakeHandler struct{}
|
||||
|
||||
func (f fakeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
data := SuccessResponse{Message: "Some message"}
|
||||
j, _ := json.Marshal(data)
|
||||
w.Write(j) // nolint
|
||||
|
||||
}
|
||||
|
||||
func TestMethodMiddleware(t *testing.T) {
|
||||
t.Run("Fails a bad method", func(t *testing.T) {
|
||||
request := makeRequest(t, http.MethodGet, "/foo", nil)
|
||||
mw := withMethodCheck(http.MethodPost)
|
||||
handler := middleware(fakeHandler{}, mw)
|
||||
data, status := getFailData(t, handler, request)
|
||||
assert(t, data.Message, "Invalid request type")
|
||||
assert(t, data.Details, "Expected: POST")
|
||||
assert(t, status, http.StatusMethodNotAllowed)
|
||||
})
|
||||
t.Run("Fails bad method with multiple", func(t *testing.T) {
|
||||
request := makeRequest(t, http.MethodGet, "/foo", nil)
|
||||
mw := withMethodCheck(http.MethodPost, http.MethodPatch)
|
||||
handler := middleware(fakeHandler{}, mw)
|
||||
data, status := getFailData(t, handler, request)
|
||||
assert(t, data.Message, "Invalid request type")
|
||||
assert(t, data.Details, "Expected: POST; PATCH")
|
||||
assert(t, status, http.StatusMethodNotAllowed)
|
||||
})
|
||||
t.Run("Allows ok method through", func(t *testing.T) {
|
||||
request := makeRequest(t, http.MethodGet, "/foo", nil)
|
||||
mw := withMethodCheck(http.MethodGet)
|
||||
handler := middleware(fakeHandler{}, mw)
|
||||
data := getSuccessData(t, handler, request)
|
||||
assert(t, data.Message, "Some message")
|
||||
})
|
||||
}
|
||||
|
||||
func TestWithMrMiddleware(t *testing.T) {
|
||||
t.Run("Loads an MR ID into the projectInfo", func(t *testing.T) {
|
||||
request := makeRequest(t, http.MethodGet, "/foo", nil)
|
||||
d := data{
|
||||
projectInfo: &ProjectInfo{},
|
||||
gitInfo: &git.GitData{BranchName: "foo"},
|
||||
}
|
||||
mw := withMr(d, fakeMergeRequestLister{})
|
||||
handler := middleware(fakeHandler{}, mw)
|
||||
getSuccessData(t, handler, request)
|
||||
if d.projectInfo.MergeId != 10 {
|
||||
t.FailNow()
|
||||
}
|
||||
})
|
||||
t.Run("Handles when there are no MRs", func(t *testing.T) {
|
||||
request := makeRequest(t, http.MethodGet, "/foo", nil)
|
||||
d := data{
|
||||
projectInfo: &ProjectInfo{},
|
||||
gitInfo: &git.GitData{BranchName: "foo"},
|
||||
}
|
||||
mw := withMr(d, fakeMergeRequestLister{emptyResponse: true})
|
||||
handler := middleware(fakeHandler{}, mw)
|
||||
data, status := getFailData(t, handler, request)
|
||||
assert(t, status, http.StatusNotFound)
|
||||
assert(t, data.Message, "No MRs Found")
|
||||
assert(t, data.Details, "Branch 'foo' does not have any merge requests")
|
||||
})
|
||||
t.Run("Handles when there are too many MRs", func(t *testing.T) {
|
||||
request := makeRequest(t, http.MethodGet, "/foo", nil)
|
||||
d := data{
|
||||
projectInfo: &ProjectInfo{},
|
||||
gitInfo: &git.GitData{BranchName: "foo"},
|
||||
}
|
||||
mw := withMr(d, fakeMergeRequestLister{multipleMrs: true})
|
||||
handler := middleware(fakeHandler{}, mw)
|
||||
data, status := getFailData(t, handler, request)
|
||||
assert(t, status, http.StatusBadRequest)
|
||||
assert(t, data.Message, "Multiple MRs found")
|
||||
assert(t, data.Details, "Please call gitlab.choose_merge_request()")
|
||||
})
|
||||
}
|
||||
|
||||
func TestValidatorMiddleware(t *testing.T) {
|
||||
t.Run("Should error with missing field", func(t *testing.T) {
|
||||
request := makeRequest(t, http.MethodPost, "/foo", FakePayload{}) // No Foo field
|
||||
data, status := getFailData(t, middleware(
|
||||
fakeHandler{},
|
||||
withPayloadValidation(methodToPayload{http.MethodPost: &FakePayload{}}),
|
||||
), request)
|
||||
assert(t, data.Message, "Invalid payload")
|
||||
assert(t, data.Details, "Foo is required")
|
||||
assert(t, status, http.StatusBadRequest)
|
||||
})
|
||||
t.Run("Should allow valid payload through", func(t *testing.T) {
|
||||
request := makeRequest(t, http.MethodPost, "/foo", FakePayload{Foo: "Some payload"})
|
||||
data := getSuccessData(t, middleware(
|
||||
fakeHandler{},
|
||||
withPayloadValidation(methodToPayload{http.MethodPost: &FakePayload{}}),
|
||||
), request)
|
||||
assert(t, data.Message, "Some message")
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user