github.com/bitrise-io/go-steputils/v2@v2.0.0-alpha.30/cache/keytemplate/keytemplate_test.go (about)

     1  package keytemplate
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/bitrise-io/go-utils/v2/log"
     7  )
     8  
     9  var triggerEnvVars = map[string]string{
    10  	"BITRISE_TRIGGERED_WORKFLOW_ID": "primary",
    11  	"BITRISE_GIT_BRANCH":            "PLANG-2007-key-template–parsing",
    12  	"BITRISE_GIT_COMMIT":            "8d722f4cc4e70373bd0b42139fa428d43e0527f0",
    13  }
    14  
    15  func TestEvaluate(t *testing.T) {
    16  	type args struct {
    17  		input   string
    18  		envVars map[string]string
    19  	}
    20  	tests := []struct {
    21  		name    string
    22  		args    args
    23  		want    string
    24  		wantErr bool
    25  	}{
    26  		{
    27  			name: "Static key",
    28  			args: args{
    29  				input:   "my-cache-key",
    30  				envVars: triggerEnvVars,
    31  			},
    32  			want:    "my-cache-key",
    33  			wantErr: false,
    34  		},
    35  		{
    36  			name: "Key with variables",
    37  			args: args{
    38  				input:   "npm-cache-{{ .OS }}-{{ .Arch }}-{{ .Branch }}",
    39  				envVars: triggerEnvVars,
    40  			},
    41  			want:    "npm-cache-darwin-arm64-PLANG-2007-key-template–parsing",
    42  			wantErr: false,
    43  		},
    44  		{
    45  			name: "Key with missing variables",
    46  			args: args{
    47  				input: "npm-cache-{{ .Branch }}-{{ .CommitHash }}-v1",
    48  				envVars: map[string]string{
    49  					"BITRISE_TRIGGERED_WORKFLOW_ID": "primary",
    50  				},
    51  			},
    52  			want:    "npm-cache---v1",
    53  			wantErr: false,
    54  		},
    55  		{
    56  			name: "Key with env vars",
    57  			args: args{
    58  				input: `npm-cache-{{ getenv "BUILD_TYPE" }}`,
    59  				envVars: map[string]string{
    60  					"BUILD_TYPE":  "release",
    61  					"ANOTHER_ENV": "false",
    62  				},
    63  			},
    64  			want:    "npm-cache-release",
    65  			wantErr: false,
    66  		},
    67  		{
    68  			name: "Key with missing env var",
    69  			args: args{
    70  				input: `npm-cache-{{ getenv "BUILD_TYPE" }}`,
    71  				envVars: map[string]string{
    72  					"ANOTHER_ENV": "false",
    73  				},
    74  			},
    75  			want:    "npm-cache-",
    76  			wantErr: false,
    77  		},
    78  		{
    79  			name: "Key with file checksum",
    80  			args: args{
    81  				input:   `gradle-cache-{{ checksum "testdata/**/*.gradle*" }}`,
    82  				envVars: triggerEnvVars,
    83  			},
    84  			want:    "gradle-cache-563cf037f336453ee1888c3dcbe1c687ebeb6c593d4d0bd57ccc5fc49daa3951",
    85  			wantErr: false,
    86  		},
    87  		{
    88  			name: "Key with multiple file checksum params",
    89  			args: args{
    90  				input:   `gradle-cache-{{ checksum "testdata/**/*.gradle*" "testdata/package-lock.json" }}`,
    91  				envVars: triggerEnvVars,
    92  			},
    93  			want:    "gradle-cache-f7a92b852d03a958a99e8c04b831d1e709ee2e9b7a00d851317e66d617188a8b",
    94  			wantErr: false,
    95  		},
    96  		{
    97  			name: "No explicit commit hash",
    98  			args: args{
    99  				input: "cache-key-{{ .CommitHash }}",
   100  				envVars: map[string]string{
   101  					"BITRISE_GIT_COMMIT":    "",
   102  					"GIT_CLONE_COMMIT_HASH": "8d722f4cc4e70373bd0b42139fa428d43e0527f0",
   103  				},
   104  			},
   105  			want:    "cache-key-8d722f4cc4e70373bd0b42139fa428d43e0527f0",
   106  			wantErr: false,
   107  		},
   108  	}
   109  	for _, tt := range tests {
   110  		t.Run(tt.name, func(t *testing.T) {
   111  			model := Model{
   112  				envRepo: envRepository{envVars: tt.args.envVars},
   113  				logger:  log.NewLogger(),
   114  				os:      "darwin",
   115  				arch:    "arm64",
   116  			}
   117  			got, err := model.Evaluate(tt.args.input)
   118  			if (err != nil) != tt.wantErr {
   119  				t.Errorf("Evaluate() error = %v, wantErr %v", err, tt.wantErr)
   120  				return
   121  			}
   122  			if got != tt.want {
   123  				t.Errorf("Evaluate() got = %v, want %v", got, tt.want)
   124  			}
   125  		})
   126  	}
   127  }
   128  
   129  type envRepository struct {
   130  	envVars map[string]string
   131  }
   132  
   133  func (repo envRepository) Get(key string) string {
   134  	value, ok := repo.envVars[key]
   135  	if ok {
   136  		return value
   137  	}
   138  	return ""
   139  }
   140  
   141  func (repo envRepository) Set(key, value string) error {
   142  	repo.envVars[key] = value
   143  	return nil
   144  }
   145  
   146  func (repo envRepository) Unset(key string) error {
   147  	repo.envVars[key] = ""
   148  	return nil
   149  }
   150  
   151  func (repo envRepository) List() []string {
   152  	var values []string
   153  	for _, v := range repo.envVars {
   154  		values = append(values, v)
   155  	}
   156  	return values
   157  }