github.com/nektos/act@v0.2.63/pkg/model/github_context_test.go (about)

     1  package model
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"testing"
     7  
     8  	log "github.com/sirupsen/logrus"
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func TestSetRef(t *testing.T) {
    13  	log.SetLevel(log.DebugLevel)
    14  
    15  	oldFindGitRef := findGitRef
    16  	oldFindGitRevision := findGitRevision
    17  	defer func() { findGitRef = oldFindGitRef }()
    18  	defer func() { findGitRevision = oldFindGitRevision }()
    19  
    20  	findGitRef = func(ctx context.Context, file string) (string, error) {
    21  		return "refs/heads/master", nil
    22  	}
    23  
    24  	findGitRevision = func(ctx context.Context, file string) (string, string, error) {
    25  		return "", "1234fakesha", nil
    26  	}
    27  
    28  	tables := []struct {
    29  		eventName string
    30  		event     map[string]interface{}
    31  		ref       string
    32  		refName   string
    33  	}{
    34  		{
    35  			eventName: "pull_request_target",
    36  			event:     map[string]interface{}{},
    37  			ref:       "refs/heads/master",
    38  			refName:   "master",
    39  		},
    40  		{
    41  			eventName: "pull_request",
    42  			event: map[string]interface{}{
    43  				"number": 1234.,
    44  			},
    45  			ref:     "refs/pull/1234/merge",
    46  			refName: "1234/merge",
    47  		},
    48  		{
    49  			eventName: "deployment",
    50  			event: map[string]interface{}{
    51  				"deployment": map[string]interface{}{
    52  					"ref": "refs/heads/somebranch",
    53  				},
    54  			},
    55  			ref:     "refs/heads/somebranch",
    56  			refName: "somebranch",
    57  		},
    58  		{
    59  			eventName: "release",
    60  			event: map[string]interface{}{
    61  				"release": map[string]interface{}{
    62  					"tag_name": "v1.0.0",
    63  				},
    64  			},
    65  			ref:     "refs/tags/v1.0.0",
    66  			refName: "v1.0.0",
    67  		},
    68  		{
    69  			eventName: "push",
    70  			event: map[string]interface{}{
    71  				"ref": "refs/heads/somebranch",
    72  			},
    73  			ref:     "refs/heads/somebranch",
    74  			refName: "somebranch",
    75  		},
    76  		{
    77  			eventName: "unknown",
    78  			event: map[string]interface{}{
    79  				"repository": map[string]interface{}{
    80  					"default_branch": "main",
    81  				},
    82  			},
    83  			ref:     "refs/heads/main",
    84  			refName: "main",
    85  		},
    86  		{
    87  			eventName: "no-event",
    88  			event:     map[string]interface{}{},
    89  			ref:       "refs/heads/master",
    90  			refName:   "master",
    91  		},
    92  	}
    93  
    94  	for _, table := range tables {
    95  		t.Run(table.eventName, func(t *testing.T) {
    96  			ghc := &GithubContext{
    97  				EventName: table.eventName,
    98  				BaseRef:   "master",
    99  				Event:     table.event,
   100  			}
   101  
   102  			ghc.SetRef(context.Background(), "main", "/some/dir")
   103  			ghc.SetRefTypeAndName()
   104  
   105  			assert.Equal(t, table.ref, ghc.Ref)
   106  			assert.Equal(t, table.refName, ghc.RefName)
   107  		})
   108  	}
   109  
   110  	t.Run("no-default-branch", func(t *testing.T) {
   111  		findGitRef = func(ctx context.Context, file string) (string, error) {
   112  			return "", fmt.Errorf("no default branch")
   113  		}
   114  
   115  		ghc := &GithubContext{
   116  			EventName: "no-default-branch",
   117  			Event:     map[string]interface{}{},
   118  		}
   119  
   120  		ghc.SetRef(context.Background(), "", "/some/dir")
   121  
   122  		assert.Equal(t, "refs/heads/master", ghc.Ref)
   123  	})
   124  }
   125  
   126  func TestSetSha(t *testing.T) {
   127  	log.SetLevel(log.DebugLevel)
   128  
   129  	oldFindGitRef := findGitRef
   130  	oldFindGitRevision := findGitRevision
   131  	defer func() { findGitRef = oldFindGitRef }()
   132  	defer func() { findGitRevision = oldFindGitRevision }()
   133  
   134  	findGitRef = func(ctx context.Context, file string) (string, error) {
   135  		return "refs/heads/master", nil
   136  	}
   137  
   138  	findGitRevision = func(ctx context.Context, file string) (string, string, error) {
   139  		return "", "1234fakesha", nil
   140  	}
   141  
   142  	tables := []struct {
   143  		eventName string
   144  		event     map[string]interface{}
   145  		sha       string
   146  	}{
   147  		{
   148  			eventName: "pull_request_target",
   149  			event: map[string]interface{}{
   150  				"pull_request": map[string]interface{}{
   151  					"base": map[string]interface{}{
   152  						"sha": "pr-base-sha",
   153  					},
   154  				},
   155  			},
   156  			sha: "pr-base-sha",
   157  		},
   158  		{
   159  			eventName: "pull_request",
   160  			event: map[string]interface{}{
   161  				"number": 1234.,
   162  			},
   163  			sha: "1234fakesha",
   164  		},
   165  		{
   166  			eventName: "deployment",
   167  			event: map[string]interface{}{
   168  				"deployment": map[string]interface{}{
   169  					"sha": "deployment-sha",
   170  				},
   171  			},
   172  			sha: "deployment-sha",
   173  		},
   174  		{
   175  			eventName: "release",
   176  			event:     map[string]interface{}{},
   177  			sha:       "1234fakesha",
   178  		},
   179  		{
   180  			eventName: "push",
   181  			event: map[string]interface{}{
   182  				"after":   "push-sha",
   183  				"deleted": false,
   184  			},
   185  			sha: "push-sha",
   186  		},
   187  		{
   188  			eventName: "unknown",
   189  			event:     map[string]interface{}{},
   190  			sha:       "1234fakesha",
   191  		},
   192  		{
   193  			eventName: "no-event",
   194  			event:     map[string]interface{}{},
   195  			sha:       "1234fakesha",
   196  		},
   197  	}
   198  
   199  	for _, table := range tables {
   200  		t.Run(table.eventName, func(t *testing.T) {
   201  			ghc := &GithubContext{
   202  				EventName: table.eventName,
   203  				BaseRef:   "master",
   204  				Event:     table.event,
   205  			}
   206  
   207  			ghc.SetSha(context.Background(), "/some/dir")
   208  
   209  			assert.Equal(t, table.sha, ghc.Sha)
   210  		})
   211  	}
   212  }