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:
Harrison (Harry) Cramer
2024-09-14 16:53:00 -04:00
committed by GitHub
parent f1faf603b0
commit 22bfd0c83e
61 changed files with 1527 additions and 1284 deletions

View File

@@ -40,10 +40,18 @@ func TestPostComment(t *testing.T) {
var testCommentCreationData = PostCommentRequest{Comment: "Some comment"}
t.Run("Creates a new note (unlinked comment)", func(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/mr/comment", testCommentCreationData)
svc := commentService{testProjectData, fakeCommentClient{}}
svc := middleware(
commentService{testProjectData, fakeCommentClient{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
http.MethodPost: &PostCommentRequest{},
http.MethodDelete: &DeleteCommentRequest{},
http.MethodPatch: &EditCommentRequest{},
}),
withMethodCheck(http.MethodPost, http.MethodDelete, http.MethodPatch),
)
data := getSuccessData(t, svc, request)
assert(t, data.Message, "Comment created successfully")
assert(t, data.Status, http.StatusOK)
})
t.Run("Creates a new comment", func(t *testing.T) {
@@ -54,23 +62,49 @@ func TestPostComment(t *testing.T) {
},
}
request := makeRequest(t, http.MethodPost, "/mr/comment", testCommentCreationData)
svc := commentService{testProjectData, fakeCommentClient{}}
svc := middleware(
commentService{testProjectData, fakeCommentClient{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
http.MethodPost: &PostCommentRequest{},
http.MethodDelete: &DeleteCommentRequest{},
http.MethodPatch: &EditCommentRequest{},
}),
withMethodCheck(http.MethodPost, http.MethodDelete, http.MethodPatch),
)
data := getSuccessData(t, svc, request)
assert(t, data.Message, "Comment created successfully")
assert(t, data.Status, http.StatusOK)
})
t.Run("Handles errors from Gitlab client", func(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/mr/comment", testCommentCreationData)
svc := commentService{testProjectData, fakeCommentClient{testBase{errFromGitlab: true}}}
data := getFailData(t, svc, request)
svc := middleware(
commentService{testProjectData, fakeCommentClient{testBase{errFromGitlab: true}}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
http.MethodPost: &PostCommentRequest{},
http.MethodDelete: &DeleteCommentRequest{},
http.MethodPatch: &EditCommentRequest{},
}),
withMethodCheck(http.MethodPost, http.MethodDelete, http.MethodPatch),
)
data, _ := getFailData(t, svc, request)
checkErrorFromGitlab(t, data, "Could not create discussion")
})
t.Run("Handles non-200s from Gitlab client", func(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/mr/comment", testCommentCreationData)
svc := commentService{testProjectData, fakeCommentClient{testBase{status: http.StatusSeeOther}}}
data := getFailData(t, svc, request)
svc := middleware(
commentService{testProjectData, fakeCommentClient{testBase{status: http.StatusSeeOther}}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
http.MethodPost: &PostCommentRequest{},
http.MethodDelete: &DeleteCommentRequest{},
http.MethodPatch: &EditCommentRequest{},
}),
withMethodCheck(http.MethodPost, http.MethodDelete, http.MethodPatch),
)
data, _ := getFailData(t, svc, request)
checkNon200(t, data, "Could not create discussion", "/mr/comment")
})
}
@@ -79,23 +113,18 @@ func TestDeleteComment(t *testing.T) {
var testCommentDeletionData = DeleteCommentRequest{NoteId: 3, DiscussionId: "abc123"}
t.Run("Deletes a comment", func(t *testing.T) {
request := makeRequest(t, http.MethodDelete, "/mr/comment", testCommentDeletionData)
svc := commentService{testProjectData, fakeCommentClient{}}
svc := middleware(
commentService{testProjectData, fakeCommentClient{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
http.MethodPost: &PostCommentRequest{},
http.MethodDelete: &DeleteCommentRequest{},
http.MethodPatch: &EditCommentRequest{},
}),
withMethodCheck(http.MethodPost, http.MethodDelete, http.MethodPatch),
)
data := getSuccessData(t, svc, request)
assert(t, data.Message, "Comment deleted successfully")
assert(t, data.Status, http.StatusOK)
})
t.Run("Handles errors from Gitlab client", func(t *testing.T) {
request := makeRequest(t, http.MethodDelete, "/mr/comment", testCommentDeletionData)
svc := commentService{testProjectData, fakeCommentClient{testBase{errFromGitlab: true}}}
data := getFailData(t, svc, request)
checkErrorFromGitlab(t, data, "Could not delete comment")
})
t.Run("Handles non-200s from Gitlab client", func(t *testing.T) {
request := makeRequest(t, http.MethodDelete, "/mr/comment", testCommentDeletionData)
svc := commentService{testProjectData, fakeCommentClient{testBase{status: http.StatusSeeOther}}}
data := getFailData(t, svc, request)
checkNon200(t, data, "Could not delete comment", "/mr/comment")
})
}
@@ -103,22 +132,17 @@ func TestEditComment(t *testing.T) {
var testEditCommentData = EditCommentRequest{Comment: "Some comment", NoteId: 3, DiscussionId: "abc123"}
t.Run("Edits a comment", func(t *testing.T) {
request := makeRequest(t, http.MethodPatch, "/mr/comment", testEditCommentData)
svc := commentService{testProjectData, fakeCommentClient{}}
svc := middleware(
commentService{testProjectData, fakeCommentClient{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
http.MethodPost: &PostCommentRequest{},
http.MethodDelete: &DeleteCommentRequest{},
http.MethodPatch: &EditCommentRequest{},
}),
withMethodCheck(http.MethodPost, http.MethodDelete, http.MethodPatch),
)
data := getSuccessData(t, svc, request)
assert(t, data.Message, "Comment updated successfully")
assert(t, data.Status, http.StatusOK)
})
t.Run("Handles errors from Gitlab client", func(t *testing.T) {
request := makeRequest(t, http.MethodPatch, "/mr/comment", testEditCommentData)
svc := commentService{testProjectData, fakeCommentClient{testBase{errFromGitlab: true}}}
data := getFailData(t, svc, request)
checkErrorFromGitlab(t, data, "Could not update comment")
})
t.Run("Handles non-200s from Gitlab client", func(t *testing.T) {
request := makeRequest(t, http.MethodPatch, "/mr/comment", testEditCommentData)
svc := commentService{testProjectData, fakeCommentClient{testBase{status: http.StatusSeeOther}}}
data := getFailData(t, svc, request)
checkNon200(t, data, "Could not update comment", "/mr/comment")
})
}