| 311 | } |
| 312 | |
| 313 | func TestTriggerIRToYAMLMap(t *testing.T) { |
| 314 | tests := []struct { |
| 315 | name string |
| 316 | ir *TriggerIR |
| 317 | want map[string]any |
| 318 | }{ |
| 319 | { |
| 320 | name: "simple event", |
| 321 | ir: &TriggerIR{ |
| 322 | Event: "push", |
| 323 | }, |
| 324 | want: map[string]any{ |
| 325 | "push": map[string]any{}, // Empty map instead of nil to avoid null in YAML |
| 326 | }, |
| 327 | }, |
| 328 | { |
| 329 | name: "event with types", |
| 330 | ir: &TriggerIR{ |
| 331 | Event: "issues", |
| 332 | Types: []string{"opened", "edited"}, |
| 333 | }, |
| 334 | want: map[string]any{ |
| 335 | "issues": map[string]any{ |
| 336 | "types": []string{"opened", "edited"}, |
| 337 | }, |
| 338 | }, |
| 339 | }, |
| 340 | { |
| 341 | name: "event with filters", |
| 342 | ir: &TriggerIR{ |
| 343 | Event: "push", |
| 344 | Filters: map[string]any{ |
| 345 | "branches": []string{"main"}, |
| 346 | }, |
| 347 | }, |
| 348 | want: map[string]any{ |
| 349 | "push": map[string]any{ |
| 350 | "branches": []string{"main"}, |
| 351 | }, |
| 352 | }, |
| 353 | }, |
| 354 | { |
| 355 | name: "event with additional events", |
| 356 | ir: &TriggerIR{ |
| 357 | Event: "push", |
| 358 | AdditionalEvents: map[string]any{ |
| 359 | "workflow_dispatch": nil, |
| 360 | }, |
| 361 | }, |
| 362 | want: map[string]any{ |
| 363 | "push": map[string]any{}, // Empty map instead of nil |
| 364 | "workflow_dispatch": nil, |
| 365 | }, |
| 366 | }, |
| 367 | } |
| 368 | |
| 369 | for _, tt := range tests { |
| 370 | t.Run(tt.name, func(t *testing.T) { |