-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathqueuerNextInterval_test.go
More file actions
120 lines (100 loc) · 5.52 KB
/
Copy pathqueuerNextInterval_test.go
File metadata and controls
120 lines (100 loc) · 5.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package queuer
import (
"context"
"testing"
"time"
"github.com/siherrmann/queuer/helper"
"github.com/siherrmann/queuer/model"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func MockNextIntervalFunc1(start time.Time, currentCount int) time.Time {
return start.Add(time.Hour * time.Duration(currentCount))
}
func MockNextIntervalFunc2(start time.Time, currentCount int) time.Time {
return start.Add(time.Hour * time.Duration(currentCount))
}
func TestAddNextIntervalFunc(t *testing.T) {
helper.SetTestDatabaseConfigEnvs(t, dbPort)
testQueuer := NewQueuer("TestQueuer", 100)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
testQueuer.StartWithoutWorker(ctx, cancel, true)
t.Run("Successfully adds NextIntervalFunc", func(t *testing.T) {
worker := testQueuer.AddNextIntervalFunc(MockNextIntervalFunc1)
require.NotNil(t, worker, "Expected worker to be returned after adding NextIntervalFunc")
assert.Contains(t, testQueuer.worker.AvailableNextIntervalFuncs, "github.com/siherrmann/queuer.MockNextIntervalFunc1", "Expected NextIntervalFunc to be added to worker's AvailableNextIntervalFuncs")
assert.Equal(t, 1, len(testQueuer.worker.AvailableNextIntervalFuncs), "Expected only one NextIntervalFunc to be added to worker's AvailableNextIntervalFuncs")
})
t.Run("Successfully adds multiple NextIntervalFuncs", func(t *testing.T) {
// Reset the worker to ensure a clean state
testQueuer.worker.AvailableNextIntervalFuncs = []string{}
_, err := testQueuer.dbWorker.UpdateWorker(testQueuer.worker)
require.NoError(t, err, "Expected no error when updating worker after resetting AvailableNextIntervalFuncs")
testQueuer.AddNextIntervalFunc(MockNextIntervalFunc1)
worker := testQueuer.AddNextIntervalFunc(MockNextIntervalFunc2)
require.NotNil(t, worker, "Expected worker to be returned after adding NextIntervalFunc")
assert.Contains(t, testQueuer.worker.AvailableNextIntervalFuncs, "github.com/siherrmann/queuer.MockNextIntervalFunc1", "Expected NextIntervalFunc to be added to worker's AvailableNextIntervalFuncs")
assert.Contains(t, testQueuer.worker.AvailableNextIntervalFuncs, "github.com/siherrmann/queuer.MockNextIntervalFunc2", "Expected second NextIntervalFunc to be added to worker's AvailableNextIntervalFuncs")
assert.Equal(t, 2, len(testQueuer.worker.AvailableNextIntervalFuncs), "Expected two NextIntervalFuncs to be added to worker's AvailableNextIntervalFuncs")
})
t.Run("Fails to add nil NextIntervalFunc", func(t *testing.T) {
// Reset the worker to ensure a clean state
testQueuer.worker.AvailableNextIntervalFuncs = []string{}
_, err := testQueuer.dbWorker.UpdateWorker(testQueuer.worker)
require.NoError(t, err, "Expected no error when updating worker after resetting AvailableNextIntervalFuncs")
var worker *model.Worker
defer func() {
r := recover()
require.NotNil(t, r, "Expected panic when adding nil NextIntervalFunc")
require.Nil(t, worker, "Expected worker to be nil when adding nil NextIntervalFunc")
}()
worker = testQueuer.AddNextIntervalFunc(nil)
})
t.Run("Fails to add NextIntervalFunc with existing name", func(t *testing.T) {
// Reset the worker to ensure a clean state
testQueuer.worker.AvailableNextIntervalFuncs = []string{}
_, err := testQueuer.dbWorker.UpdateWorker(testQueuer.worker)
require.NoError(t, err, "Expected no error when updating worker after resetting AvailableNextIntervalFuncs")
var worker *model.Worker
defer func() {
r := recover()
require.NotNil(t, r, "Expected panic when adding NextIntervalFunc with existing name")
require.Nil(t, worker, "Expected worker to be nil when adding NextIntervalFunc with existing name")
}()
testQueuer.AddNextIntervalFunc(MockNextIntervalFunc1)
worker = testQueuer.AddNextIntervalFunc(MockNextIntervalFunc1)
})
}
func TestAddNextIntervalFuncWithName(t *testing.T) {
helper.SetTestDatabaseConfigEnvs(t, dbPort)
testQueuer := NewQueuer("TestQueuer", 100)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
testQueuer.StartWithoutWorker(ctx, cancel, true)
t.Run("Successfully adds NextIntervalFunc with name", func(t *testing.T) {
worker := testQueuer.AddNextIntervalFuncWithName(MockNextIntervalFunc1, "CustomFuncName")
require.NotNil(t, worker, "Expected worker to be returned after adding NextIntervalFunc with name")
assert.Contains(t, testQueuer.worker.AvailableNextIntervalFuncs, "CustomFuncName", "Expected NextIntervalFunc to be added to worker's AvailableNextIntervalFuncs")
assert.Equal(t, 1, len(testQueuer.worker.AvailableNextIntervalFuncs), "Expected only one NextIntervalFunc to be added to worker's AvailableNextIntervalFuncs")
})
t.Run("Fails to add nil NextIntervalFunc with name", func(t *testing.T) {
var worker *model.Worker
defer func() {
r := recover()
require.NotNil(t, r, "Expected panic when adding nil NextIntervalFunc with name")
require.Nil(t, worker, "Expected worker to be nil when adding nil NextIntervalFunc with name")
}()
worker = testQueuer.AddNextIntervalFuncWithName(nil, "CustomFuncName")
})
t.Run("Fails to add NextIntervalFunc with existing name", func(t *testing.T) {
var worker *model.Worker
defer func() {
r := recover()
require.NotNil(t, r, "Expected panic when adding NextIntervalFunc with existing name")
require.Nil(t, worker, "Expected worker to be nil when adding NextIntervalFunc with existing name")
}()
testQueuer.AddNextIntervalFuncWithName(MockNextIntervalFunc1, "CustomFuncName")
worker = testQueuer.AddNextIntervalFuncWithName(MockNextIntervalFunc2, "CustomFuncName")
})
}