@@ -23,7 +23,8 @@ public async Task Start_Stop()
23
23
new HorariumSettings ( ) ,
24
24
new JsonSerializerSettings ( ) ,
25
25
Mock . Of < IHorariumLogger > ( ) ,
26
- Mock . Of < IExecutorJob > ( ) ) ;
26
+ Mock . Of < IExecutorJob > ( ) ,
27
+ Mock . Of < IUncompletedTaskList > ( ) ) ;
27
28
28
29
// Act
29
30
runnerJobs . Start ( ) ;
@@ -55,7 +56,8 @@ public async Task Start_RecoverAfterIntervalTimeout_AfterFailedDB()
55
56
settings ,
56
57
new JsonSerializerSettings ( ) ,
57
58
Mock . Of < IHorariumLogger > ( ) ,
58
- Mock . Of < IExecutorJob > ( ) ) ;
59
+ Mock . Of < IExecutorJob > ( ) ,
60
+ Mock . Of < IUncompletedTaskList > ( ) ) ;
59
61
60
62
jobRepositoryMock . SetupSequence ( x => x . GetReadyJob ( It . IsAny < string > ( ) , It . IsAny < TimeSpan > ( ) ) )
61
63
. ThrowsAsync ( new Exception ( ) )
@@ -84,7 +86,8 @@ public async Task Start_WontRecoverBeforeIntervalTimeout_AfterFailedDB()
84
86
settings ,
85
87
new JsonSerializerSettings ( ) ,
86
88
Mock . Of < IHorariumLogger > ( ) ,
87
- Mock . Of < IExecutorJob > ( ) ) ;
89
+ Mock . Of < IExecutorJob > ( ) ,
90
+ Mock . Of < IUncompletedTaskList > ( ) ) ;
88
91
89
92
jobRepositoryMock . SetupSequence ( x => x . GetReadyJob ( It . IsAny < string > ( ) , It . IsAny < TimeSpan > ( ) ) )
90
93
. ThrowsAsync ( new Exception ( ) )
@@ -97,5 +100,69 @@ public async Task Start_WontRecoverBeforeIntervalTimeout_AfterFailedDB()
97
100
// Assert
98
101
jobRepositoryMock . Verify ( r => r . GetReadyJob ( It . IsAny < string > ( ) , It . IsAny < TimeSpan > ( ) ) , Times . Once ) ;
99
102
}
103
+
104
+ [ Fact ]
105
+ public async Task Start_NextJobStarted_AddsJobTaskToUncompletedTasks ( )
106
+ {
107
+ // Arrange
108
+ var jobRepositoryMock = new Mock < IJobRepository > ( ) ;
109
+ var uncompletedTaskList = new Mock < IUncompletedTaskList > ( ) ;
110
+
111
+ uncompletedTaskList . Setup ( x => x . Add ( It . IsAny < Task > ( ) ) ) ;
112
+
113
+ jobRepositoryMock . Setup ( x => x . GetReadyJob ( It . IsAny < string > ( ) , It . IsAny < TimeSpan > ( ) ) )
114
+ . ReturnsAsync ( new JobDb
115
+ {
116
+ JobType = typeof ( object ) . ToString ( ) ,
117
+ } ) ;
118
+
119
+ var runnerJobs = new RunnerJobs ( jobRepositoryMock . Object ,
120
+ new HorariumSettings
121
+ {
122
+ IntervalStartJob = TimeSpan . FromHours ( 1 ) , // prevent second job from starting
123
+ } ,
124
+ new JsonSerializerSettings ( ) ,
125
+ Mock . Of < IHorariumLogger > ( ) ,
126
+ Mock . Of < IExecutorJob > ( ) ,
127
+ uncompletedTaskList . Object ) ;
128
+
129
+ // Act
130
+ runnerJobs . Start ( ) ;
131
+ await Task . Delay ( TimeSpan . FromSeconds ( 5 ) ) ;
132
+ await runnerJobs . Stop ( ) ;
133
+
134
+ // Assert
135
+ uncompletedTaskList . Verify ( x=> x . Add ( It . IsAny < Task > ( ) ) , Times . Once ) ;
136
+ }
137
+
138
+ [ Fact ]
139
+ public async Task StopAsync_AwaitsWhenAllCompleted ( )
140
+ {
141
+ // Arrange
142
+ var jobRepositoryMock = new Mock < IJobRepository > ( ) ;
143
+ var uncompletedTaskList = new Mock < IUncompletedTaskList > ( ) ;
144
+
145
+ var settings = new HorariumSettings
146
+ {
147
+ IntervalStartJob = TimeSpan . FromSeconds ( 2 ) ,
148
+ } ;
149
+
150
+ var runnerJobs = new RunnerJobs ( jobRepositoryMock . Object ,
151
+ settings ,
152
+ new JsonSerializerSettings ( ) ,
153
+ Mock . Of < IHorariumLogger > ( ) ,
154
+ Mock . Of < IExecutorJob > ( ) ,
155
+ uncompletedTaskList . Object ) ;
156
+
157
+ jobRepositoryMock . Setup ( x => x . GetReadyJob ( It . IsAny < string > ( ) , It . IsAny < TimeSpan > ( ) ) ) ;
158
+
159
+ // Act
160
+ runnerJobs . Start ( ) ;
161
+ await Task . Delay ( TimeSpan . FromSeconds ( 1 ) ) ;
162
+ await runnerJobs . Stop ( ) ;
163
+
164
+ // Assert
165
+ uncompletedTaskList . Verify ( x => x . WhenAllCompleted ( ) , Times . Once ) ;
166
+ }
100
167
}
101
168
}
0 commit comments