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 ); } }