public function testUserWasLastToEdit()
 {
     $user1 = User::newFromName("WikiPageEntityStoreTestUserWasLastToEdit1");
     $user2 = User::newFromName("WikiPageEntityStoreTestUserWasLastToEdit2");
     // initial revision
     $item = new Item(new ItemId('Q42'));
     $item->setLabel('en', 'one');
     $rev1 = $this->repo->saveEntity($item, 'testing 1', $user1, EDIT_NEW);
     $itemId = $item->getId();
     $this->assertTrue($this->repo->userWasLastToEdit($user1, $itemId, $rev1->getRevisionId()), 'user was first and last to edit');
     $this->assertFalse($this->repo->userWasLastToEdit($user2, $itemId, $rev1->getRevisionId()), 'user has not edited yet');
     // second edit by another user
     $item = new Item(new ItemId('Q42'));
     $item->setLabel('en', 'two');
     $rev2 = $this->repo->saveEntity($item, 'testing 2', $user2, EDIT_UPDATE);
     $this->assertFalse($this->repo->userWasLastToEdit($user1, $itemId, $rev1->getRevisionId()), 'original user was no longer last to edit');
     $this->assertTrue($this->repo->userWasLastToEdit($user2, $itemId, $rev2->getRevisionId()), 'second user has just edited');
     // subsequent edit by the original user
     $item = new Item(new ItemId('Q42'));
     $item->setLabel('en', 'three');
     $rev3 = $this->repo->saveEntity($item, 'testing 3', $user1, EDIT_UPDATE);
     $this->assertFalse($this->repo->userWasLastToEdit($user1, $itemId, $rev1->getRevisionId()), 'another user had edited at some point');
     $this->assertTrue($this->repo->userWasLastToEdit($user1, $itemId, $rev3->getRevisionId()), 'original user was last to edit');
     $this->assertFalse($this->repo->userWasLastToEdit($user2, $itemId, $rev2->getRevisionId()), 'other user was no longer last to edit');
 }
 /**
  * @dataProvider runProvider
  *
  * @param bool $expected
  * @param bool $titleExists
  * @param string $oldTitle
  */
 public function testRun($expected, $titleExists, $oldTitle)
 {
     $item = new Item();
     $item->getSiteLinkList()->addNewSiteLink('enwiki', 'Delete me', array(new ItemId('Q42')));
     $mockRepository = new MockRepository();
     $user = User::newFromName('UpdateRepo');
     // Needed as UpdateRepoOnDeleteJob instantiates a User object
     $user->addToDatabase();
     $mockRepository->saveEntity($item, 'UpdateRepoOnDeleteJobTest', $user, EDIT_NEW);
     $params = array('siteId' => 'enwiki', 'entityId' => $item->getId()->getSerialization(), 'title' => $oldTitle, 'user' => $user->getName());
     $job = new UpdateRepoOnDeleteJob(Title::newMainPage(), $params);
     $job->initServices($mockRepository, $mockRepository, $this->getSummaryFormatter(), $this->getSiteStore($titleExists), new EditEntityFactory($this->getEntityTitleLookup($item->getId()), $mockRepository, $mockRepository, $this->getEntityPermissionChecker(), $this->getMockEditFitlerHookRunner()));
     $job->run();
     $item = $mockRepository->getEntity($item->getId());
     $this->assertSame(!$expected, $item->getSiteLinkList()->hasLinkWithSiteId('enwiki'), 'Sitelink has been removed.');
 }
 /**
  * @dataProvider runProvider
  * @param string $expected
  * @param string $normalizedPageName
  * @param string $oldTitle
  */
 public function testRun($expected, $normalizedPageName, $oldTitle)
 {
     $user = User::newFromName('UpdateRepo');
     // Needed as UpdateRepoOnMoveJob instantiates a User object
     $user->addToDatabase();
     $item = new Item();
     $item->getSiteLinkList()->addNewSiteLink('enwiki', 'Old page name', array(new ItemId('Q42')));
     $mockRepository = new MockRepository();
     $mockRepository->saveEntity($item, 'UpdateRepoOnDeleteJobTest', $user, EDIT_NEW);
     $params = array('siteId' => 'enwiki', 'entityId' => $item->getId()->getSerialization(), 'oldTitle' => $oldTitle, 'newTitle' => 'New page name', 'user' => $user->getName());
     $job = new UpdateRepoOnMoveJob(Title::newMainPage(), $params);
     $job->initServices($mockRepository, $mockRepository, $this->getSummaryFormatter(), $this->getSiteStore($normalizedPageName), new EditEntityFactory($this->getEntityTitleLookup($item->getId()), $mockRepository, $mockRepository, $this->getEntityPermissionChecker(), $this->getMockEditFitlerHookRunner()));
     $job->run();
     /** @var Item $item */
     $item = $mockRepository->getEntity($item->getId());
     $this->assertSame($expected, $item->getSiteLinkList()->getBySiteId('enwiki')->getPageName(), 'Title linked on enwiki after the job ran');
     $this->assertEquals($item->getSiteLinkList()->getBySiteId('enwiki')->getBadges(), array(new ItemId('Q42')));
 }