/
DashboardStatsControllerTest.php
113 lines (99 loc) · 3.69 KB
/
DashboardStatsControllerTest.php
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
<?php
namespace Laravel\Horizon\Tests\Controller;
use Laravel\Horizon\Contracts\JobRepository;
use Laravel\Horizon\Contracts\MasterSupervisorRepository;
use Laravel\Horizon\Contracts\MetricsRepository;
use Laravel\Horizon\Contracts\SupervisorRepository;
use Laravel\Horizon\WaitTimeCalculator;
use Mockery;
class DashboardStatsControllerTest extends AbstractControllerTest
{
public function test_all_stats_are_correctly_returned()
{
// Setup supervisor data...
$supervisors = Mockery::mock(SupervisorRepository::class);
$supervisors->shouldReceive('all')->andReturn([
(object) [
'processes' => [
'redis:first' => 10,
'redis:second' => 10,
],
],
(object) [
'processes' => [
'redis:first' => 10,
],
],
]);
$this->app->instance(SupervisorRepository::class, $supervisors);
// Setup metrics data...
$metrics = Mockery::mock(MetricsRepository::class);
$metrics->shouldReceive('jobsProcessedPerMinute')->andReturn(1);
$metrics->shouldReceive('queueWithMaximumRuntime')->andReturn('default');
$metrics->shouldReceive('queueWithMaximumThroughput')->andReturn('default');
$this->app->instance(MetricsRepository::class, $metrics);
$jobs = Mockery::mock(JobRepository::class);
$jobs->shouldReceive('countRecentlyFailed')->andReturn(1);
$jobs->shouldReceive('countRecent')->andReturn(1);
$this->app->instance(JobRepository::class, $jobs);
// Setup wait time data...
$wait = Mockery::mock(WaitTimeCalculator::class);
$wait->shouldReceive('calculate')->andReturn([
'first' => 20,
'second' => 10,
]);
$this->app->instance(WaitTimeCalculator::class, $wait);
$response = $this->actingAs(new Fakes\User)
->get('/horizon/api/stats');
$response->assertJson([
'jobsPerMinute' => 1,
'wait' => ['first' => 20],
'processes' => 30,
'status' => 'inactive',
'failedJobs' => 1,
'recentJobs' => 1,
'queueWithMaxRuntime' => 'default',
'queueWithMaxThroughput' => 'default',
'periods' => [
'failedJobs' => 10080,
'recentJobs' => 60,
],
]);
}
public function test_paused_status_is_reflected_if_all_master_supervisors_are_paused()
{
$masters = Mockery::mock(MasterSupervisorRepository::class);
$masters->shouldReceive('all')->andReturn([
(object) [
'status' => 'paused',
],
(object) [
'status' => 'paused',
],
]);
$this->app->instance(MasterSupervisorRepository::class, $masters);
$response = $this->actingAs(new Fakes\User)
->get('/horizon/api/stats');
$response->assertJson([
'status' => 'paused',
]);
}
public function test_paused_status_isnt_reflected_if_not_all_master_supervisors_are_paused()
{
$masters = Mockery::mock(MasterSupervisorRepository::class);
$masters->shouldReceive('all')->andReturn([
(object) [
'status' => 'running',
],
(object) [
'status' => 'paused',
],
]);
$this->app->instance(MasterSupervisorRepository::class, $masters);
$response = $this->actingAs(new Fakes\User)
->get('/horizon/api/stats');
$response->assertJson([
'status' => 'running',
]);
}
}