Squashed 'libraries/action-scheduler/' content from commit a95f351
git-subtree-dir: libraries/action-scheduler git-subtree-split: a95f351058eada5e5281faa22e5a40865542e839
This commit is contained in:
95
tests/phpunit/migration/Runner_Test.php
Normal file
95
tests/phpunit/migration/Runner_Test.php
Normal file
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
|
||||
|
||||
use Action_Scheduler\Migration\Config;
|
||||
use Action_Scheduler\Migration\Runner;
|
||||
use ActionScheduler_wpCommentLogger as CommentLogger;
|
||||
use ActionScheduler_wpPostStore as PostStore;
|
||||
|
||||
/**
|
||||
* Class Runner_Test
|
||||
* @group migration
|
||||
*/
|
||||
class Runner_Test extends ActionScheduler_UnitTestCase {
|
||||
public function setUp(): void {
|
||||
parent::setUp();
|
||||
if ( ! taxonomy_exists( PostStore::GROUP_TAXONOMY ) ) {
|
||||
// register the post type and taxonomy necessary for the store to work.
|
||||
$store = new PostStore();
|
||||
$store->init();
|
||||
}
|
||||
}
|
||||
|
||||
public function test_migrate_batches() {
|
||||
$source_store = new PostStore();
|
||||
$destination_store = new ActionScheduler_DBStore();
|
||||
$source_logger = new CommentLogger();
|
||||
$destination_logger = new ActionScheduler_DBLogger();
|
||||
|
||||
$config = new Config();
|
||||
$config->set_source_store( $source_store );
|
||||
$config->set_source_logger( $source_logger );
|
||||
$config->set_destination_store( $destination_store );
|
||||
$config->set_destination_logger( $destination_logger );
|
||||
|
||||
$runner = new Runner( $config );
|
||||
|
||||
$due = array();
|
||||
$future = array();
|
||||
$complete = array();
|
||||
|
||||
for ( $i = 0; $i < 5; $i ++ ) {
|
||||
$time = as_get_datetime_object( $i + 1 . ' minutes' );
|
||||
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
||||
$action = new ActionScheduler_Action( ActionScheduler_Callbacks::HOOK_WITH_CALLBACK, array(), $schedule );
|
||||
$future[] = $source_store->save_action( $action );
|
||||
|
||||
$time = as_get_datetime_object( $i + 1 . ' minutes ago' );
|
||||
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
||||
$action = new ActionScheduler_Action( ActionScheduler_Callbacks::HOOK_WITH_CALLBACK, array(), $schedule );
|
||||
$due[] = $source_store->save_action( $action );
|
||||
|
||||
$time = as_get_datetime_object( $i + 1 . ' minutes ago' );
|
||||
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
||||
$action = new ActionScheduler_FinishedAction( ActionScheduler_Callbacks::HOOK_WITH_CALLBACK, array(), $schedule );
|
||||
$complete[] = $source_store->save_action( $action );
|
||||
}
|
||||
|
||||
$created = $source_store->query_actions( array( 'per_page' => 0 ) );
|
||||
$this->assertCount( 15, $created );
|
||||
|
||||
$runner->run( 10 );
|
||||
|
||||
$args = array(
|
||||
'per_page' => 0,
|
||||
'hook' => ActionScheduler_Callbacks::HOOK_WITH_CALLBACK,
|
||||
);
|
||||
|
||||
// due actions should migrate in the first batch.
|
||||
$migrated = $destination_store->query_actions( $args );
|
||||
$this->assertCount( 5, $migrated );
|
||||
|
||||
$remaining = $source_store->query_actions( $args );
|
||||
$this->assertCount( 10, $remaining );
|
||||
|
||||
$runner->run( 10 );
|
||||
|
||||
// pending actions should migrate in the second batch.
|
||||
$migrated = $destination_store->query_actions( $args );
|
||||
$this->assertCount( 10, $migrated );
|
||||
|
||||
$remaining = $source_store->query_actions( $args );
|
||||
$this->assertCount( 5, $remaining );
|
||||
|
||||
$runner->run( 10 );
|
||||
|
||||
// completed actions should migrate in the third batch.
|
||||
$migrated = $destination_store->query_actions( $args );
|
||||
$this->assertCount( 15, $migrated );
|
||||
|
||||
$remaining = $source_store->query_actions( $args );
|
||||
$this->assertCount( 0, $remaining );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user