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 }