Monorepo for Tangled tangled.org
5

Configure Feed

Select the types of activity you want to include in your feed.

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