Skip to content
Open
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
783a80a
test for wp_schedule_delete_old_privacy_export_files
pbearne Oct 23, 2023
a96a99b
Update tests/phpunit/tests/functions/wpScheduleDeleteOldPrivacyExport…
pbearne Jun 23, 2026
8d272cf
Merge branch 'trunk' into 59707_wp_schedule_delete_old_privacy_export…
pbearne Jun 23, 2026
fae0625
Add tear_down method to reset wp_installing state in wpScheduleDelete…
Jun 23, 2026
aa41786
Fix comment wording in test for scheduling function
pbearne Jun 23, 2026
2954bb1
Update tests/phpunit/tests/functions/wpScheduleDeleteOldPrivacyExport…
pbearne Jul 16, 2026
fad85e6
Update tests/phpunit/tests/functions/wpScheduleDeleteOldPrivacyExport…
pbearne Jul 16, 2026
cad3d64
Update tests/phpunit/tests/functions/wpScheduleDeleteOldPrivacyExport…
pbearne Jul 16, 2026
bc4a463
Merge branch 'trunk' into 59707_wp_schedule_delete_old_privacy_export…
pbearne Jul 16, 2026
65573a0
Refactor test for scheduling privacy export files
pbearne Jul 16, 2026
d7b8316
Merge branch 'trunk' into 59707_wp_schedule_delete_old_privacy_export…
pbearne Jul 16, 2026
00a70ad
Merge branch 'trunk' into 59707_wp_schedule_delete_old_privacy_export…
t-hamano Jul 28, 2026
c1401c4
Apply suggestions from code review
pbearne Aug 4, 2026
aab5e7b
Merge branch 'trunk' into 59707_wp_schedule_delete_old_privacy_export…
pbearne Aug 4, 2026
2febc80
Merge branch 'trunk' into 59707_wp_schedule_delete_old_privacy_export…
pbearne Aug 4, 2026
b6b0348
Merge branch 'trunk' into 59707_wp_schedule_delete_old_privacy_export…
pbearne Aug 4, 2026
a95d4da
Merge branch 'trunk' into 59707_wp_schedule_delete_old_privacy_export…
t-hamano Aug 5, 2026
c01042a
Merge branch 'trunk' into 59707_wp_schedule_delete_old_privacy_export…
pbearne Aug 5, 2026
83e9540
Improve assertions and restore wp_installing state in wpScheduleDelet…
Aug 5, 2026
259c39c
Merge branch 'trunk' into 59707_wp_schedule_delete_old_privacy_export…
t-hamano Aug 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<?php

/**
* Tests for the wp_schedule_delete_old_privacy_export_files() function.
*
* @group functions
*
* @covers ::wp_schedule_delete_old_privacy_export_files
*/
class Tests_Functions_wpScheduleDeleteOldPrivacyExportFiles extends WP_UnitTestCase {

/**
* Setup test
*/
public function set_up() {
parent::set_up();
wp_clear_scheduled_hook( 'wp_privacy_delete_old_export_files' );
}

public function tear_down() {
wp_clear_scheduled_hook( 'wp_privacy_delete_old_export_files' );

parent::tear_down();
}

/**
* check that a schedule is set
*
* @ticket 59707
*/
public function test_wp_schedule_delete_old_privacy_export_files() {

Comment thread
pbearne marked this conversation as resolved.
$this->assertFalse( wp_next_scheduled( 'wp_privacy_delete_old_export_files' ), 'no export should be scheduled' );
wp_schedule_delete_old_privacy_export_files();
$this->assertIsInt( wp_next_scheduled( 'wp_privacy_delete_old_export_files' ), 'export should be scheduled' );
}

/**
* check that no schedule is set when WP is in installing mode
*
* @ticket 59707
*/
public function test_wp_schedule_delete_old_privacy_export_files_is_installing() {
// set to installing mode
$prior = wp_installing();
wp_installing( true );

$this->assertFalse( wp_next_scheduled( 'wp_privacy_delete_old_export_files' ), 'no export should be scheduled' );
wp_schedule_delete_old_privacy_export_files();
$this->assertFalse( wp_next_scheduled( 'wp_privacy_delete_old_export_files' ), 'export should be scheduled' );

wp_installing( $prior );
Comment on lines +44 to +52

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// set to installing mode
$prior = wp_installing();
wp_installing( true );
$this->assertFalse( wp_next_scheduled( 'wp_privacy_delete_old_export_files' ), 'no export should be scheduled' );
wp_schedule_delete_old_privacy_export_files();
$this->assertFalse( wp_next_scheduled( 'wp_privacy_delete_old_export_files' ), 'export should be scheduled' );
wp_installing( $prior );
$this->assertFalse( wp_next_scheduled( 'wp_privacy_delete_old_export_files' ), 'no export should be scheduled' );
// set to installing mode
$prior = wp_installing();
wp_installing( true );
wp_schedule_delete_old_privacy_export_files();
wp_installing( $prior );
$this->assertFalse( wp_next_scheduled( 'wp_privacy_delete_old_export_files' ), 'no export should be scheduled while installing' );

Since the installing mode restoration occurs after the assertion, if the assertion fails, the installing mode is not restored, which affects subsequent tests. I believe we need to be careful about the order to ensure that the installing mode is always restored regardless of whether the assertion succeeds or fails.

Also, please note that the message has been changed from export should be scheduled to no export should be scheduled while installing. The previous message indicated the opposite of the assertion.

}

/**
* Check that calling the function when already scheduled does not create a duplicate.
*
* @ticket 59707
*/
public function test_wp_schedule_delete_old_privacy_export_files_already_scheduled() {
wp_schedule_delete_old_privacy_export_files();
$first = wp_next_scheduled( 'wp_privacy_delete_old_export_files' );

wp_schedule_delete_old_privacy_export_files();
$this->assertSame( $first, wp_next_scheduled( 'wp_privacy_delete_old_export_files' ) );
Comment on lines +61 to +65

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
wp_schedule_delete_old_privacy_export_files();
$first = wp_next_scheduled( 'wp_privacy_delete_old_export_files' );
wp_schedule_delete_old_privacy_export_files();
$this->assertSame( $first, wp_next_scheduled( 'wp_privacy_delete_old_export_files' ) );
// Schedule ahead of time() so that a duplicate would land on a different timestamp.
wp_schedule_event( strtotime( '+1 hour' ), 'hourly', 'wp_privacy_delete_old_export_files' );
// Take a snapshot of the cron option while the event is scheduled.
$expected = _get_cron_array();
// The event is already scheduled, so this call should be a no-op.
wp_schedule_delete_old_privacy_export_files();
// Check cron option is unchanged.
$this->assertSame( $expected, _get_cron_array(), 'the event should not be scheduled again' );

This assertion doesn't currently catch a regression — removing the ! wp_next_scheduled() guard leaves this test green. Two reasons:

  1. wp_schedule_event() stores events as $crons[ $timestamp ][ $hook ][ md5( serialize( $args ) ) ]. This function always schedules with no args, so both calls collide on all three keys when they happen within the same second — the second one silently overwrites the first, and no duplicate is ever observable.
  2. Even if the two calls land on different seconds, wp_next_scheduled() only returns the soonest timestamp, so it still returns $first and the assertion passes.

Seeding the event at a timestamp other than time() and comparing the whole cron option would cover both cases:

This follows the same pattern as test_pre_schedule_event_filter().

}
}
Comment thread
pbearne marked this conversation as resolved.
Loading