From 22d1a2ae9d714e4c0a2b4de5ae068f1017ab313d Mon Sep 17 00:00:00 2001 From: "xian-jie.shen" <327411586@qq.com> Date: Tue, 2 Aug 2022 09:50:13 +0800 Subject: [PATCH] feat: pkg-util-github-pullrequest enhancement Signed-off-by: xian-jie.shen <327411586@qq.com> --- pkg/util/github/pullrequest_test.go | 185 +++++++++++++++++----------- pkg/util/github/repo_test.go | 6 +- 2 files changed, 114 insertions(+), 77 deletions(-) diff --git a/pkg/util/github/pullrequest_test.go b/pkg/util/github/pullrequest_test.go index 1ffa76469..64acfe3fd 100644 --- a/pkg/util/github/pullrequest_test.go +++ b/pkg/util/github/pullrequest_test.go @@ -6,106 +6,145 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + "github.com/onsi/gomega/ghttp" "github.com/devstream-io/devstream/pkg/util/github" ) -var _ = Describe("Pullrequest", func() { - Context("does NewPullRequest 200", func() { +var _ = Describe("NewPullRequest", func() { + const ( + fromBranch, toBranch = "fb", "tb" + owner, repo = "owner", "repo" + rightOrg, wrongOrg = "org", "/" + ) + + var ( + s *ghttp.Server + org string + opts *github.Option + ) + + JustBeforeEach(func() { + opts = &github.Option{ + Owner: owner, + Repo: repo, + Org: org, + } + }) + + AfterEach(func() { + s.Close() + }) + When("Create", func() { BeforeEach(func() { - mux.HandleFunc("/repos/devstream-io/dtm-scaffolding-golang/pulls", func(w http.ResponseWriter, r *http.Request) { - fmt.Fprint(w, `{"number":1}`) - }) + s = ghttp.NewServer() + org = wrongOrg }) - - It("does create a new pr", func() { - ghClient, err := github.NewClientWithOption(github.OptNotNeedAuth, serverURL) + It("url is incorrect", func() { + s.SetAllowUnhandledRequests(true) + c, err := github.NewClientWithOption(opts, s.URL()) Expect(err).NotTo(HaveOccurred()) - Expect(ghClient).NotTo(Equal(nil)) - n, err := ghClient.NewPullRequest("from", "to") - Expect(n).To(Equal(1)) - Expect(err).To(Succeed()) + Expect(c).NotTo(Equal(nil)) + n, err := c.NewPullRequest(fromBranch, toBranch) + Expect(err).To(HaveOccurred()) + fmt.Println(err) + Expect(n).To(Equal(0)) }) - }) - - Context("does NewPullRequest 404", func() { - - It("does create a new pr with wrong url", func() { - ghClient, err := github.NewClientWithOption(&github.Option{ - Owner: "", - Org: "or", - Repo: "r", - }, serverURL) + When("Create", func() { + BeforeEach(func() { + s = ghttp.NewServer() + org = rightOrg + }) + It("url is correct", func() { + u := github.BaseURLPath + fmt.Sprintf("/repos/%v/%v/pulls", org, repo) + s.RouteToHandler("POST", u, func(w http.ResponseWriter, r *http.Request) { + fmt.Fprint(w, `{"number": 1}`) + }) + c, err := github.NewClientWithOption(opts, s.URL()) Expect(err).NotTo(HaveOccurred()) - Expect(ghClient).NotTo(Equal(nil)) - n, err := ghClient.NewPullRequest("from", "to") - Expect(n).To(Equal(0)) - Expect(err).NotTo(Equal(nil)) + Expect(c).NotTo(Equal(nil)) + n, err := c.NewPullRequest(fromBranch, toBranch) + Expect(err).NotTo(HaveOccurred()) + Expect(n).To(Equal(1)) }) }) +}) - Context("does MergePullRequest", func() { +var _ = Describe("MergePullRequest", func() { + const ( + fromBranch, toBranch = "fb", "tb" + owner, repo = "owner", "repo" + rightOrg, wrongOrg = "org", "/" + number = 1 + ) + + var ( + s *ghttp.Server + org string + opts *github.Option + ) + + JustBeforeEach(func() { + opts = &github.Option{ + Owner: owner, + Repo: repo, + Org: org, + } + }) + + AfterEach(func() { + s.Close() + }) + When("Merge", func() { BeforeEach(func() { - mux.HandleFunc("/repos/devstream-io/dtm-scaffolding-golang/pulls/1/merge", func(w http.ResponseWriter, r *http.Request) { - fmt.Fprint(w, ` - { - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "merged": true, - "message": "Pull Request successfully merged" - }`) - }) + s = ghttp.NewServer() + org = wrongOrg }) - - It("200", func() { - ghClient, err := github.NewClientWithOption(github.OptNotNeedAuth, serverURL) + It("url is incorrect", func() { + s.SetAllowUnhandledRequests(true) + c, err := github.NewClientWithOption(opts, s.URL()) Expect(err).NotTo(HaveOccurred()) - Expect(ghClient).NotTo(Equal(nil)) - err = ghClient.MergePullRequest(1, github.MergeMethodRebase) - Expect(err).To(Succeed()) + Expect(c).NotTo(Equal(nil)) + err = c.MergePullRequest(number, github.MergeMethodMerge) + Expect(err).To(HaveOccurred()) }) }) - - Context("does MergePullRequest", func() { - - It("404", func() { - ghClient, err := github.NewClientWithOption(&github.Option{ - Owner: "", - Org: "or", - Repo: "r", - }, serverURL) + When("Merge", func() { + BeforeEach(func() { + s = ghttp.NewServer() + org = rightOrg + }) + It("url is correct but merged is false", func() { + u := github.BaseURLPath + fmt.Sprintf("/repos/%v/%v/pulls/%d/merge", org, repo, number) + s.RouteToHandler("PUT", u, func(w http.ResponseWriter, r *http.Request) { + fmt.Fprint(w, `{}`) + }) + c, err := github.NewClientWithOption(opts, s.URL()) Expect(err).NotTo(HaveOccurred()) - Expect(ghClient).NotTo(Equal(nil)) - err = ghClient.MergePullRequest(1, github.MergeMethodRebase) + Expect(c).NotTo(Equal(nil)) + err = c.MergePullRequest(number, github.MergeMethodMerge) Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("merge failed")) }) }) - - Context("does MergePullRequest", func() { - + When("Merge", func() { BeforeEach(func() { - mux.HandleFunc("/repos/or/r/pulls/1/merge", func(w http.ResponseWriter, r *http.Request) { - fmt.Fprint(w, ` - { - "sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e", - "merged": false, - "message": "Pull Request successfully merged" - }`) - }) + s = ghttp.NewServer() + org = rightOrg }) - - It("return merged false", func() { - ghClient, err := github.NewClientWithOption(&github.Option{ - Owner: "", - Org: "or", - Repo: "r", - }, serverURL) + It("url is correct", func() { + u := github.BaseURLPath + fmt.Sprintf("/repos/%v/%v/pulls/%d/merge", org, repo, number) + s.RouteToHandler("PUT", u, func(w http.ResponseWriter, r *http.Request) { + fmt.Fprint(w, `{"merged": true}`) + }) + c, err := github.NewClientWithOption(opts, s.URL()) Expect(err).NotTo(HaveOccurred()) - Expect(ghClient).NotTo(Equal(nil)) - err = ghClient.MergePullRequest(1, github.MergeMethodRebase) - Expect(err).NotTo(Succeed()) + Expect(c).NotTo(Equal(nil)) + err = c.MergePullRequest(number, github.MergeMethodMerge) + Expect(err).To(Succeed()) }) }) }) diff --git a/pkg/util/github/repo_test.go b/pkg/util/github/repo_test.go index 056c02d11..7f26560b6 100644 --- a/pkg/util/github/repo_test.go +++ b/pkg/util/github/repo_test.go @@ -47,14 +47,14 @@ var _ = Describe("Repo", func() { }) Context("CreateRepo", func() { - It("create with err 500", func() { + It("create with status 500", func() { s.Reset() s.SetAllowUnhandledRequests(true) err := wrongClient.CreateRepo(org, defaultBranch) Expect(err).NotTo(Succeed()) Expect(err.Error()).To(ContainSubstring(strconv.Itoa(http.StatusInternalServerError))) }) - It("create with err 500", func() { + It("create with status 200", func() { s.Reset() s.SetAllowUnhandledRequests(true) s.SetUnhandledRequestStatusCode(http.StatusOK) @@ -67,7 +67,6 @@ var _ = Describe("Repo", func() { It("DeleteRepo with status 500", func() { s.Reset() s.SetAllowUnhandledRequests(true) - s.SetUnhandledRequestStatusCode(http.StatusInternalServerError) err := rightClient.DeleteRepo() Expect(err).NotTo(Succeed()) Expect(err.Error()).To(ContainSubstring(strconv.Itoa(http.StatusInternalServerError))) @@ -103,7 +102,6 @@ var _ = Describe("Repo", func() { u := fmt.Sprintf("/repos/%v/%v", org, repo) s.Reset() s.RouteToHandler("GET", gh.BaseURLPath+u, func(w http.ResponseWriter, r *http.Request) { - // w.WriteHeader(http.StatusNotFound) fmt.Fprint(w, ``) }) r, err := rightClient.GetRepoDescription()