partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

commit 9efaedf8a56285993cd42deb9b64defd3fbaa013
parent 6157592681bc88ba1b6c3ebf464d5d889c32a523
Author: Felicitus <felicitus@felicitus.org>
Date:   Tue,  8 Mar 2016 16:16:02 +0100

Merge remote-tracking branch 'origin/master'

Diffstat:
Msrc/PartKeepr/AuthBundle/Action/DeleteUserAction.php | 17++++++++++++++---
Msrc/PartKeepr/AuthBundle/Resources/config/actions.xml | 1+
Msrc/PartKeepr/AuthBundle/Services/UserPreferenceService.php | 15+++++++++++++++
Msrc/PartKeepr/AuthBundle/Tests/UserTest.php | 41+++++++++++++++++++++++++++++++++++++++--
4 files changed, 69 insertions(+), 5 deletions(-)

diff --git a/src/PartKeepr/AuthBundle/Action/DeleteUserAction.php b/src/PartKeepr/AuthBundle/Action/DeleteUserAction.php @@ -6,6 +6,7 @@ use Dunglas\ApiBundle\Exception\RuntimeException; use Dunglas\ApiBundle\Model\DataProviderInterface; use PartKeepr\AuthBundle\Entity\User; use PartKeepr\AuthBundle\Exceptions\UserProtectedException; +use PartKeepr\AuthBundle\Services\UserPreferenceService; use PartKeepr\AuthBundle\Services\UserService; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -27,16 +28,25 @@ class DeleteUserAction */ private $userService; - public function __construct(DataProviderInterface $dataProvider, UserService $userService) - { + /** + * @var UserPreferenceService + */ + private $userPreferenceService; + + public function __construct( + DataProviderInterface $dataProvider, + UserService $userService, + UserPreferenceService $userPreferenceService + ) { $this->dataProvider = $dataProvider; $this->userService = $userService; + $this->userPreferenceService = $userPreferenceService; } /** * Returns an item to delete. * - * @param Request $request + * @param Request $request * @param string|int $id * * @return mixed @@ -59,6 +69,7 @@ class DeleteUserAction } $this->userService->deleteFOSUser($item); + $this->userPreferenceService->deletePreferences($item); return $item; diff --git a/src/PartKeepr/AuthBundle/Resources/config/actions.xml b/src/PartKeepr/AuthBundle/Resources/config/actions.xml @@ -34,6 +34,7 @@ <service id="partkeepr.user.delete" class="PartKeepr\AuthBundle\Action\DeleteUserAction"> <argument type="service" id="api.data_provider"/> <argument type="service" id="partkeepr.userservice"/> + <argument type="service" id="partkeepr.user_preference_service"/> </service> <service id="partkeepr.auth.login" class="PartKeepr\AuthBundle\Action\LoginAction"> <argument type="service" id="partkeepr.userservice"/> diff --git a/src/PartKeepr/AuthBundle/Services/UserPreferenceService.php b/src/PartKeepr/AuthBundle/Services/UserPreferenceService.php @@ -132,4 +132,19 @@ class UserPreferenceService $query->execute(); } + /** + * Removes all preferences for specific user. This is usually used when removing the user. + * + * @param \PartKeepr\AuthBundle\Entity\User $user The user to delete the preference for + */ + public function deletePreferences(User $user) + { + $dql = "DELETE FROM PartKeepr\AuthBundle\Entity\UserPreference up WHERE up.user = :user"; + + $query = $this->entityManager->createQuery($dql); + $query->setParameter("user", $user); + + $query->execute(); + } + } diff --git a/src/PartKeepr/AuthBundle/Tests/UserTest.php b/src/PartKeepr/AuthBundle/Tests/UserTest.php @@ -157,8 +157,8 @@ class UserTest extends WebTestCase $iri = $iriConverter->getIriFromItem($user); $data = [ - "username" => "foo" - ]; + "username" => "foo", + ]; $client->request("PUT", $iri, array(), array(), array(), json_encode($data)); $response = json_decode($client->getResponse()->getContent()); @@ -194,4 +194,41 @@ class UserTest extends WebTestCase $this->assertFalse($user->isProtected()); } + + /** + * Tests the proper user deletion if user preferences exist. + * + * Unit test for Bug #569 + * + * @see https://github.com/partkeepr/PartKeepr/issues/569 + */ + public function testUserWithPreferencesDeletion() + { + $client = static::makeClient(true); + + $data = array( + "username" => "preferenceuser", + "newPassword" => "1234", + ); + + $client->request("POST", "/api/users", array(), array(), array(), json_encode($data)); + + $userPreferenceService = $this->getContainer()->get("partkeepr.user_preference_service"); + $userService = $this->getContainer()->get("partkeepr.userservice"); + + /** + * @var User $user + */ + $user = $userService->getProxyUser("preferenceuser", $userService->getBuiltinProvider(), true); + + $userPreferenceService->setPreference($user, "foo", "bar"); + + $iriConverter = $this->getContainer()->get("api.iri_converter"); + $iri = $iriConverter->getIriFromItem($user); + + $client->request("DELETE", $iri); + + $this->assertEquals(204, $client->getResponse()->getStatusCode()); + $this->assertEmpty($client->getResponse()->getContent()); + } }