diff --git a/__tests__/unit-tests/test-event.php b/__tests__/unit-tests/test-event.php index 7215e28..aabfe38 100644 --- a/__tests__/unit-tests/test-event.php +++ b/__tests__/unit-tests/test-event.php @@ -73,6 +73,32 @@ public function test_reschedule() { $this->assertEqualsWithDelta( time() + HOUR_IN_SECONDS, $event->get_timestamp(), 1 ); } + public function test_reschedule_updates_interval_when_schedule_changes() { + $event = new Event(); + $event->set_action( 'test_reschedule_interval' ); + $event->set_timestamp( time() ); + $event->set_schedule( 'test_cron_control_interval', HOUR_IN_SECONDS ); + $event->save(); + + $filter = function ( $schedules ) { + $schedules['test_cron_control_interval'] = [ + 'interval' => 2 * HOUR_IN_SECONDS, + 'display' => 'Cron Control test interval', + ]; + return $schedules; + }; + add_filter( 'cron_schedules', $filter ); + + $result = $event->reschedule(); + + remove_filter( 'cron_schedules', $filter ); + $reloaded_event = Event::get( $event->get_id() ); + $this->assertTrue( $result, 'event was successfully rescheduled' ); + $this->assertInstanceOf( Event::class, $reloaded_event ); + $this->assertEquals( 2 * HOUR_IN_SECONDS, $reloaded_event->get_interval(), 'the refreshed interval was saved' ); + $this->assertEqualsWithDelta( time() + ( 2 * HOUR_IN_SECONDS ), $reloaded_event->get_timestamp(), 1 ); + } + public function test_exists() { $event = new Event(); $event->set_action( 'test_exists' ); diff --git a/includes/class-event.php b/includes/class-event.php index 2411b54..16f8b04 100644 --- a/includes/class-event.php +++ b/includes/class-event.php @@ -203,7 +203,7 @@ public function reschedule() { $next_timestamp = $this->calculate_next_timestamp( $fresh_interval ); if ( $this->interval !== $fresh_interval ) { - $this->set_schedule( $this->schedule, $this->interval ); + $this->set_schedule( $this->schedule, $fresh_interval ); } $this->set_timestamp( $next_timestamp );