Fixed frontend behavior after edited user name

This commit is contained in:
Marcin Kurczewski 2014-09-10 19:19:30 +02:00
parent cb08f68469
commit 6ce7beffd2
4 changed files with 32 additions and 5 deletions

View file

@ -100,8 +100,8 @@ App.Auth = function(_, jQuery, util, api, appState, promise) {
function updateAppState(response) { function updateAppState(response) {
appState.set('privileges', response.json.privileges || []); appState.set('privileges', response.json.privileges || []);
appState.set('loginToken', response.json.token && response.json.token.name); appState.set('loginToken', response.json.token && response.json.token.name);
appState.set('loggedInUser', response.json.user);
appState.set('loggedIn', response.json.user && !!response.json.user.id); appState.set('loggedIn', response.json.user && !!response.json.user.id);
appState.set('loggedInUser', response.json.user);
} }
function isLoggedIn(userName) { function isLoggedIn(userName) {
@ -124,12 +124,19 @@ App.Auth = function(_, jQuery, util, api, appState, promise) {
return appState.get('privileges'); return appState.get('privileges');
} }
function updateCurrentUser(user) {
if (user.id !== getCurrentUser().id) {
throw new Error('Cannot set current user to other user this way.');
}
appState.set('loggedInUser', user);
}
function hasPrivilege(privilege) { function hasPrivilege(privilege) {
return _.contains(getCurrentPrivileges(), privilege); return _.contains(getCurrentPrivileges(), privilege);
} }
function startObservingLoginChanges(listenerName, callback) { function startObservingLoginChanges(listenerName, callback) {
appState.startObserving('loggedIn', listenerName, callback); appState.startObserving('loggedInUser', listenerName, callback);
} }
return { return {
@ -142,6 +149,7 @@ App.Auth = function(_, jQuery, util, api, appState, promise) {
startObservingLoginChanges: startObservingLoginChanges, startObservingLoginChanges: startObservingLoginChanges,
isLoggedIn: isLoggedIn, isLoggedIn: isLoggedIn,
getCurrentUser: getCurrentUser, getCurrentUser: getCurrentUser,
updateCurrentUser: updateCurrentUser,
getCurrentPrivileges: getCurrentPrivileges, getCurrentPrivileges: getCurrentPrivileges,
hasPrivilege: hasPrivilege, hasPrivilege: hasPrivilege,

View file

@ -127,8 +127,14 @@ App.Presenters.UserAccountSettingsPresenter = function(
} }
function editSuccess(apiResponse) { function editSuccess(apiResponse) {
var wasLoggedIn = auth.isLoggedIn(user.name);
user = apiResponse.json; user = apiResponse.json;
if (wasLoggedIn) {
auth.updateCurrentUser(user);
}
render(); render();
var $messages = jQuery(target).find('.messages'); var $messages = jQuery(target).find('.messages');
var message = 'Account settings updated!'; var message = 'Account settings updated!';
if (!apiResponse.json.confirmed) { if (!apiResponse.json.confirmed) {

View file

@ -58,7 +58,7 @@ class PrivilegeService
$loggedInUser = $this->authService->getLoggedInUser(); $loggedInUser = $this->authService->getLoggedInUser();
if ($userIdentifier instanceof \Szurubooru\Entities\User) if ($userIdentifier instanceof \Szurubooru\Entities\User)
{ {
return $loggedInUser->name === $userIdentifier->name; return $loggedInUser->id and ($loggedInUser->id === $userIdentifier->id);
} }
elseif (is_string($userIdentifier)) elseif (is_string($userIdentifier))
{ {

View file

@ -56,7 +56,20 @@ class PrivilegeServiceTest extends \Szurubooru\Tests\AbstractTestCase
$this->assertFalse($privilegeService->isLoggedIn($testUser2->email)); $this->assertFalse($privilegeService->isLoggedIn($testUser2->email));
} }
public function testIsLoggedInByUser() public function testIsLoggedInByUserId()
{
$testUser1 = new \Szurubooru\Entities\User();
$testUser1->id = 'dummy';
$testUser2 = new \Szurubooru\Entities\User();
$testUser2->id = 'godzilla';
$this->authServiceMock->method('getLoggedInUser')->willReturn($testUser1);
$privilegeService = $this->getPrivilegeService();
$this->assertTrue($privilegeService->isLoggedIn($testUser1));
$this->assertFalse($privilegeService->isLoggedIn($testUser2));
}
public function testIsLoggedInByUserName()
{ {
$testUser1 = new \Szurubooru\Entities\User(); $testUser1 = new \Szurubooru\Entities\User();
$testUser1->name = 'dummy'; $testUser1->name = 'dummy';
@ -65,7 +78,7 @@ class PrivilegeServiceTest extends \Szurubooru\Tests\AbstractTestCase
$this->authServiceMock->method('getLoggedInUser')->willReturn($testUser1); $this->authServiceMock->method('getLoggedInUser')->willReturn($testUser1);
$privilegeService = $this->getPrivilegeService(); $privilegeService = $this->getPrivilegeService();
$this->assertTrue($privilegeService->isLoggedIn($testUser1)); $this->assertFalse($privilegeService->isLoggedIn($testUser1));
$this->assertFalse($privilegeService->isLoggedIn($testUser2)); $this->assertFalse($privilegeService->isLoggedIn($testUser2));
} }