gitea源码

schedule_spec_test.go 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Copyright 2024 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package actions
  4. import (
  5. "testing"
  6. "time"
  7. "code.gitea.io/gitea/modules/test"
  8. "github.com/stretchr/testify/assert"
  9. "github.com/stretchr/testify/require"
  10. )
  11. func TestActionScheduleSpec_Parse(t *testing.T) {
  12. // Mock the local timezone is not UTC
  13. tz, err := time.LoadLocation("Asia/Shanghai")
  14. require.NoError(t, err)
  15. defer test.MockVariableValue(&time.Local, tz)()
  16. now, err := time.Parse(time.RFC3339, "2024-07-31T15:47:55+08:00")
  17. require.NoError(t, err)
  18. tests := []struct {
  19. name string
  20. spec string
  21. want string
  22. wantErr assert.ErrorAssertionFunc
  23. }{
  24. {
  25. name: "regular",
  26. spec: "0 10 * * *",
  27. want: "2024-07-31T10:00:00Z",
  28. wantErr: assert.NoError,
  29. },
  30. {
  31. name: "invalid",
  32. spec: "0 10 * *",
  33. want: "",
  34. wantErr: assert.Error,
  35. },
  36. {
  37. name: "with timezone",
  38. spec: "TZ=America/New_York 0 10 * * *",
  39. want: "2024-07-31T14:00:00Z",
  40. wantErr: assert.NoError,
  41. },
  42. {
  43. name: "timezone irrelevant",
  44. spec: "@every 5m",
  45. want: "2024-07-31T07:52:55Z",
  46. wantErr: assert.NoError,
  47. },
  48. }
  49. for _, tt := range tests {
  50. t.Run(tt.name, func(t *testing.T) {
  51. s := &ActionScheduleSpec{
  52. Spec: tt.spec,
  53. }
  54. got, err := s.Parse()
  55. tt.wantErr(t, err)
  56. if err == nil {
  57. assert.Equal(t, tt.want, got.Next(now).UTC().Format(time.RFC3339))
  58. }
  59. })
  60. }
  61. }