Skip to content

Commit 29eaf72

Browse files
authored
Add support for Laravel 11 (#358)
* Add support for Laravel 11 - updated composer dependencies to support Laravel 11 - add support for carbon 3 diffIn methods now returning floats - add test coverage for cert check trait - removed support for unmaintained laravel & php versions * Fix styling --------- Co-authored-by: J-T-McC <[email protected]>
1 parent 4e570c3 commit 29eaf72

File tree

11 files changed

+160
-40
lines changed

11 files changed

+160
-40
lines changed

.github/workflows/run-tests.yml

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,17 @@ jobs:
99
fail-fast: false
1010
matrix:
1111
os: [ubuntu-latest]
12-
php: [8.1, 8.0]
13-
laravel: [9.*, 8.*, 10.*]
12+
php: [8.1, 8.2, 8.3]
13+
laravel: [10.*, 11.*]
1414
dependency-version: [prefer-lowest, prefer-stable]
1515
include:
1616
- laravel: 10.*
1717
testbench: 8.*
18-
- laravel: 9.*
19-
testbench: 7.*
20-
- laravel: 8.*
21-
testbench: ^6.23
18+
- laravel: 11.*
19+
testbench: 9.*
2220
exclude:
23-
- laravel: 10.*
24-
php: 8.0
25-
- laravel: 9.*
26-
php: 7.4
21+
- laravel: 11.*
22+
php: 8.1
2723

2824
name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.dependency-version }} - ${{ matrix.os }}
2925

