mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
* Shift HTTP kernel and middleware * Shift service providers * Shift console routes * Shift to class based factories * Namespace seeders * Shift PSR-4 autoloading * Default config files In an effort to make upgrading the constantly changing config files easier, Shift defaulted them. This allows you to review the commit diff for once for customizations when you are done Shifting. Moving forward, consider using ENV variables or create a separate config file to allow the core config files to remain as default as possible. * Shift Laravel dependencies * Shift return type of base TestCase methods From the [PHPUnit 8 release notes][1], the `TestCase` methods below now declare a `void` return type: - `setUpBeforeClass()` - `setUp()` - `assertPreConditions()` - `assertPostConditions()` - `tearDown()` - `tearDownAfterClass()` - `onNotSuccessfulTest()` [1]: https://phpunit.de/announcements/phpunit-8.html * Shift cleanup * console routes * composer update * factories * phpunit * bootstrap pagination * model factory * wip * Apply fixes from StyleCI (#12236) * wip * Apply fixes from StyleCI (#12238) * wip * wip * wip * wip * Apply fixes from StyleCI (#12240) * wip * Apply fixes from StyleCI (#12242) * composer update * Bump to PHP 7.3 minimum Co-authored-by: Laravel Shift <shift@laravelshift.com>
113 lines
4.1 KiB
PHP
113 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace LibreNMS\Tests\Feature;
|
|
|
|
use App\Models\AlertSchedule;
|
|
use Carbon\Carbon;
|
|
use Carbon\CarbonImmutable;
|
|
use LibreNMS\Enum\AlertScheduleStatus;
|
|
use LibreNMS\Tests\DBTestCase;
|
|
|
|
class TestScheduledMaintenance extends DBTestCase
|
|
{
|
|
private $timezone;
|
|
|
|
public function testNormal()
|
|
{
|
|
$now = CarbonImmutable::now();
|
|
|
|
$schedule = AlertSchedule::factory()->make();
|
|
$schedule->start = $now->subHour();
|
|
$schedule->end = $now->addHour();
|
|
$schedule->save();
|
|
|
|
$this->setTimezone('UTC');
|
|
$this->assertScheduleActive($now, $schedule);
|
|
$this->assertScheduleLapsed($now->addHours(2), $schedule);
|
|
$this->assertScheduleLapsed($now->addDays(10), $schedule);
|
|
$this->assertScheduleSet($now->subHours(2), $schedule);
|
|
$this->assertScheduleSet($now->subDays(10), $schedule);
|
|
|
|
$this->setTimezone('America/New_York');
|
|
$schedule = $schedule->fresh();
|
|
$this->assertScheduleActive($now, $schedule);
|
|
$this->assertScheduleLapsed($now->addHours(2), $schedule);
|
|
$this->assertScheduleSet($now->subHours(2), $schedule);
|
|
}
|
|
|
|
public function testRecurringNormal()
|
|
{
|
|
$this->setTimezone('America/New_York');
|
|
$schedule = AlertSchedule::factory()->recurring()->make();
|
|
$schedule->recurring_day = '1,2,3,4,5';
|
|
$schedule->start = Carbon::parse('2020-09-10 2:00');
|
|
$schedule->end = Carbon::parse('9000-09-09 20:00');
|
|
$schedule->save();
|
|
|
|
$this->assertScheduleActive(Carbon::parse('2020-09-10 2:01'), $schedule);
|
|
$this->assertScheduleActive(Carbon::parse('2020-09-10 2:00'), $schedule);
|
|
$this->assertScheduleSet(Carbon::parse('2020-09-10 1:59'), $schedule);
|
|
$this->assertScheduleActive(Carbon::parse('2020-09-10 19:59'), $schedule);
|
|
// $this->assertScheduleSet(Carbon::parse('2020-09-10 20:01'), $schedule); // FIXME broken since end is 1am UTC
|
|
// $this->assertScheduleSet(Carbon::parse('2020-09-11 01:00'), $schedule);
|
|
$this->assertScheduleActive(Carbon::parse('2020-09-11 11:00'), $schedule);
|
|
$this->assertScheduleSet(Carbon::parse('2020-09-12 11:00'), $schedule);
|
|
$this->assertScheduleActive(Carbon::parse('2020-09-14 10:00'), $schedule);
|
|
|
|
$this->assertScheduleLapsed(Carbon::parse('9999-09-09 20:00'), $schedule);
|
|
}
|
|
|
|
private function assertScheduleActive($time, $schedule)
|
|
{
|
|
$this->setTestNow($time);
|
|
$this->assertEquals(AlertScheduleStatus::ACTIVE, $schedule->status, "$schedule is not active at $time (code)");
|
|
$this->assertTrue(AlertSchedule::where('schedule_id', $schedule->schedule_id)->isActive()->exists(), "$schedule is not active at $time (sql)");
|
|
}
|
|
|
|
private function assertScheduleSet($time, $schedule)
|
|
{
|
|
$this->setTestNow($time);
|
|
$this->assertEquals(AlertScheduleStatus::SET, $schedule->status, "$schedule is not set at $time (code)");
|
|
$this->assertFalse(AlertSchedule::where('schedule_id', $schedule->schedule_id)->isActive()->exists(), "$schedule is not set at $time (sql)");
|
|
}
|
|
|
|
private function assertScheduleLapsed($time, $schedule)
|
|
{
|
|
$this->setTestNow($time);
|
|
$this->assertEquals(AlertScheduleStatus::LAPSED, $schedule->status, "$schedule is not lapsed at $time (code)");
|
|
$this->assertFalse(AlertSchedule::where('schedule_id', $schedule->schedule_id)->isActive()->exists(), "$schedule is not lapsed at $time (sql)");
|
|
}
|
|
|
|
/**
|
|
* Set the test time
|
|
*
|
|
* @param Carbon|CarbonImmutable $time
|
|
*/
|
|
private function setTestNow($time)
|
|
{
|
|
Carbon::setTestNow($time);
|
|
CarbonImmutable::setTestNow($time);
|
|
}
|
|
|
|
private function setTimezone($timezone)
|
|
{
|
|
config(['app.timezone' => $timezone]);
|
|
date_default_timezone_set($timezone);
|
|
}
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
$this->timezone = config('app.timezone'); //save timezone
|
|
}
|
|
|
|
protected function tearDown(): void
|
|
{
|
|
// revert temp time and timezone
|
|
$this->setTimezone($this->timezone);
|
|
Carbon::setTestNow();
|
|
CarbonImmutable::setTestNow();
|
|
parent::tearDown();
|
|
}
|
|
}
|