Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
185 changes: 112 additions & 73 deletions pkg/util/github/pullrequest_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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())
})
})
})
6 changes: 2 additions & 4 deletions pkg/util/github/repo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)))
Expand Down Expand Up @@ -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()
Expand Down