summaryrefslogtreecommitdiffstats
path: root/pkg/model/github_context_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/model/github_context_test.go')
-rw-r--r--pkg/model/github_context_test.go212
1 files changed, 212 insertions, 0 deletions
diff --git a/pkg/model/github_context_test.go b/pkg/model/github_context_test.go
new file mode 100644
index 0000000..ed08e23
--- /dev/null
+++ b/pkg/model/github_context_test.go
@@ -0,0 +1,212 @@
+package model
+
+import (
+ "context"
+ "fmt"
+ "testing"
+
+ log "github.com/sirupsen/logrus"
+ "github.com/stretchr/testify/assert"
+)
+
+func TestSetRef(t *testing.T) {
+ log.SetLevel(log.DebugLevel)
+
+ oldFindGitRef := findGitRef
+ oldFindGitRevision := findGitRevision
+ defer func() { findGitRef = oldFindGitRef }()
+ defer func() { findGitRevision = oldFindGitRevision }()
+
+ findGitRef = func(ctx context.Context, file string) (string, error) {
+ return "refs/heads/master", nil
+ }
+
+ findGitRevision = func(ctx context.Context, file string) (string, string, error) {
+ return "", "1234fakesha", nil
+ }
+
+ tables := []struct {
+ eventName string
+ event map[string]interface{}
+ ref string
+ refName string
+ }{
+ {
+ eventName: "pull_request_target",
+ event: map[string]interface{}{},
+ ref: "refs/heads/master",
+ refName: "master",
+ },
+ {
+ eventName: "pull_request",
+ event: map[string]interface{}{
+ "number": 1234.,
+ },
+ ref: "refs/pull/1234/merge",
+ refName: "1234/merge",
+ },
+ {
+ eventName: "deployment",
+ event: map[string]interface{}{
+ "deployment": map[string]interface{}{
+ "ref": "refs/heads/somebranch",
+ },
+ },
+ ref: "refs/heads/somebranch",
+ refName: "somebranch",
+ },
+ {
+ eventName: "release",
+ event: map[string]interface{}{
+ "release": map[string]interface{}{
+ "tag_name": "v1.0.0",
+ },
+ },
+ ref: "refs/tags/v1.0.0",
+ refName: "v1.0.0",
+ },
+ {
+ eventName: "push",
+ event: map[string]interface{}{
+ "ref": "refs/heads/somebranch",
+ },
+ ref: "refs/heads/somebranch",
+ refName: "somebranch",
+ },
+ {
+ eventName: "unknown",
+ event: map[string]interface{}{
+ "repository": map[string]interface{}{
+ "default_branch": "main",
+ },
+ },
+ ref: "refs/heads/main",
+ refName: "main",
+ },
+ {
+ eventName: "no-event",
+ event: map[string]interface{}{},
+ ref: "refs/heads/master",
+ refName: "master",
+ },
+ }
+
+ for _, table := range tables {
+ t.Run(table.eventName, func(t *testing.T) {
+ ghc := &GithubContext{
+ EventName: table.eventName,
+ BaseRef: "master",
+ Event: table.event,
+ }
+
+ ghc.SetRef(context.Background(), "main", "/some/dir")
+ ghc.SetRefTypeAndName()
+
+ assert.Equal(t, table.ref, ghc.Ref)
+ assert.Equal(t, table.refName, ghc.RefName)
+ })
+ }
+
+ t.Run("no-default-branch", func(t *testing.T) {
+ findGitRef = func(ctx context.Context, file string) (string, error) {
+ return "", fmt.Errorf("no default branch")
+ }
+
+ ghc := &GithubContext{
+ EventName: "no-default-branch",
+ Event: map[string]interface{}{},
+ }
+
+ ghc.SetRef(context.Background(), "", "/some/dir")
+
+ assert.Equal(t, "refs/heads/master", ghc.Ref)
+ })
+}
+
+func TestSetSha(t *testing.T) {
+ log.SetLevel(log.DebugLevel)
+
+ oldFindGitRef := findGitRef
+ oldFindGitRevision := findGitRevision
+ defer func() { findGitRef = oldFindGitRef }()
+ defer func() { findGitRevision = oldFindGitRevision }()
+
+ findGitRef = func(ctx context.Context, file string) (string, error) {
+ return "refs/heads/master", nil
+ }
+
+ findGitRevision = func(ctx context.Context, file string) (string, string, error) {
+ return "", "1234fakesha", nil
+ }
+
+ tables := []struct {
+ eventName string
+ event map[string]interface{}
+ sha string
+ }{
+ {
+ eventName: "pull_request_target",
+ event: map[string]interface{}{
+ "pull_request": map[string]interface{}{
+ "base": map[string]interface{}{
+ "sha": "pr-base-sha",
+ },
+ },
+ },
+ sha: "pr-base-sha",
+ },
+ {
+ eventName: "pull_request",
+ event: map[string]interface{}{
+ "number": 1234.,
+ },
+ sha: "1234fakesha",
+ },
+ {
+ eventName: "deployment",
+ event: map[string]interface{}{
+ "deployment": map[string]interface{}{
+ "sha": "deployment-sha",
+ },
+ },
+ sha: "deployment-sha",
+ },
+ {
+ eventName: "release",
+ event: map[string]interface{}{},
+ sha: "1234fakesha",
+ },
+ {
+ eventName: "push",
+ event: map[string]interface{}{
+ "after": "push-sha",
+ "deleted": false,
+ },
+ sha: "push-sha",
+ },
+ {
+ eventName: "unknown",
+ event: map[string]interface{}{},
+ sha: "1234fakesha",
+ },
+ {
+ eventName: "no-event",
+ event: map[string]interface{}{},
+ sha: "1234fakesha",
+ },
+ }
+
+ for _, table := range tables {
+ t.Run(table.eventName, func(t *testing.T) {
+ ghc := &GithubContext{
+ EventName: table.eventName,
+ BaseRef: "master",
+ Event: table.event,
+ }
+
+ ghc.SetSha(context.Background(), "/some/dir")
+
+ assert.Equal(t, table.sha, ghc.Sha)
+ })
+ }
+}