aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/dav/lib/hookmanager.php3
-rw-r--r--apps/dav/tests/unit/dav/HookManagerTest.php81
-rw-r--r--core/js/js.js3
-rw-r--r--core/js/tests/specs/coreSpec.js18
-rw-r--r--lib/private/files/filesystem.php3
-rw-r--r--tests/lib/files/filesystem.php22
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() {