<?php
/**
 * @group revisions
 */
class Tests_Revisions extends WP_UnitTestCase {

	 function setUp() {
		parent::setUp();

	}

	function tearDown() {
		parent::tearDown();
	}
	//function to get correctly stored user_ud if available (patch)
	protected function _get_revision_author( $revision ) {
	if ( ! $revision_author_id = get_post_meta( $revision->ID, '_edit_last', true ) ) { 
			$revision_author_id = $revision->post_author; 
		}
	return $revision_author_id;
	}
/**
 * bug 16215
 */
	function test_revision_user_correct() {
		$user_id_1 = $this->factory->user->create( array( 'role' => 'administrator', 'user_login' => 'user 1' ) );
		
		wp_set_current_user( $user_id_1 );
		$post = array( 'post_author' => $user_id_1, 'post_title' => 'revisions' );
		$post_id = wp_insert_post($post); 	//create a new post
		wp_publish_post( $post_id );		//and publish it
		wp_update_post( array( 'post_content'	=> 'revised by user_1', 'ID' => $post_id ) );	//update content

		$on_user = 0;
		$revisions = wp_get_post_revisions( $post_id );
		$expected_post_author_ids = $arrayName = array( $user_id_1, $user_id_1, ); //two revisions so far
		foreach ( $revisions as $revision ) {
			$this->assertEquals( $expected_post_author_ids[ $on_user++ ], $this->_get_revision_author( $revision ));
		}

		//second user revisions
		$user_id_2 = $this->factory->user->create( array( 'role' => 'administrator', 'user_login' => 'user 2'  ) );
		wp_set_current_user( $user_id_2 );
		wp_update_post( array( 'post_content'	=> 'revised by user_2', 'ID' => $post_id ) );
		$revisions = wp_get_post_revisions( $post_id );
		$expected_post_author_ids = $arrayName = array( $user_id_2, $user_id_1, $user_id_1,  ); //three revisions
		$on_user = 0;
		foreach ( $revisions as $revision ) {
			if ( wp_is_post_revision( $revision )&& !wp_is_post_autosave( $revision ) ) {
				$this->assertEquals( $expected_post_author_ids[ $on_user++ ], $this->_get_revision_author( $revision ));
			}
		}
		
		//third user revisions
		$user_id_3 = $this->factory->user->create( array( 'role' => 'administrator', 'user_login' => 'user 3'  ) );
		wp_set_current_user( $user_id_3 );
		wp_update_post( array( 'post_content'	=> 'revised by user_3', 'ID' => $post_id ) );
		//wp_save_post_revision( $post_id );
		$revisions = wp_get_post_revisions( $post_id );
		$expected_post_author_ids = $arrayName = array( $user_id_3, $user_id_2, $user_id_1, $user_id_1,  ); //four revisions
		$on_user = 0;
		foreach ( $revisions as $revision ) {
			if ( wp_is_post_revision( $revision )&& !wp_is_post_autosave( $revision ) ) {
				$this->assertEquals( $expected_post_author_ids[ $on_user++ ], $this->_get_revision_author( $revision ));
			}
		}
	}
}
