Skip to content

Commit

Permalink
[#510] - added test for deleting usermeta
Browse files Browse the repository at this point in the history
  • Loading branch information
octopuss committed Mar 10, 2016
1 parent 8aea1c4 commit 4ed0343
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 9 deletions.
4 changes: 2 additions & 2 deletions plugins/versionpress/src/Database/WpdbMirrorBridge.php
Expand Up @@ -301,15 +301,15 @@ private function processDeleteQuery($parsedQueryData, $entityInfo) {
if (!$entityInfo->usesGeneratedVpids) {
foreach ($parsedQueryData->ids as $id) {
$stringifiedId = "'" . $id . "'";
$where[$parsedQueryData->idColumnName] = $stringifiedId;
$where[$parsedQueryData->idColumnName] = $id;
$this->vpidRepository->deleteId($parsedQueryData->entityName, $stringifiedId);
$this->mirror->delete($parsedQueryData->entityName, $where);
}
return;
}
foreach ($parsedQueryData->ids as $id) {
$stringifiedId = "'" . $id . "'";
$where['vp_id'] = $this->vpidRepository->getVpidForEntity($parsedQueryData->entityName, $stringifiedId);
$where['vp_id'] = $this->vpidRepository->getVpidForEntity($parsedQueryData->entityName, $id);
if (!$where['vp_id']) {
continue; // already deleted - deleting postmeta is sometimes called twice
}
Expand Down
3 changes: 3 additions & 0 deletions plugins/versionpress/tests/End2End/Users/IUsersTestWorker.php
Expand Up @@ -28,6 +28,9 @@ public function deleteTwoUsers();

public function prepare_editTwoUsermeta();
public function editTwoUsermeta();

public function prepare_deleteUsermeta();
public function deleteUsermeta();

public function tearDownAfterClass();
}
19 changes: 19 additions & 0 deletions plugins/versionpress/tests/End2End/Users/UsersTest.php
Expand Up @@ -155,6 +155,25 @@ public function editingMultipleUsermetaCreatesBulkAction() {
DBAsserter::assertFilesEqualDatabase();
}

/**
* @test
* @testdox Deleting usermeta creates multiple usermeta creates 'usermeta/delete' action
*/
public function deletingUsermetaCreatesUsermetaDeleteAction() {
self::$worker->prepare_deleteUsermeta();

$commitAsserter = new CommitAsserter($this->gitRepository);

self::$worker->deleteUsermeta();

$commitAsserter->assertNumCommits(1);
$commitAsserter->assertCommitAction("usermeta/delete");
$commitAsserter->assertCommitTag("VP-User-Login", self::$testUser['login']);
$commitAsserter->assertCommitPath("M", "%vpdb%/users/%VPID(VP-User-Id)%.ini");
$commitAsserter->assertCleanWorkingDirectory();
DBAsserter::assertFilesEqualDatabase();
}

public static function tearDownAfterClass() {
parent::tearDownAfterClass();
self::$worker->tearDownAfterClass();
Expand Down
Expand Up @@ -135,6 +135,14 @@ public function editTwoUsermeta() {
$this->waitAfterRedirect();
}

public function prepare_deleteUsermeta() {
throw new \PHPUnit_Framework_SkippedTestError("There is no way to delete one usermeta directly in the GUI");
}

public function deleteUsermeta() {
}


public function tearDownAfterClass() {
$users = json_decode(self::$wpAutomation->runWpCliCommand('user', 'list', array('format' => 'json')));
$userLogins = array_map(function ($user) { return $user->user_login; }, $users);
Expand Down
Expand Up @@ -49,6 +49,14 @@ public function editUsermeta() {
$this->wpAutomation->runWpCliCommand('user', 'meta', array('update', $this->userId, 'first_name', $this->originalFirstName));
}

function prepare_deleteUsermeta() {
$this->createUser();
}

public function deleteUsermeta() {
$this->wpAutomation->runWpCliCommand('user', 'meta', array('delete', $this->userId, 'last_name'));
}

public function prepare_deleteUser() {
}

Expand Down
7 changes: 0 additions & 7 deletions plugins/versionpress/versionpress.php
Expand Up @@ -232,13 +232,6 @@ function vp_register_hooks() {
});


add_action('delete_user_meta', function ($metaIds) use ($wpdbMirrorBridge, $dbSchemaInfo) {
$idColumnName = $dbSchemaInfo->getEntityInfo("usermeta")->idColumnName;
foreach ($metaIds as $metaId) {
$wpdbMirrorBridge->delete($dbSchemaInfo->getPrefixedTableName("usermeta"), array($idColumnName => $metaId));
}
});

add_action('wp_ajax_save-widget', function () use ($committer) {
if (defined('DOING_AJAX') && DOING_AJAX && isset($_POST['delete_widget']) && $_POST['delete_widget']) {
$committer->postponeCommit('widgets');
Expand Down

0 comments on commit 4ed0343

Please sign in to comment.