From 0c0a7a897badbb4ee82ccc77523ab831aca08428 Mon Sep 17 00:00:00 2001 From: Joachim Hill-Grannec Date: Fri, 12 Aug 2016 15:54:36 -0700 Subject: [PATCH] Starting to add tests for bitbucket server Removed a duplicate assert for bitbucket --- remote/bitbucket/convert_test.go | 1 - remote/bitbucketserver/convert_test.go | 133 ++++++++++++++++++++++ remote/bitbucketserver/internal/types.go | 135 ++++++++++++----------- 3 files changed, 205 insertions(+), 64 deletions(-) create mode 100644 remote/bitbucketserver/convert_test.go diff --git a/remote/bitbucket/convert_test.go b/remote/bitbucket/convert_test.go index 9f10e2499..0baf30c4c 100644 --- a/remote/bitbucket/convert_test.go +++ b/remote/bitbucket/convert_test.go @@ -111,7 +111,6 @@ func Test_helper(t *testing.T) { g.Assert(result.Avatar).Equal(user.Links.Avatar.Href) g.Assert(result.Login).Equal(user.Login) g.Assert(result.Token).Equal(token.AccessToken) - g.Assert(result.Token).Equal(token.AccessToken) g.Assert(result.Secret).Equal(token.RefreshToken) g.Assert(result.Expiry).Equal(token.Expiry.UTC().Unix()) }) diff --git a/remote/bitbucketserver/convert_test.go b/remote/bitbucketserver/convert_test.go new file mode 100644 index 000000000..c5ff948cc --- /dev/null +++ b/remote/bitbucketserver/convert_test.go @@ -0,0 +1,133 @@ +package bitbucketserver + + +import ( + "testing" + "github.com/drone/drone/model" + "github.com/drone/drone/remote/bitbucketserver/internal" + "github.com/franela/goblin" + "github.com/mrjones/oauth" +) + +func Test_helper(t *testing.T) { + + g := goblin.Goblin(t) + g.Describe("Bitbucket Server converter", func() { + + + g.It("should convert repository lite", func() { + from := &internal.Repo{} + from.Project.Key = "octocat" + from.Slug = "hello-world" + + to := convertRepoLite(from) + g.Assert(to.FullName).Equal("octocat/hello-world") + g.Assert(to.Owner).Equal("octocat") + g.Assert(to.Name).Equal("hello-world") + }) + + + g.It("should convert repository", func() { + from := &internal.Repo{ + Slug: "hello-world", + } + from.Project.Key = "octocat" + + //var links [1]internal.LinkType + link := internal.CloneLink{ + Name: "http", + Href: "https://x7hw@server.org/foo/bar.git", + } + from.Links.Clone = append(from.Links.Clone, link) + + selfRef := internal.SelfRefLink{ + Href: "https://server.org/foo/bar", + } + + from.Links.Self = append(from.Links.Self, selfRef) + + to := convertRepo(from) + g.Assert(to.FullName).Equal("octocat/hello-world") + g.Assert(to.Owner).Equal("octocat") + g.Assert(to.Name).Equal("hello-world") + g.Assert(to.Branch).Equal("master") + g.Assert(to.Kind).Equal(model.RepoGit) + g.Assert(to.IsPrivate).Equal(true) + g.Assert(to.Clone).Equal("https://server.org/foo/bar.git") + g.Assert(to.Link).Equal("https://server.org/foo/bar") + }) + + g.It("should convert user", func() { + token := &oauth.AccessToken{ + Token: "foo", + } + user := &internal.User{ + Slug: "x12f", + EmailAddress: "huh@huh.com", + } + + result := convertUser(user, token) + g.Assert(result.Avatar).Equal(avatarLink("huh@huh.com")) + g.Assert(result.Login).Equal("x12f") + g.Assert(result.Token).Equal("foo") + }) + + + + g.It("should convert push hook to build", func() { + change := internal.PostHook{} + + change.RefChanges = append(change.RefChanges, internal.RefChange{ + RefID: "refs/heads/master", + ToHash: "73f9c44d", + }) + + value := internal.Value{} + value.ToCommit.Author.Name = "John Doe" + value.ToCommit.Author.EmailAddress = "huh@huh.com" + value.ToCommit.Message = "message" + + change.Changesets.Values = append(change.Changesets.Values, value) + + change.Repository.Project.Key = "octocat" + change.Repository.Slug = "hello-world" + + build := convertPushHook(&change, "http://base.com") + g.Assert(build.Event).Equal(model.EventPush) + g.Assert(build.Author).Equal("John Doe") + g.Assert(build.Avatar).Equal(avatarLink("huh@huh.com")) + g.Assert(build.Commit).Equal("73f9c44d") + g.Assert(build.Branch).Equal("master") + g.Assert(build.Link).Equal("http://base.com/projects/octocat/repos/hello-world/commits/73f9c44d") + g.Assert(build.Ref).Equal("refs/heads/master") + g.Assert(build.Message).Equal("message") + }) + + g.It("should convert tag hook to build", func() { + change := internal.PostHook{} + change.RefChanges = append(change.RefChanges, internal.RefChange{ + RefID: "refs/tags/v1", + ToHash: "73f9c44d", + }) + + value := internal.Value{} + value.ToCommit.Author.Name = "John Doe" + value.ToCommit.Author.EmailAddress = "huh@huh.com" + value.ToCommit.Message = "message" + + change.Changesets.Values = append(change.Changesets.Values, value) + change.Repository.Project.Key = "octocat" + change.Repository.Slug = "hello-world" + + build := convertPushHook(&change, "http://base.com") + g.Assert(build.Event).Equal(model.EventTag) + g.Assert(build.Author).Equal("John Doe") + g.Assert(build.Avatar).Equal(avatarLink("huh@huh.com")) + g.Assert(build.Commit).Equal("73f9c44d") + g.Assert(build.Branch).Equal("v1") + g.Assert(build.Link).Equal("http://base.com/projects/octocat/repos/hello-world/commits/73f9c44d") + g.Assert(build.Ref).Equal("refs/tags/v1") + g.Assert(build.Message).Equal("message") + }) + }) +} \ No newline at end of file diff --git a/remote/bitbucketserver/internal/types.go b/remote/bitbucketserver/internal/types.go index 8e4622ce2..095153d0d 100644 --- a/remote/bitbucketserver/internal/types.go +++ b/remote/bitbucketserver/internal/types.go @@ -15,14 +15,20 @@ type User struct { Type string `json:"type"` } +type CloneLink struct { + Href string `json:"href"` + Name string `json:"name"` +} + +type SelfRefLink struct { + Href string `json:"href"` +} + type Repo struct { Forkable bool `json:"forkable"` ID int `json:"id"` Links struct { - Clone []struct { - Href string `json:"href"` - Name string `json:"name"` - } `json:"clone"` + Clone []CloneLink`json:"clone"` Self []struct { Href string `json:"href"` } `json:"self"` @@ -33,9 +39,7 @@ type Repo struct { ID int `json:"id"` Key string `json:"key"` Links struct { - Self []struct { - Href string `json:"href"` - } `json:"self"` + Self []SelfRefLink `json:"self"` } `json:"links"` Name string `json:"name"` Public bool `json:"public"` @@ -70,6 +74,58 @@ type HookDetail struct { ConfigFormKey string `json:"configFormKey"` } +type Value struct { + Changes struct { + Filter interface{} `json:"filter"` + IsLastPage bool `json:"isLastPage"` + Limit int `json:"limit"` + Size int `json:"size"` + Start int `json:"start"` + Values []struct { + ContentID string `json:"contentId"` + Executable bool `json:"executable"` + Link struct { + Rel string `json:"rel"` + URL string `json:"url"` + } `json:"link"` + NodeType string `json:"nodeType"` + Path struct { + Components []string `json:"components"` + Extension string `json:"extension"` + Name string `json:"name"` + Parent string `json:"parent"` + ToString string `json:"toString"` + } `json:"path"` + PercentUnchanged int `json:"percentUnchanged"` + SrcExecutable bool `json:"srcExecutable"` + Type string `json:"type"` + } `json:"values"` + } `json:"changes"` + FromCommit struct { + DisplayID string `json:"displayId"` + ID string `json:"id"` + } `json:"fromCommit"` + Link struct { + Rel string `json:"rel"` + URL string `json:"url"` + } `json:"link"` + ToCommit struct { + Author struct { + EmailAddress string `json:"emailAddress"` + Name string `json:"name"` + } `json:"author"` + AuthorTimestamp int `json:"authorTimestamp"` + DisplayID string `json:"displayId"` + ID string `json:"id"` + Message string `json:"message"` + Parents []struct { + DisplayID string `json:"displayId"` + ID string `json:"id"` + } `json:"parents"` + } `json:"toCommit"` +} + + type PostHook struct { Changesets struct { Filter interface{} `json:"filter"` @@ -77,63 +133,9 @@ type PostHook struct { Limit int `json:"limit"` Size int `json:"size"` Start int `json:"start"` - Values []struct { - Changes struct { - Filter interface{} `json:"filter"` - IsLastPage bool `json:"isLastPage"` - Limit int `json:"limit"` - Size int `json:"size"` - Start int `json:"start"` - Values []struct { - ContentID string `json:"contentId"` - Executable bool `json:"executable"` - Link struct { - Rel string `json:"rel"` - URL string `json:"url"` - } `json:"link"` - NodeType string `json:"nodeType"` - Path struct { - Components []string `json:"components"` - Extension string `json:"extension"` - Name string `json:"name"` - Parent string `json:"parent"` - ToString string `json:"toString"` - } `json:"path"` - PercentUnchanged int `json:"percentUnchanged"` - SrcExecutable bool `json:"srcExecutable"` - Type string `json:"type"` - } `json:"values"` - } `json:"changes"` - FromCommit struct { - DisplayID string `json:"displayId"` - ID string `json:"id"` - } `json:"fromCommit"` - Link struct { - Rel string `json:"rel"` - URL string `json:"url"` - } `json:"link"` - ToCommit struct { - Author struct { - EmailAddress string `json:"emailAddress"` - Name string `json:"name"` - } `json:"author"` - AuthorTimestamp int `json:"authorTimestamp"` - DisplayID string `json:"displayId"` - ID string `json:"id"` - Message string `json:"message"` - Parents []struct { - DisplayID string `json:"displayId"` - ID string `json:"id"` - } `json:"parents"` - } `json:"toCommit"` - } `json:"values"` + Values []Value `json:"values"` } `json:"changesets"` - RefChanges []struct { - FromHash string `json:"fromHash"` - RefID string `json:"refId"` - ToHash string `json:"toHash"` - Type string `json:"type"` - } `json:"refChanges"` + RefChanges []RefChange `json:"refChanges"` Repository struct { Forkable bool `json:"forkable"` ID int `json:"id"` @@ -153,3 +155,10 @@ type PostHook struct { StatusMessage string `json:"statusMessage"` } `json:"repository"` } + +type RefChange struct { + FromHash string `json:"fromHash"` + RefID string `json:"refId"` + ToHash string `json:"toHash"` + Type string `json:"type"` +}