diff options
-rw-r--r-- | apps/dav/lib/hookmanager.php | 3 | ||||
-rw-r--r-- | apps/dav/tests/unit/dav/HookManagerTest.php | 81 | ||||
-rw-r--r-- | core/js/js.js | 3 | ||||
-rw-r--r-- | core/js/tests/specs/coreSpec.js | 18 | ||||
-rw-r--r-- | lib/private/files/filesystem.php | 3 | ||||
-rw-r--r-- | tests/lib/files/filesystem.php | 22 |
6 files changed, 125 insertions, 5 deletions
diff --git a/apps/dav/lib/hookmanager.php b/apps/dav/lib/hookmanager.php index 687e6718db3..aa3777088f8 100644 --- a/apps/dav/lib/hookmanager.php +++ b/apps/dav/lib/hookmanager.php @@ -20,6 +20,7 @@ */ namespace OCA\DAV; +use OCA\DAV\CalDAV\BirthdayService; use OCA\DAV\CalDAV\CalDavBackend; use OCA\DAV\CardDAV\CardDavBackend; use OCA\DAV\CardDAV\SyncService; @@ -103,7 +104,7 @@ class HookManager { if (!is_null($user)) { $principal = 'principals/users/' . $user->getUID(); $calendars = $this->calDav->getCalendarsForUser($principal); - if (empty($calendars)) { + if (empty($calendars) || (count($calendars) === 1 && $calendars[0]['uri'] === BirthdayService::BIRTHDAY_CALENDAR_URI)) { try { $this->calDav->createCalendar($principal, 'personal', [ '{DAV:}displayname' => 'Personal']); diff --git a/apps/dav/tests/unit/dav/HookManagerTest.php b/apps/dav/tests/unit/dav/HookManagerTest.php index bec4c240ce8..5c36d0d785c 100644 --- a/apps/dav/tests/unit/dav/HookManagerTest.php +++ b/apps/dav/tests/unit/dav/HookManagerTest.php @@ -22,6 +22,7 @@ namespace OCA\DAV\Tests\Unit\DAV; +use OCA\DAV\CalDAV\BirthdayService; use OCA\DAV\CalDAV\CalDavBackend; use OCA\DAV\CardDAV\CardDavBackend; use OCA\DAV\CardDAV\SyncService; @@ -68,4 +69,84 @@ class HookManagerTest extends TestCase { $hm = new HookManager($userManager, $syncService, $cal, $card); $hm->postLogin(['uid' => 'newUser']); } + + public function testWithExisting() { + $user = $this->getMockBuilder('\OCP\IUser') + ->disableOriginalConstructor() + ->getMock(); + $user->expects($this->once())->method('getUID')->willReturn('newUser'); + + /** @var IUserManager | \PHPUnit_Framework_MockObject_MockObject $userManager */ + $userManager = $this->getMockBuilder('\OCP\IUserManager') + ->disableOriginalConstructor() + ->getMock(); + $userManager->expects($this->once())->method('get')->willReturn($user); + + /** @var SyncService | \PHPUnit_Framework_MockObject_MockObject $syncService */ + $syncService = $this->getMockBuilder('OCA\DAV\CardDAV\SyncService') + ->disableOriginalConstructor() + ->getMock(); + + /** @var CalDavBackend | \PHPUnit_Framework_MockObject_MockObject $cal */ + $cal = $this->getMockBuilder('OCA\DAV\CalDAV\CalDavBackend') + ->disableOriginalConstructor() + ->getMock(); + $cal->expects($this->once())->method('getCalendarsForUser')->willReturn([ + ['uri' => 'my-events'] + ]); + $cal->expects($this->never())->method('createCalendar'); + + /** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject $card */ + $card = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend') + ->disableOriginalConstructor() + ->getMock(); + $card->expects($this->once())->method('getAddressBooksForUser')->willReturn([ + ['uri' => 'my-contacts'] + ]); + $card->expects($this->never())->method('createAddressBook'); + + $hm = new HookManager($userManager, $syncService, $cal, $card); + $hm->postLogin(['uid' => 'newUser']); + } + + public function testWithBirthdayCalendar() { + $user = $this->getMockBuilder('\OCP\IUser') + ->disableOriginalConstructor() + ->getMock(); + $user->expects($this->once())->method('getUID')->willReturn('newUser'); + + /** @var IUserManager | \PHPUnit_Framework_MockObject_MockObject $userManager */ + $userManager = $this->getMockBuilder('\OCP\IUserManager') + ->disableOriginalConstructor() + ->getMock(); + $userManager->expects($this->once())->method('get')->willReturn($user); + + /** @var SyncService | \PHPUnit_Framework_MockObject_MockObject $syncService */ + $syncService = $this->getMockBuilder('OCA\DAV\CardDAV\SyncService') + ->disableOriginalConstructor() + ->getMock(); + + /** @var CalDavBackend | \PHPUnit_Framework_MockObject_MockObject $cal */ + $cal = $this->getMockBuilder('OCA\DAV\CalDAV\CalDavBackend') + ->disableOriginalConstructor() + ->getMock(); + $cal->expects($this->once())->method('getCalendarsForUser')->willReturn([ + ['uri' => BirthdayService::BIRTHDAY_CALENDAR_URI] + ]); + $cal->expects($this->once())->method('createCalendar')->with( + 'principals/users/newUser', + 'personal', ['{DAV:}displayname' => 'Personal']); + + /** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject $card */ + $card = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend') + ->disableOriginalConstructor() + ->getMock(); + $card->expects($this->once())->method('getAddressBooksForUser')->willReturn([]); + $card->expects($this->once())->method('createAddressBook')->with( + 'principals/users/newUser', + 'contacts', ['{DAV:}displayname' => 'Contacts']); + + $hm = new HookManager($userManager, $syncService, $cal, $card); + $hm->postLogin(['uid' => 'newUser']); + } } diff --git a/core/js/js.js b/core/js/js.js index 1d3ec6ec778..69ebabdb419 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -752,7 +752,8 @@ var OC={ // sometimes "beforeunload" happens later, so need to defer the reload a bit setTimeout(function() { if (!self._userIsNavigatingAway && !self._reloadCalled) { - OC.reload(); + OC.Notification.show(t('core', 'Problem loading page, reloading in 5 seconds')); + setTimeout(OC.reload, 5000); // only call reload once self._reloadCalled = true; } diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js index 02eb1b95c1d..3d19a38c416 100644 --- a/core/js/tests/specs/coreSpec.js +++ b/core/js/tests/specs/coreSpec.js @@ -938,10 +938,13 @@ describe('Core base tests', function() { }); describe('global ajax errors', function() { var reloadStub, ajaxErrorStub, clock; + var notificationStub; + var waitTimeMs = 6000; beforeEach(function() { clock = sinon.useFakeTimers(); reloadStub = sinon.stub(OC, 'reload'); + notificationStub = sinon.stub(OC.Notification, 'show'); // unstub the error processing method ajaxErrorStub = OC._processAjaxError; ajaxErrorStub.restore(); @@ -949,6 +952,7 @@ describe('Core base tests', function() { }); afterEach(function() { reloadStub.restore(); + notificationStub.restore(); clock.restore(); }); @@ -973,7 +977,7 @@ describe('Core base tests', function() { $(document).trigger(new $.Event('ajaxError'), xhr); // trigger timers - clock.tick(1000); + clock.tick(waitTimeMs); if (expectedCall) { expect(reloadStub.calledOnce).toEqual(true); @@ -989,7 +993,7 @@ describe('Core base tests', function() { $(document).trigger(new $.Event('ajaxError'), xhr); // trigger timers - clock.tick(1000); + clock.tick(waitTimeMs); expect(reloadStub.calledOnce).toEqual(true); }); @@ -1000,9 +1004,17 @@ describe('Core base tests', function() { $(document).trigger(new $.Event('ajaxError'), xhr); - clock.tick(1000); + clock.tick(waitTimeMs); expect(reloadStub.notCalled).toEqual(true); }); + it('displays notification', function() { + var xhr = { status: 401 }; + + $(document).trigger(new $.Event('ajaxError'), xhr); + + clock.tick(waitTimeMs); + expect(notificationStub.calledOnce).toEqual(true); + }); }); }); diff --git a/lib/private/files/filesystem.php b/lib/private/files/filesystem.php index a9138b0d2d7..ec9b537a358 100644 --- a/lib/private/files/filesystem.php +++ b/lib/private/files/filesystem.php @@ -372,6 +372,9 @@ class Filesystem { if ($user == '') { $user = \OC_User::getUser(); } + if ($user === null || $user === false || $user === '') { + throw new \OC\User\NoUserException('Attempted to initialize mount points for null user and no user in session'); + } if (isset(self::$usersSetup[$user])) { return; } diff --git a/tests/lib/files/filesystem.php b/tests/lib/files/filesystem.php index db1f22f894a..8245af0ace1 100644 --- a/tests/lib/files/filesystem.php +++ b/tests/lib/files/filesystem.php @@ -320,6 +320,28 @@ class Filesystem extends \Test\TestCase { } /** + * @expectedException \OC\User\NoUserException + */ + public function testNullUserThrows() { + \OC\Files\Filesystem::initMountPoints(null); + } + + public function testNullUserThrowsTwice() { + $thrown = 0; + try { + \OC\Files\Filesystem::initMountPoints(null); + } catch (NoUserException $e) { + $thrown++; + } + try { + \OC\Files\Filesystem::initMountPoints(null); + } catch (NoUserException $e) { + $thrown++; + } + $this->assertEquals(2, $thrown); + } + + /** * Tests that the home storage is used for the user's mount point */ public function testHomeMount() { |