composer.json

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,29 @@
1616
}
1717
],
1818
"require": {
19-
"php": "^8.0",
19+
"php": "^8.1",
2020
"ext-intl": "*",
2121
"ext-json": "*",
22-
"graham-campbell/guzzle-factory": "^5.0",
22+
"graham-campbell/guzzle-factory": "^5.0|^7.0",
2323
"guzzlehttp/guzzle": "^7.4|^7.2",
24-
"illuminate/cache": "^8.73|^9.0|^10.0",
25-
"illuminate/config": "^8.73|^9.0|^10.0",
26-
"illuminate/console": "^8.73|^9.0|^10.0",
27-
"illuminate/container": "^8.73|^9.0|^10.0",
28-
"illuminate/contracts": "^8.73|^9.0|^10.0",
29-
"illuminate/events": "^8.73|^9.0|^10.0",
30-
"illuminate/filesystem": "^8.73|^9.0|^10.0",
31-
"illuminate/notifications": "^8.73|^9.0|^10.0",
32-
"illuminate/support": "^8.73|^9.0|^10.0",
33-
"laravel/slack-notification-channel": "^2.4",
24+
"illuminate/cache": "^10.0|^11.0",
25+
"illuminate/config": "^10.0|^11.0",
26+
"illuminate/console": "^10.0|^11.0",
27+
"illuminate/container": "^10.0|^11.0",
28+
"illuminate/contracts": "^10.0|^11.0",
29+
"illuminate/events": "^10.0|^11.0",
30+
"illuminate/filesystem": "^10.0|^11.0",
31+
"illuminate/notifications": "^10.0|^11.0",
32+
"illuminate/support": "^10.0|^11.0",
33+
"laravel/slack-notification-channel": "^2.4|^3.2",
3434
"spatie/ssl-certificate": "^1.22|^2.1.2",
3535
"spatie/url": "^2.0.0"
3636
},
3737
"require-dev": {
3838
"mockery/mockery": "^1.4",
39-
"illuminate/testing": "^8.73|^9.0|^10.0",
40-
"orchestra/testbench": "^6.23|^7.0|^8.0",
41-
"phpunit/phpunit": "^9.5"
39+
"illuminate/testing": "^10.0|^11.0",
40+
"orchestra/testbench": "^8.0|^9.0",
41+
"phpunit/phpunit": "^9.5|^10.5"
4242
},
4343
"autoload": {
4444
"psr-4": {

phpunit.xml.dist

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bootstrap="vendor/autoload.php" backupGlobals="false" backupStaticAttributes="false" colors="true" verbose="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
3-
<coverage>
4-
<include>
5-
<directory suffix=".php">src/</directory>
6-
</include>
7-
</coverage>
2+
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bootstrap="vendor/autoload.php" backupGlobals="false" colors="true" processIsolation="false" stopOnFailure="false" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd" cacheDirectory=".phpunit.cache" backupStaticProperties="false">
83
<testsuites>
94
<testsuite name="Spatie Test Suite">
105
<directory>tests</directory>

src/Helpers/Period.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public function duration(): string
2626
{
2727
$interval = $this->startDateTime->diff($this->endDateTime);
2828

29-
if (! $this->startDateTime->diffInHours($this->endDateTime)) {
29+
if ($this->startDateTime->diffInHours($this->endDateTime) < 1) {
3030
return $interval->format('%im');
3131
}
3232

33-
if (! $this->startDateTime->diffInDays($this->endDateTime)) {
33+
if ($this->startDateTime->diffInDays($this->endDateTime) < 1) {
3434
return $interval->format('%hh %im');
3535
}
3636

src/Models/Traits/SupportsCertificateCheck.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ protected function fireEventsForUpdatedMonitorWithCertificate(Monitor $monitor,
5252
if ($this->certificate_status === CertificateStatus::VALID) {
5353
event(new CertificateCheckSucceeded($this, $certificate));
5454

55-
if ($certificate->expirationDate()->diffInDays() <= config('uptime-monitor.certificate_check.fire_expiring_soon_event_if_certificate_expires_within_days')) {
55+
if ($certificate->expirationDate()->diffInDays(absolute: true) <= config('uptime-monitor.certificate_check.fire_expiring_soon_event_if_certificate_expires_within_days')) {
5656
event(new CertificateExpiresSoon($monitor, $certificate));
5757
}
5858

src/Models/Traits/SupportsUptimeCheck.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public function shouldCheckUptime(): bool
4747
return true;
4848
}
4949

50-
return $this->uptime_last_check_date->diffInMinutes() >= $this->uptime_check_interval_in_minutes;
50+
return (int)$this->uptime_last_check_date->diffInMinutes(absolute: true) >= $this->uptime_check_interval_in_minutes;
5151
}
5252

5353
public function uptimeRequestSucceeded(ResponseInterface $response): void

tests/Integration/Helpers/PeriodTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public function it_can_generate_a_string_representation_of_the_duration(int $dif
2929
$this->assertEquals($formattedString, $period->duration());
3030
}
3131

32-
public function periodDataProvider(): array
32+
public static function periodDataProvider(): array
3333
{
3434
return [
3535
[10, '10m'],
@@ -54,7 +54,7 @@ public function it_has_a_text_representation(Carbon $startDateTime, Carbon $endD
5454
$this->assertEquals($text, $period->toText());
5555
}
5656

57-
public function textDataProvider(): array
57+
public static function textDataProvider(): array
5858
{
5959
Carbon::setTestNow(Carbon::create(2016, 1, 1, 00, 00, 00));
6060

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
<?php
2+
3+
namespace Spatie\UptimeMonitor\Test\Integration\Models\Traits;
4+
5+
use Carbon\Carbon;
6+
use Exception;
7+
use Illuminate\Support\Facades\Event;
8+
use Spatie\SslCertificate\Downloader;
9+
use Spatie\SslCertificate\SslCertificate;
10+
use Spatie\UptimeMonitor\Events\CertificateCheckFailed;
11+
use Spatie\UptimeMonitor\Events\CertificateCheckSucceeded;
12+
use Spatie\UptimeMonitor\Events\CertificateExpiresSoon;
13+
use Spatie\UptimeMonitor\Models\Enums\CertificateStatus;
14+
use Spatie\UptimeMonitor\Models\Monitor;
15+
use Spatie\UptimeMonitor\Test\TestCase;
16+
17+
class SupportsCertificateCheckTest extends TestCase
18+
{
19+
protected Monitor $monitor;
20+
protected int $daysBeforeExpiration;
21+
protected SslCertificate $certificate;
22+
protected const DOMAIN = 'https://google.com';
23+
24+
public function setUp(): void
25+
{
26+
parent::setUp();
27+
28+
Event::fake();
29+
30+
$this->monitor = Monitor::factory()->create([
31+
'certificate_check_enabled' => true,
32+
'certificate_status' => CertificateStatus::NOT_YET_CHECKED,
33+
'url' => self::DOMAIN,
34+
]);
35+
36+
$this->certificate = Downloader::downloadCertificateFromUrl(self::DOMAIN);
37+
$this->daysBeforeExpiration = config(
38+
'uptime-monitor.certificate_check.fire_expiring_soon_event_if_certificate_expires_within_days'
39+
);
40+
}
41+
42+
/** @test */
43+
public function it_can_set_valid_certificate_not_within_expiration_range()
44+
{
45+
// Collect
46+
Carbon::setTestNow($this->certificate->expirationDate()->subDays($this->daysBeforeExpiration + 1));
47+
48+
// Act
49+
$this->monitor->setCertificate($this->certificate);
50+
51+
// Assert
52+
$this->monitor->fresh();
53+
$this->assertSame(CertificateStatus::VALID, $this->monitor->certificate_status);
54+
$this->assertSame($this->certificate->getIssuer(), $this->monitor->certificate_issuer);
55+
$this->assertTrue($this->monitor->certificate_expiration_date->isSameDay($this->certificate->expirationDate()));
56+
Event::assertDispatched(CertificateCheckSucceeded::class);
57+
Event::assertNotDispatched(CertificateCheckFailed::class);
58+
Event::assertNotDispatched(CertificateExpiresSoon::class);
59+
}
60+
61+
/** @test */
62+
public function it_can_set_valid_certificate_within_expiration_range()
63+
{
64+
// Collect
65+
Carbon::setTestNow($this->certificate->expirationDate()->subDays($this->daysBeforeExpiration - 1));
66+
67+
// Act
68+
$this->monitor->setCertificate($this->certificate);
69+
70+
// Assert
71+
$this->monitor->fresh();
72+
$this->assertSame(CertificateStatus::VALID, $this->monitor->certificate_status);
73+
$this->assertSame($this->certificate->getIssuer(), $this->monitor->certificate_issuer);
74+
$this->assertTrue($this->monitor->certificate_expiration_date->isSameDay($this->certificate->expirationDate()));
75+
Event::assertDispatched(CertificateCheckSucceeded::class);
76+
Event::assertDispatched(CertificateExpiresSoon::class);
77+
Event::assertNotDispatched(CertificateCheckFailed::class);
78+
}
79+
80+
/** @test */
81+
public function it_can_set_invalid_certificate()
82+
{
83+
// Collect
84+
Carbon::setTestNow($this->certificate->expirationDate()->addDay());
85+
86+
// Act
87+
$this->monitor->setCertificate($this->certificate);
88+
89+
// Assert
90+
$this->monitor->fresh();
91+
$this->assertSame(CertificateStatus::INVALID, $this->monitor->certificate_status);
92+
$this->assertSame('The certificate has expired', $this->monitor->certificate_check_failure_reason);
93+
$this->assertSame($this->certificate->getIssuer(), $this->monitor->certificate_issuer);
94+
$this->assertTrue($this->monitor->certificate_expiration_date->isSameDay($this->certificate->expirationDate()));
95+
Event::assertDispatched(CertificateCheckFailed::class);
96+
Event::assertNotDispatched(CertificateCheckSucceeded::class);
97+
Event::assertNotDispatched(CertificateExpiresSoon::class);
98+
}
99+
100+
/** @test */
101+
public function it_can_set_certificate_exception()
102+
{
103+
// Collect
104+
$exception = new Exception('Certificate check failed');
105+
106+
// Act
107+
$this->monitor->setCertificateException($exception);
108+
109+
// Assert
110+
$this->monitor->fresh();
111+
$this->assertSame(CertificateStatus::INVALID, $this->monitor->certificate_status);
112+
$this->assertSame('Certificate check failed', $this->monitor->certificate_check_failure_reason);
113+
$this->assertSame('', $this->monitor->certificate_issuer);
114+
$this->assertNull($this->monitor->certificate_expiration_date);
115+
Event::assertDispatched(CertificateCheckFailed::class);
116+
}
117+
}

tests/Integration/Models/Traits/SupportsUptimeCheckTest.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Spatie\UptimeMonitor\Test\Integration\Models\Traits;
44

55
use Carbon\Carbon;
6+
use PHPUnit\Framework\Constraint\IsEqualWithDelta;
67
use Spatie\UptimeMonitor\Models\Enums\UptimeStatus;
78
use Spatie\UptimeMonitor\Models\Monitor;
89
use Spatie\UptimeMonitor\Test\TestCase;
@@ -101,6 +102,14 @@ protected function monitorAttributeIsSetToNow(string $attribute): bool
101102
{
102103
$this->monitor = $this->monitor->fresh();
103104

104-
return $this->monitor->$attribute->diffInMinutes() === 0;
105+
$constraint = new IsEqualWithDelta(
106+
value: 0,
107+
delta: 1,
108+
);
109+
110+
return $constraint->evaluate(
111+
other: $this->monitor->$attribute->diffInMinutes(),
112+
returnResult: true
113+
);
105114
}
106115
}

tests/Integration/Notifications/EventHandlerTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ function ($notification) use ($monitor) {
7575
}
7676
}
7777

78-
public function eventClassDataProvider(): array
78+
public static function eventClassDataProvider(): array
7979
{
8080
return [
8181
[UptimeCheckSucceededEvent::class, UptimeCheckSucceeded::class, ['uptime_status' => UptimeStatus::UP], true],
@@ -127,7 +127,7 @@ function ($notification, $usedChannels) use ($configuredChannels) {
127127
);
128128
}
129129

130-
public function channelDataProvider(): array
130+
public static function channelDataProvider(): array
131131
{
132132
return [
133133
[['mail']],

0 commit comments

Comments
 (0)