You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

job_emitter_test.go 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package actions
  4. import (
  5. "testing"
  6. actions_model "code.gitea.io/gitea/models/actions"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func Test_jobStatusResolver_Resolve(t *testing.T) {
  10. tests := []struct {
  11. name string
  12. jobs actions_model.ActionJobList
  13. want map[int64]actions_model.Status
  14. }{
  15. {
  16. name: "no blocked",
  17. jobs: actions_model.ActionJobList{
  18. {ID: 1, JobID: "1", Status: actions_model.StatusWaiting, Needs: []string{}},
  19. {ID: 2, JobID: "2", Status: actions_model.StatusWaiting, Needs: []string{}},
  20. {ID: 3, JobID: "3", Status: actions_model.StatusWaiting, Needs: []string{}},
  21. },
  22. want: map[int64]actions_model.Status{},
  23. },
  24. {
  25. name: "single blocked",
  26. jobs: actions_model.ActionJobList{
  27. {ID: 1, JobID: "1", Status: actions_model.StatusSuccess, Needs: []string{}},
  28. {ID: 2, JobID: "2", Status: actions_model.StatusBlocked, Needs: []string{"1"}},
  29. {ID: 3, JobID: "3", Status: actions_model.StatusWaiting, Needs: []string{}},
  30. },
  31. want: map[int64]actions_model.Status{
  32. 2: actions_model.StatusWaiting,
  33. },
  34. },
  35. {
  36. name: "multiple blocked",
  37. jobs: actions_model.ActionJobList{
  38. {ID: 1, JobID: "1", Status: actions_model.StatusSuccess, Needs: []string{}},
  39. {ID: 2, JobID: "2", Status: actions_model.StatusBlocked, Needs: []string{"1"}},
  40. {ID: 3, JobID: "3", Status: actions_model.StatusBlocked, Needs: []string{"1"}},
  41. },
  42. want: map[int64]actions_model.Status{
  43. 2: actions_model.StatusWaiting,
  44. 3: actions_model.StatusWaiting,
  45. },
  46. },
  47. {
  48. name: "chain blocked",
  49. jobs: actions_model.ActionJobList{
  50. {ID: 1, JobID: "1", Status: actions_model.StatusFailure, Needs: []string{}},
  51. {ID: 2, JobID: "2", Status: actions_model.StatusBlocked, Needs: []string{"1"}},
  52. {ID: 3, JobID: "3", Status: actions_model.StatusBlocked, Needs: []string{"2"}},
  53. },
  54. want: map[int64]actions_model.Status{
  55. 2: actions_model.StatusSkipped,
  56. 3: actions_model.StatusSkipped,
  57. },
  58. },
  59. {
  60. name: "loop need",
  61. jobs: actions_model.ActionJobList{
  62. {ID: 1, JobID: "1", Status: actions_model.StatusBlocked, Needs: []string{"3"}},
  63. {ID: 2, JobID: "2", Status: actions_model.StatusBlocked, Needs: []string{"1"}},
  64. {ID: 3, JobID: "3", Status: actions_model.StatusBlocked, Needs: []string{"2"}},
  65. },
  66. want: map[int64]actions_model.Status{},
  67. },
  68. }
  69. for _, tt := range tests {
  70. t.Run(tt.name, func(t *testing.T) {
  71. r := newJobStatusResolver(tt.jobs)
  72. assert.Equal(t, tt.want, r.Resolve())
  73. })
  74. }
  75. }