Skip to content

Commit f41bb76

Browse files
committed
Add tests for Status class
1 parent 6e8e872 commit f41bb76

File tree

2 files changed

+56
-5
lines changed

2 files changed

+56
-5
lines changed

src/Status.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public function majorOutage(): bool
5757
*
5858
* @return object{total: int, operational: int, performance_issues: int, partial_outage: int, major_outage: int}
5959
*/
60-
public function components()
60+
public function components(): object
6161
{
6262
return $this->components ??= Component::query()
6363
->toBase()
@@ -66,7 +66,6 @@ public function components()
6666
->selectRaw('sum(case when status = ? then 1 else 0 end) as performance_issues', [ComponentStatusEnum::performance_issues])
6767
->selectRaw('sum(case when status = ? then 1 else 0 end) as partial_outage', [ComponentStatusEnum::partial_outage])
6868
->selectRaw('sum(case when status = ? then 1 else 0 end) as major_outage', [ComponentStatusEnum::major_outage])
69-
// @todo Handle authenticated users.
7069
->first();
7170
}
7271

@@ -75,13 +74,13 @@ public function components()
7574
*
7675
* @return object{total: int, resolved: int, unresolved: int}
7776
*/
78-
public function incidents()
77+
public function incidents(): object
7978
{
8079
return $this->incidents ??= Incident::query()
8180
->toBase()
8281
->selectRaw('count(*) as total')
83-
->selectRaw('sum(case when ? in (incidents.status, latest_update.status) then 1 else 0 end) as resolved', [IncidentStatusEnum::fixed])
84-
->selectRaw('sum(case when ? not in (incidents.status, latest_update.status) then 1 else 0 end) as unresolved', [IncidentStatusEnum::fixed])
82+
->selectRaw('sum(case when ? in (incidents.status, latest_update.status) then 1 else 0 end) as resolved', [IncidentStatusEnum::fixed->value])
83+
->selectRaw('sum(case when ? not in (incidents.status, latest_update.status) then 1 else 0 end) as unresolved', [IncidentStatusEnum::fixed->value])
8584
->joinSub(function (Builder $query) {
8685
$query
8786
->select('iu1.incident_id', 'iu1.status')

tests/Unit/StatusTest.php

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
namespace Tests\Unit;
44

55
use Cachet\Enums\ComponentStatusEnum;
6+
use Cachet\Enums\IncidentStatusEnum;
7+
use Cachet\Enums\SystemStatusEnum;
68
use Cachet\Models\Component;
9+
use Cachet\Models\Incident;
710
use Cachet\Status;
811

912
use function PHPUnit\Framework\assertFalse;
@@ -36,3 +39,52 @@
3639

3740
assertFalse($status->majorOutage());
3841
});
42+
43+
it('can get the current system status', function () {
44+
Component::factory()->create([
45+
'status' => ComponentStatusEnum::operational->value,
46+
]);
47+
48+
$this->assertEquals((new Status())->current(), SystemStatusEnum::operational);
49+
});
50+
51+
it('can get the current system status as partial outage', function () {
52+
Component::factory()->create([
53+
'status' => ComponentStatusEnum::operational->value,
54+
]);
55+
56+
Component::factory()->create([
57+
'status' => ComponentStatusEnum::partial_outage->value,
58+
]);
59+
60+
$this->assertEquals((new Status())->current(), SystemStatusEnum::partial_outage);
61+
});
62+
63+
it('can get the current system status as major outage', function () {
64+
Component::factory()->create([
65+
'status' => ComponentStatusEnum::major_outage->value,
66+
]);
67+
68+
$this->assertEquals((new Status())->current(), SystemStatusEnum::major_outage);
69+
});
70+
71+
it('can fetch component overview', function () {
72+
Component::factory()
73+
->sequence(
74+
['status' => ComponentStatusEnum::unknown->value],
75+
['status' => ComponentStatusEnum::operational->value],
76+
['status' => ComponentStatusEnum::partial_outage->value],
77+
['status' => ComponentStatusEnum::major_outage->value],
78+
)
79+
->count(4)
80+
->create();
81+
82+
$components = (new Status)->components();
83+
84+
expect($components)
85+
->total->toBe(4)
86+
->operational->toBe(1)
87+
->performance_issues->toBe(0)
88+
->partial_outage->toBe(1)
89+
->major_outage->toBe(1);
90+
});

0 commit comments

Comments
 (0)