// Copyright 2022 Woodpecker Authors // Copyright 2018 Drone.IO Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package bitbucketserver import ( "testing" "github.com/franela/goblin" "github.com/mrjones/oauth" "github.com/woodpecker-ci/woodpecker/server/forge/bitbucketserver/internal" "github.com/woodpecker-ci/woodpecker/server/model" ) func Test_helper(t *testing.T) { g := goblin.Goblin(t) g.Describe("Bitbucket Server converter", func() { 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, &model.Perm{Pull: true}) 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.SCMKind).Equal(model.RepoGit) g.Assert(to.IsSCMPrivate).Equal(true) g.Assert(to.Clone).Equal("https://server.org/foo/bar.git") g.Assert(to.Link).Equal("https://server.org/foo/bar") g.Assert(to.Perm.Pull).IsTrue() }) 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("branch should be empty", func() { change := internal.PostHook{} change.RefChanges = append(change.RefChanges, internal.RefChange{ RefID: "refs/heads/", ToHash: "73f9c44d", }) value := internal.Value{} value.ToCommit.Author.Name = "John Doe, Appleboy, Mary, Janet E. Dawson and Ann S. Palmer" value.ToCommit.Author.EmailAddress = "huh@huh.com" value.ToCommit.Message = "message" change.Changesets.Values = append(change.Changesets.Values, value) change.Repository.Project = internal.Project{ Key: "octocat", } change.Repository.Slug = "hello-world" pipeline := convertPushHook(&change, "http://base.com") g.Assert(pipeline.Branch).Equal("") }) g.It("should convert push hook to pipeline", func() { change := internal.PostHook{} change.RefChanges = append(change.RefChanges, internal.RefChange{ RefID: "refs/heads/release/some-feature", ToHash: "73f9c44d", }) value := internal.Value{} value.ToCommit.Author.Name = "John Doe, Appleboy, Mary, Janet E. Dawson and Ann S. Palmer" 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" pipeline := convertPushHook(&change, "http://base.com") g.Assert(pipeline.Event).Equal(model.EventPush) // Ensuring the author label is not longer then 40 g.Assert(pipeline.Author).Equal("John Doe, Appleboy, Mary, Janet E. Da...") g.Assert(pipeline.Avatar).Equal(avatarLink("huh@huh.com")) g.Assert(pipeline.Commit).Equal("73f9c44d") g.Assert(pipeline.Branch).Equal("release/some-feature") g.Assert(pipeline.Link).Equal("http://base.com/projects/octocat/repos/hello-world/commits/73f9c44d") g.Assert(pipeline.Ref).Equal("refs/heads/release/some-feature") g.Assert(pipeline.Message).Equal("message") }) g.It("should convert tag hook to pipeline", 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" pipeline := convertPushHook(&change, "http://base.com") g.Assert(pipeline.Event).Equal(model.EventTag) g.Assert(pipeline.Author).Equal("John Doe") g.Assert(pipeline.Avatar).Equal(avatarLink("huh@huh.com")) g.Assert(pipeline.Commit).Equal("73f9c44d") g.Assert(pipeline.Branch).Equal("v1") g.Assert(pipeline.Link).Equal("http://base.com/projects/octocat/repos/hello-world/commits/73f9c44d") g.Assert(pipeline.Ref).Equal("refs/tags/v1") g.Assert(pipeline.Message).Equal("message") }) }) }