266 lines
7.1 KiB
Go
266 lines
7.1 KiB
Go
package resource_test
|
|
|
|
import (
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
|
|
"github.com/zachgersh/go-github/github"
|
|
|
|
"github.com/concourse/github-release-resource"
|
|
"github.com/concourse/github-release-resource/fakes"
|
|
)
|
|
|
|
var _ = Describe("Check Command", func() {
|
|
var (
|
|
githubClient *fakes.FakeGitHub
|
|
command *resource.CheckCommand
|
|
|
|
returnedReleases []github.RepositoryRelease
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
githubClient = &fakes.FakeGitHub{}
|
|
command = resource.NewCheckCommand(githubClient)
|
|
|
|
returnedReleases = []github.RepositoryRelease{}
|
|
})
|
|
|
|
JustBeforeEach(func() {
|
|
githubClient.ListReleasesReturns(returnedReleases, nil)
|
|
})
|
|
|
|
Context("when this is the first time that the resource has been run", func() {
|
|
Context("when there are no releases", func() {
|
|
BeforeEach(func() {
|
|
returnedReleases = []github.RepositoryRelease{}
|
|
})
|
|
|
|
It("returns no versions", func() {
|
|
versions, err := command.Run(resource.CheckRequest{})
|
|
Ω(err).ShouldNot(HaveOccurred())
|
|
Ω(versions).Should(BeEmpty())
|
|
})
|
|
})
|
|
|
|
Context("when there are releases that get filtered out", func() {
|
|
BeforeEach(func() {
|
|
returnedReleases = []github.RepositoryRelease{
|
|
newDraftRepositoryRelease(1, "v0.1.4"),
|
|
}
|
|
})
|
|
|
|
It("returns no versions", func() {
|
|
versions, err := command.Run(resource.CheckRequest{})
|
|
Ω(err).ShouldNot(HaveOccurred())
|
|
Ω(versions).Should(BeEmpty())
|
|
})
|
|
})
|
|
|
|
Context("when there are releases", func() {
|
|
BeforeEach(func() {
|
|
returnedReleases = []github.RepositoryRelease{
|
|
newRepositoryRelease(1, "v0.4.0"),
|
|
newRepositoryRelease(2, "0.1.3"),
|
|
newRepositoryRelease(3, "v0.1.2"),
|
|
}
|
|
})
|
|
|
|
It("outputs the most recent version only", func() {
|
|
command := resource.NewCheckCommand(githubClient)
|
|
|
|
response, err := command.Run(resource.CheckRequest{})
|
|
Ω(err).ShouldNot(HaveOccurred())
|
|
|
|
Ω(response).Should(HaveLen(1))
|
|
Ω(response[0]).Should(Equal(resource.Version{
|
|
Tag: "v0.4.0",
|
|
}))
|
|
})
|
|
})
|
|
})
|
|
|
|
Context("when there are prior versions", func() {
|
|
Context("when there are no releases", func() {
|
|
BeforeEach(func() {
|
|
returnedReleases = []github.RepositoryRelease{}
|
|
})
|
|
|
|
It("returns no versions", func() {
|
|
versions, err := command.Run(resource.CheckRequest{})
|
|
Ω(err).ShouldNot(HaveOccurred())
|
|
Ω(versions).Should(BeEmpty())
|
|
})
|
|
})
|
|
|
|
Context("when there are releases", func() {
|
|
Context("and the releases do not contain a draft release", func() {
|
|
BeforeEach(func() {
|
|
returnedReleases = []github.RepositoryRelease{
|
|
newRepositoryRelease(1, "v0.1.4"),
|
|
newRepositoryRelease(2, "0.4.0"),
|
|
newRepositoryRelease(3, "v0.1.3"),
|
|
newRepositoryRelease(4, "0.1.2"),
|
|
}
|
|
})
|
|
|
|
It("returns an empty list if the lastet version has been checked", func() {
|
|
command := resource.NewCheckCommand(githubClient)
|
|
|
|
response, err := command.Run(resource.CheckRequest{
|
|
Version: resource.Version{
|
|
Tag: "0.4.0",
|
|
},
|
|
})
|
|
Ω(err).ShouldNot(HaveOccurred())
|
|
|
|
Ω(response).Should(BeEmpty())
|
|
})
|
|
|
|
It("returns all of the versions that are newer", func() {
|
|
command := resource.NewCheckCommand(githubClient)
|
|
|
|
response, err := command.Run(resource.CheckRequest{
|
|
Version: resource.Version{
|
|
Tag: "v0.1.3",
|
|
},
|
|
})
|
|
Ω(err).ShouldNot(HaveOccurred())
|
|
|
|
Ω(response).Should(Equal([]resource.Version{
|
|
{Tag: "v0.1.4"},
|
|
{Tag: "0.4.0"},
|
|
}))
|
|
})
|
|
|
|
It("returns the latest version if the current version is not found", func() {
|
|
command := resource.NewCheckCommand(githubClient)
|
|
|
|
response, err := command.Run(resource.CheckRequest{
|
|
Version: resource.Version{
|
|
Tag: "v3.4.5",
|
|
},
|
|
})
|
|
Ω(err).ShouldNot(HaveOccurred())
|
|
|
|
Ω(response).Should(Equal([]resource.Version{
|
|
{Tag: "0.4.0"},
|
|
}))
|
|
})
|
|
})
|
|
|
|
Context("and one of the releases is a draft", func() {
|
|
BeforeEach(func() {
|
|
returnedReleases = []github.RepositoryRelease{
|
|
newDraftRepositoryRelease(1, "v0.1.4"),
|
|
newRepositoryRelease(2, "0.4.0"),
|
|
newRepositoryRelease(3, "v0.1.3"),
|
|
}
|
|
})
|
|
|
|
It("returns all of the versions that are newer, and not a draft", func() {
|
|
command := resource.NewCheckCommand(githubClient)
|
|
|
|
response, err := command.Run(resource.CheckRequest{
|
|
Version: resource.Version{
|
|
Tag: "v0.1.3",
|
|
},
|
|
})
|
|
Ω(err).ShouldNot(HaveOccurred())
|
|
|
|
Ω(response).Should(Equal([]resource.Version{
|
|
{Tag: "0.4.0"},
|
|
}))
|
|
})
|
|
})
|
|
|
|
Context("when draft releases are allowed", func() {
|
|
Context("and one of the releases is a final release", func() {
|
|
BeforeEach(func() {
|
|
returnedReleases = []github.RepositoryRelease{
|
|
newDraftRepositoryRelease(1, "v0.1.4"),
|
|
newDraftRepositoryRelease(2, "v0.1.3"),
|
|
newDraftRepositoryRelease(3, "v0.1.1"),
|
|
newRepositoryRelease(2, "0.4.0"),
|
|
}
|
|
})
|
|
|
|
It("returns all of the versions that are newer, and only draft", func() {
|
|
command := resource.NewCheckCommand(githubClient)
|
|
|
|
response, err := command.Run(resource.CheckRequest{
|
|
Version: resource.Version{ID: "3"},
|
|
Source: resource.Source{Drafts: true},
|
|
})
|
|
Ω(err).ShouldNot(HaveOccurred())
|
|
|
|
Ω(response).Should(Equal([]resource.Version{
|
|
{ID: "2"},
|
|
{ID: "1"},
|
|
}))
|
|
})
|
|
|
|
It("returns the latest draft version if the current version is not found", func() {
|
|
command := resource.NewCheckCommand(githubClient)
|
|
|
|
response, err := command.Run(resource.CheckRequest{
|
|
Version: resource.Version{ID: "5"},
|
|
Source: resource.Source{Drafts: true},
|
|
})
|
|
Ω(err).ShouldNot(HaveOccurred())
|
|
|
|
Ω(response).Should(Equal([]resource.Version{
|
|
{ID: "1"},
|
|
}))
|
|
})
|
|
})
|
|
|
|
Context("and non-of them are semver", func() {
|
|
BeforeEach(func() {
|
|
returnedReleases = []github.RepositoryRelease{
|
|
newDraftRepositoryRelease(1, "abc"),
|
|
newDraftRepositoryRelease(2, "123"),
|
|
}
|
|
})
|
|
|
|
It("returns all of the releases with semver resources", func() {
|
|
command := resource.NewCheckCommand(githubClient)
|
|
|
|
response, err := command.Run(resource.CheckRequest{
|
|
Version: resource.Version{},
|
|
Source: resource.Source{Drafts: true},
|
|
})
|
|
Ω(err).ShouldNot(HaveOccurred())
|
|
|
|
Ω(response).Should(Equal([]resource.Version{}))
|
|
})
|
|
})
|
|
|
|
Context("and one of the releases is not a versioned draft release", func() {
|
|
BeforeEach(func() {
|
|
returnedReleases = []github.RepositoryRelease{
|
|
newDraftRepositoryRelease(1, "v0.1.4"),
|
|
newDraftRepositoryRelease(2, ""),
|
|
newDraftWithNilTagRepositoryRelease(3),
|
|
newDraftRepositoryRelease(4, "asdf123"),
|
|
}
|
|
})
|
|
|
|
It("returns all of the releases with semver resources", func() {
|
|
command := resource.NewCheckCommand(githubClient)
|
|
|
|
response, err := command.Run(resource.CheckRequest{
|
|
Version: resource.Version{},
|
|
Source: resource.Source{Drafts: true},
|
|
})
|
|
Ω(err).ShouldNot(HaveOccurred())
|
|
|
|
Ω(response).Should(Equal([]resource.Version{
|
|
{ID: "1"},
|
|
}))
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|