forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
at master 7.9 kB view raw
1package models 2 3import ( 4 "testing" 5 6 "tangled.org/core/api/tangled" 7 "tangled.org/core/workflow" 8) 9 10func TestPipelineEnvVars_PushBranch(t *testing.T) { 11 tr := &tangled.Pipeline_TriggerMetadata{ 12 Kind: string(workflow.TriggerKindPush), 13 Push: &tangled.Pipeline_PushTriggerData{ 14 NewSha: "abc123def456", 15 OldSha: "000000000000", 16 Ref: "refs/heads/main", 17 }, 18 Repo: &tangled.Pipeline_TriggerRepo{ 19 Knot: "example.com", 20 Did: "did:plc:user123", 21 Repo: "my-repo", 22 DefaultBranch: "main", 23 }, 24 } 25 id := PipelineId{ 26 Knot: "example.com", 27 Rkey: "123123", 28 } 29 env := PipelineEnvVars(tr, id, false) 30 31 // Check standard CI variable 32 if env["CI"] != "true" { 33 t.Errorf("Expected CI='true', got '%s'", env["CI"]) 34 } 35 36 // Check ref variables 37 if env["TANGLED_REF"] != "refs/heads/main" { 38 t.Errorf("Expected TANGLED_REF='refs/heads/main', got '%s'", env["TANGLED_REF"]) 39 } 40 if env["TANGLED_REF_NAME"] != "main" { 41 t.Errorf("Expected TANGLED_REF_NAME='main', got '%s'", env["TANGLED_REF_NAME"]) 42 } 43 if env["TANGLED_REF_TYPE"] != "branch" { 44 t.Errorf("Expected TANGLED_REF_TYPE='branch', got '%s'", env["TANGLED_REF_TYPE"]) 45 } 46 47 // Check SHA variables 48 if env["TANGLED_SHA"] != "abc123def456" { 49 t.Errorf("Expected TANGLED_SHA='abc123def456', got '%s'", env["TANGLED_SHA"]) 50 } 51 if env["TANGLED_COMMIT_SHA"] != "abc123def456" { 52 t.Errorf("Expected TANGLED_COMMIT_SHA='abc123def456', got '%s'", env["TANGLED_COMMIT_SHA"]) 53 } 54 55 // Check repo variables 56 if env["TANGLED_REPO_KNOT"] != "example.com" { 57 t.Errorf("Expected TANGLED_REPO_KNOT='example.com', got '%s'", env["TANGLED_REPO_KNOT"]) 58 } 59 if env["TANGLED_REPO_DID"] != "did:plc:user123" { 60 t.Errorf("Expected TANGLED_REPO_DID='did:plc:user123', got '%s'", env["TANGLED_REPO_DID"]) 61 } 62 if env["TANGLED_REPO_NAME"] != "my-repo" { 63 t.Errorf("Expected TANGLED_REPO_NAME='my-repo', got '%s'", env["TANGLED_REPO_NAME"]) 64 } 65 if env["TANGLED_REPO_DEFAULT_BRANCH"] != "main" { 66 t.Errorf("Expected TANGLED_REPO_DEFAULT_BRANCH='main', got '%s'", env["TANGLED_REPO_DEFAULT_BRANCH"]) 67 } 68 if env["TANGLED_REPO_URL"] != "https://example.com/did:plc:user123/my-repo" { 69 t.Errorf("Expected TANGLED_REPO_URL='https://example.com/did:plc:user123/my-repo', got '%s'", env["TANGLED_REPO_URL"]) 70 } 71} 72 73func TestPipelineEnvVars_PushTag(t *testing.T) { 74 tr := &tangled.Pipeline_TriggerMetadata{ 75 Kind: string(workflow.TriggerKindPush), 76 Push: &tangled.Pipeline_PushTriggerData{ 77 NewSha: "abc123def456", 78 OldSha: "000000000000", 79 Ref: "refs/tags/v1.2.3", 80 }, 81 Repo: &tangled.Pipeline_TriggerRepo{ 82 Knot: "example.com", 83 Did: "did:plc:user123", 84 Repo: "my-repo", 85 }, 86 } 87 id := PipelineId{ 88 Knot: "example.com", 89 Rkey: "123123", 90 } 91 env := PipelineEnvVars(tr, id, false) 92 93 if env["TANGLED_REF"] != "refs/tags/v1.2.3" { 94 t.Errorf("Expected TANGLED_REF='refs/tags/v1.2.3', got '%s'", env["TANGLED_REF"]) 95 } 96 if env["TANGLED_REF_NAME"] != "v1.2.3" { 97 t.Errorf("Expected TANGLED_REF_NAME='v1.2.3', got '%s'", env["TANGLED_REF_NAME"]) 98 } 99 if env["TANGLED_REF_TYPE"] != "tag" { 100 t.Errorf("Expected TANGLED_REF_TYPE='tag', got '%s'", env["TANGLED_REF_TYPE"]) 101 } 102} 103 104func TestPipelineEnvVars_PullRequest(t *testing.T) { 105 tr := &tangled.Pipeline_TriggerMetadata{ 106 Kind: string(workflow.TriggerKindPullRequest), 107 PullRequest: &tangled.Pipeline_PullRequestTriggerData{ 108 SourceBranch: "feature-branch", 109 TargetBranch: "main", 110 SourceSha: "pr-sha-789", 111 Action: "opened", 112 }, 113 Repo: &tangled.Pipeline_TriggerRepo{ 114 Knot: "example.com", 115 Did: "did:plc:user123", 116 Repo: "my-repo", 117 }, 118 } 119 id := PipelineId{ 120 Knot: "example.com", 121 Rkey: "123123", 122 } 123 env := PipelineEnvVars(tr, id, false) 124 125 // Check ref variables for PR 126 if env["TANGLED_REF"] != "refs/heads/feature-branch" { 127 t.Errorf("Expected TANGLED_REF='refs/heads/feature-branch', got '%s'", env["TANGLED_REF"]) 128 } 129 if env["TANGLED_REF_NAME"] != "feature-branch" { 130 t.Errorf("Expected TANGLED_REF_NAME='feature-branch', got '%s'", env["TANGLED_REF_NAME"]) 131 } 132 if env["TANGLED_REF_TYPE"] != "branch" { 133 t.Errorf("Expected TANGLED_REF_TYPE='branch', got '%s'", env["TANGLED_REF_TYPE"]) 134 } 135 136 // Check SHA variables 137 if env["TANGLED_SHA"] != "pr-sha-789" { 138 t.Errorf("Expected TANGLED_SHA='pr-sha-789', got '%s'", env["TANGLED_SHA"]) 139 } 140 if env["TANGLED_COMMIT_SHA"] != "pr-sha-789" { 141 t.Errorf("Expected TANGLED_COMMIT_SHA='pr-sha-789', got '%s'", env["TANGLED_COMMIT_SHA"]) 142 } 143 144 // Check PR-specific variables 145 if env["TANGLED_PR_SOURCE_BRANCH"] != "feature-branch" { 146 t.Errorf("Expected TANGLED_PR_SOURCE_BRANCH='feature-branch', got '%s'", env["TANGLED_PR_SOURCE_BRANCH"]) 147 } 148 if env["TANGLED_PR_TARGET_BRANCH"] != "main" { 149 t.Errorf("Expected TANGLED_PR_TARGET_BRANCH='main', got '%s'", env["TANGLED_PR_TARGET_BRANCH"]) 150 } 151 if env["TANGLED_PR_SOURCE_SHA"] != "pr-sha-789" { 152 t.Errorf("Expected TANGLED_PR_SOURCE_SHA='pr-sha-789', got '%s'", env["TANGLED_PR_SOURCE_SHA"]) 153 } 154 if env["TANGLED_PR_ACTION"] != "opened" { 155 t.Errorf("Expected TANGLED_PR_ACTION='opened', got '%s'", env["TANGLED_PR_ACTION"]) 156 } 157} 158 159func TestPipelineEnvVars_ManualWithInputs(t *testing.T) { 160 tr := &tangled.Pipeline_TriggerMetadata{ 161 Kind: string(workflow.TriggerKindManual), 162 Manual: &tangled.Pipeline_ManualTriggerData{ 163 Inputs: []*tangled.Pipeline_Pair{ 164 {Key: "version", Value: "1.0.0"}, 165 {Key: "environment", Value: "production"}, 166 }, 167 }, 168 Repo: &tangled.Pipeline_TriggerRepo{ 169 Knot: "example.com", 170 Did: "did:plc:user123", 171 Repo: "my-repo", 172 }, 173 } 174 id := PipelineId{ 175 Knot: "example.com", 176 Rkey: "123123", 177 } 178 env := PipelineEnvVars(tr, id, false) 179 180 // Check manual input variables 181 if env["TANGLED_INPUT_VERSION"] != "1.0.0" { 182 t.Errorf("Expected TANGLED_INPUT_VERSION='1.0.0', got '%s'", env["TANGLED_INPUT_VERSION"]) 183 } 184 if env["TANGLED_INPUT_ENVIRONMENT"] != "production" { 185 t.Errorf("Expected TANGLED_INPUT_ENVIRONMENT='production', got '%s'", env["TANGLED_INPUT_ENVIRONMENT"]) 186 } 187 188 // Manual triggers shouldn't have ref/sha variables 189 if _, ok := env["TANGLED_REF"]; ok { 190 t.Error("Manual trigger should not have TANGLED_REF") 191 } 192 if _, ok := env["TANGLED_SHA"]; ok { 193 t.Error("Manual trigger should not have TANGLED_SHA") 194 } 195} 196 197func TestPipelineEnvVars_DevMode(t *testing.T) { 198 tr := &tangled.Pipeline_TriggerMetadata{ 199 Kind: string(workflow.TriggerKindPush), 200 Push: &tangled.Pipeline_PushTriggerData{ 201 NewSha: "abc123", 202 Ref: "refs/heads/main", 203 }, 204 Repo: &tangled.Pipeline_TriggerRepo{ 205 Knot: "localhost:3000", 206 Did: "did:plc:user123", 207 Repo: "my-repo", 208 }, 209 } 210 id := PipelineId{ 211 Knot: "example.com", 212 Rkey: "123123", 213 } 214 env := PipelineEnvVars(tr, id, true) 215 216 // Dev mode should use http:// and replace localhost with host.docker.internal 217 expectedURL := "http://host.docker.internal:3000/did:plc:user123/my-repo" 218 if env["TANGLED_REPO_URL"] != expectedURL { 219 t.Errorf("Expected TANGLED_REPO_URL='%s', got '%s'", expectedURL, env["TANGLED_REPO_URL"]) 220 } 221} 222 223func TestPipelineEnvVars_NilTrigger(t *testing.T) { 224 id := PipelineId{ 225 Knot: "example.com", 226 Rkey: "123123", 227 } 228 env := PipelineEnvVars(nil, id, false) 229 230 if env != nil { 231 t.Error("Expected nil env for nil trigger") 232 } 233} 234 235func TestPipelineEnvVars_NilPushData(t *testing.T) { 236 tr := &tangled.Pipeline_TriggerMetadata{ 237 Kind: string(workflow.TriggerKindPush), 238 Push: nil, 239 Repo: &tangled.Pipeline_TriggerRepo{ 240 Knot: "example.com", 241 Did: "did:plc:user123", 242 Repo: "my-repo", 243 }, 244 } 245 id := PipelineId{ 246 Knot: "example.com", 247 Rkey: "123123", 248 } 249 env := PipelineEnvVars(tr, id, false) 250 251 // Should still have repo variables 252 if env["TANGLED_REPO_KNOT"] != "example.com" { 253 t.Errorf("Expected TANGLED_REPO_KNOT='example.com', got '%s'", env["TANGLED_REPO_KNOT"]) 254 } 255 256 // Should not have ref/sha variables 257 if _, ok := env["TANGLED_REF"]; ok { 258 t.Error("Should not have TANGLED_REF when push data is nil") 259 } 260}