|
@@ -21,6 +21,7 @@
|
|
|
|
|
|
namespace Test\Share20;
|
|
|
|
|
|
+use DateTimeZone;
|
|
|
use OC\Files\Mount\MoveableMount;
|
|
|
use OC\KnownUser\KnownUserService;
|
|
|
use OC\Share20\DefaultShareProvider;
|
|
@@ -39,6 +40,7 @@ use OCP\Files\Node;
|
|
|
use OCP\Files\Storage;
|
|
|
use OCP\HintException;
|
|
|
use OCP\IConfig;
|
|
|
+use OCP\IDateTimeZone;
|
|
|
use OCP\IGroup;
|
|
|
use OCP\IGroupManager;
|
|
|
use OCP\IL10N;
|
|
@@ -113,6 +115,9 @@ class ManagerTest extends \Test\TestCase {
|
|
|
protected $knownUserService;
|
|
|
/** @var ShareDisableChecker|MockObject */
|
|
|
protected $shareDisabledChecker;
|
|
|
+ private DateTimeZone $timezone;
|
|
|
+ /** @var IDateTimeZone|MockObject */
|
|
|
+ protected $dateTimeZone;
|
|
|
|
|
|
protected function setUp(): void {
|
|
|
$this->logger = $this->createMock(LoggerInterface::class);
|
|
@@ -132,6 +137,9 @@ class ManagerTest extends \Test\TestCase {
|
|
|
$this->knownUserService = $this->createMock(KnownUserService::class);
|
|
|
|
|
|
$this->shareDisabledChecker = new ShareDisableChecker($this->config, $this->userManager, $this->groupManager);
|
|
|
+ $this->dateTimeZone = $this->createMock(IDateTimeZone::class);
|
|
|
+ $this->timezone = new \DateTimeZone('Pacific/Auckland');
|
|
|
+ $this->dateTimeZone->method('getTimeZone')->willReturnCallback(fn () => $this->timezone);
|
|
|
|
|
|
$this->l10nFactory = $this->createMock(IFactory::class);
|
|
|
$this->l = $this->createMock(IL10N::class);
|
|
@@ -165,7 +173,8 @@ class ManagerTest extends \Test\TestCase {
|
|
|
$this->dispatcher,
|
|
|
$this->userSession,
|
|
|
$this->knownUserService,
|
|
|
- $this->shareDisabledChecker
|
|
|
+ $this->shareDisabledChecker,
|
|
|
+ $this->dateTimeZone,
|
|
|
);
|
|
|
|
|
|
$this->defaultProvider = $this->createMock(DefaultShareProvider::class);
|
|
@@ -198,6 +207,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
$this->userSession,
|
|
|
$this->knownUserService,
|
|
|
$this->shareDisabledChecker,
|
|
|
+ $this->dateTimeZone,
|
|
|
]);
|
|
|
}
|
|
|
|
|
@@ -917,7 +927,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
- $expected = new \DateTime();
|
|
|
+ $expected = new \DateTime('now', $this->timezone);
|
|
|
$expected->setTime(0, 0, 0);
|
|
|
$expected->add(new \DateInterval('P3D'));
|
|
|
|
|
@@ -952,7 +962,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
- $expected = new \DateTime();
|
|
|
+ $expected = new \DateTime('now', $this->timezone);
|
|
|
$expected->setTime(0, 0, 0);
|
|
|
$expected->add(new \DateInterval('P1D'));
|
|
|
|
|
@@ -999,7 +1009,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
* @dataProvider validateExpirationDateInternalProvider
|
|
|
*/
|
|
|
public function testValidateExpirationDateInternalEnforceValid($shareType) {
|
|
|
- $future = new \DateTime();
|
|
|
+ $future = new \DateTime('now', $this->dateTimeZone->getTimeZone());
|
|
|
$future->add(new \DateInterval('P2D'));
|
|
|
$future->setTime(1, 2, 3);
|
|
|
|
|
@@ -1041,7 +1051,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
* @dataProvider validateExpirationDateInternalProvider
|
|
|
*/
|
|
|
public function testValidateExpirationDateInternalNoDefault($shareType) {
|
|
|
- $date = new \DateTime();
|
|
|
+ $date = new \DateTime('now', $this->dateTimeZone->getTimeZone());
|
|
|
$date->add(new \DateInterval('P5D'));
|
|
|
$date->setTime(1, 2, 3);
|
|
|
|
|
@@ -1089,9 +1099,10 @@ class ManagerTest extends \Test\TestCase {
|
|
|
$share = $this->manager->newShare();
|
|
|
$share->setShareType($shareType);
|
|
|
|
|
|
- $expected = new \DateTime();
|
|
|
+ $expected = new \DateTime('now', $this->timezone);
|
|
|
+ $expected->setTime(0, 0);
|
|
|
$expected->add(new \DateInterval('P3D'));
|
|
|
- $expected->setTime(0, 0, 0);
|
|
|
+ $expected->setTimezone(new \DateTimeZone(date_default_timezone_get()));
|
|
|
|
|
|
if ($shareType === IShare::TYPE_USER) {
|
|
|
$this->config->method('getAppValue')
|
|
@@ -1124,12 +1135,12 @@ class ManagerTest extends \Test\TestCase {
|
|
|
* @dataProvider validateExpirationDateInternalProvider
|
|
|
*/
|
|
|
public function testValidateExpirationDateInternalDefault($shareType) {
|
|
|
- $future = new \DateTime();
|
|
|
+ $future = new \DateTime('now', $this->timezone);
|
|
|
$future->add(new \DateInterval('P5D'));
|
|
|
$future->setTime(1, 2, 3);
|
|
|
|
|
|
$expected = clone $future;
|
|
|
- $expected->setTime(0, 0, 0);
|
|
|
+ $expected->setTime(0, 0);
|
|
|
|
|
|
$share = $this->manager->newShare();
|
|
|
$share->setShareType($shareType);
|
|
@@ -1166,7 +1177,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
* @dataProvider validateExpirationDateInternalProvider
|
|
|
*/
|
|
|
public function testValidateExpirationDateInternalHookModification($shareType) {
|
|
|
- $nextWeek = new \DateTime();
|
|
|
+ $nextWeek = new \DateTime('now', $this->timezone);
|
|
|
$nextWeek->add(new \DateInterval('P7D'));
|
|
|
$nextWeek->setTime(0, 0, 0);
|
|
|
|
|
@@ -1295,7 +1306,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
['core', 'link_defaultExpDays', 3, '3'],
|
|
|
]);
|
|
|
|
|
|
- $expected = new \DateTime();
|
|
|
+ $expected = new \DateTime('now', $this->timezone);
|
|
|
$expected->setTime(0, 0, 0);
|
|
|
$expected->add(new \DateInterval('P3D'));
|
|
|
|
|
@@ -1316,7 +1327,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
['core', 'link_defaultExpDays', 3, '1'],
|
|
|
]);
|
|
|
|
|
|
- $expected = new \DateTime();
|
|
|
+ $expected = new \DateTime('now', $this->timezone);
|
|
|
$expected->setTime(0, 0, 0);
|
|
|
$expected->add(new \DateInterval('P1D'));
|
|
|
|
|
@@ -1347,7 +1358,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
}
|
|
|
|
|
|
public function testValidateExpirationDateEnforceValid() {
|
|
|
- $future = new \DateTime();
|
|
|
+ $future = new \DateTime('now', $this->timezone);
|
|
|
$future->add(new \DateInterval('P2D'));
|
|
|
$future->setTime(1, 2, 3);
|
|
|
|
|
@@ -1376,12 +1387,13 @@ class ManagerTest extends \Test\TestCase {
|
|
|
}
|
|
|
|
|
|
public function testValidateExpirationDateNoDefault() {
|
|
|
- $date = new \DateTime();
|
|
|
+ $date = new \DateTime('now', $this->timezone);
|
|
|
$date->add(new \DateInterval('P5D'));
|
|
|
$date->setTime(1, 2, 3);
|
|
|
|
|
|
$expected = clone $date;
|
|
|
- $expected->setTime(0, 0, 0);
|
|
|
+ $expected->setTime(0, 0);
|
|
|
+ $expected->setTimezone(new \DateTimeZone(date_default_timezone_get()));
|
|
|
|
|
|
$share = $this->manager->newShare();
|
|
|
$share->setExpirationDate($date);
|
|
@@ -1415,9 +1427,10 @@ class ManagerTest extends \Test\TestCase {
|
|
|
public function testValidateExpirationDateNoDateDefault() {
|
|
|
$share = $this->manager->newShare();
|
|
|
|
|
|
- $expected = new \DateTime();
|
|
|
+ $expected = new \DateTime('now', $this->timezone);
|
|
|
$expected->add(new \DateInterval('P3D'));
|
|
|
- $expected->setTime(0, 0, 0);
|
|
|
+ $expected->setTime(0, 0);
|
|
|
+ $expected->setTimezone(new \DateTimeZone(date_default_timezone_get()));
|
|
|
|
|
|
$this->config->method('getAppValue')
|
|
|
->willReturnMap([
|
|
@@ -1438,12 +1451,44 @@ class ManagerTest extends \Test\TestCase {
|
|
|
}
|
|
|
|
|
|
public function testValidateExpirationDateDefault() {
|
|
|
- $future = new \DateTime();
|
|
|
+ $future = new \DateTime('now', $this->timezone);
|
|
|
$future->add(new \DateInterval('P5D'));
|
|
|
$future->setTime(1, 2, 3);
|
|
|
|
|
|
$expected = clone $future;
|
|
|
- $expected->setTime(0, 0, 0);
|
|
|
+ $expected->setTime(0, 0);
|
|
|
+ $expected->setTimezone(new \DateTimeZone(date_default_timezone_get()));
|
|
|
+
|
|
|
+ $share = $this->manager->newShare();
|
|
|
+ $share->setExpirationDate($future);
|
|
|
+
|
|
|
+ $this->config->method('getAppValue')
|
|
|
+ ->willReturnMap([
|
|
|
+ ['core', 'shareapi_default_expire_date', 'no', 'yes'],
|
|
|
+ ['core', 'shareapi_expire_after_n_days', '7', '3'],
|
|
|
+ ['core', 'link_defaultExpDays', '3', '1'],
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock();
|
|
|
+ \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener');
|
|
|
+ $hookListener->expects($this->once())->method('listener')->with($this->callback(function ($data) use ($expected) {
|
|
|
+ return $data['expirationDate'] == $expected;
|
|
|
+ }));
|
|
|
+
|
|
|
+ self::invokePrivate($this->manager, 'validateExpirationDateLink', [$share]);
|
|
|
+
|
|
|
+ $this->assertEquals($expected, $share->getExpirationDate());
|
|
|
+ }
|
|
|
+
|
|
|
+ public function testValidateExpirationNegativeOffsetTimezone() {
|
|
|
+ $this->timezone = new \DateTimeZone('Pacific/Tahiti');
|
|
|
+ $future = new \DateTime();
|
|
|
+ $future->add(new \DateInterval('P5D'));
|
|
|
+
|
|
|
+ $expected = clone $future;
|
|
|
+ $expected->setTimezone($this->timezone);
|
|
|
+ $expected->setTime(0, 0);
|
|
|
+ $expected->setTimezone(new \DateTimeZone(date_default_timezone_get()));
|
|
|
|
|
|
$share = $this->manager->newShare();
|
|
|
$share->setExpirationDate($future);
|
|
@@ -1467,11 +1512,12 @@ class ManagerTest extends \Test\TestCase {
|
|
|
}
|
|
|
|
|
|
public function testValidateExpirationDateHookModification() {
|
|
|
- $nextWeek = new \DateTime();
|
|
|
+ $nextWeek = new \DateTime('now', $this->timezone);
|
|
|
$nextWeek->add(new \DateInterval('P7D'));
|
|
|
- $nextWeek->setTime(0, 0, 0);
|
|
|
|
|
|
$save = clone $nextWeek;
|
|
|
+ $save->setTime(0, 0);
|
|
|
+ $save->setTimezone(new \DateTimeZone(date_default_timezone_get()));
|
|
|
|
|
|
$hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock();
|
|
|
\OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener');
|
|
@@ -2750,6 +2796,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
$this->userSession,
|
|
|
$this->knownUserService,
|
|
|
$this->shareDisabledChecker,
|
|
|
+ $this->dateTimeZone,
|
|
|
);
|
|
|
|
|
|
$share = $this->createMock(IShare::class);
|
|
@@ -2799,6 +2846,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
$this->userSession,
|
|
|
$this->knownUserService,
|
|
|
$this->shareDisabledChecker,
|
|
|
+ $this->dateTimeZone,
|
|
|
);
|
|
|
|
|
|
$share = $this->createMock(IShare::class);
|
|
@@ -2855,6 +2903,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
$this->userSession,
|
|
|
$this->knownUserService,
|
|
|
$this->shareDisabledChecker,
|
|
|
+ $this->dateTimeZone,
|
|
|
);
|
|
|
|
|
|
$share = $this->createMock(IShare::class);
|
|
@@ -4256,6 +4305,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
$this->userSession,
|
|
|
$this->knownUserService,
|
|
|
$this->shareDisabledChecker,
|
|
|
+ $this->dateTimeZone,
|
|
|
);
|
|
|
$this->assertSame($expected,
|
|
|
$manager->shareProviderExists($shareType)
|
|
@@ -4292,6 +4342,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
$this->userSession,
|
|
|
$this->knownUserService,
|
|
|
$this->shareDisabledChecker,
|
|
|
+ $this->dateTimeZone,
|
|
|
);
|
|
|
|
|
|
$factory->setProvider($this->defaultProvider);
|
|
@@ -4359,6 +4410,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
$this->userSession,
|
|
|
$this->knownUserService,
|
|
|
$this->shareDisabledChecker,
|
|
|
+ $this->dateTimeZone,
|
|
|
);
|
|
|
|
|
|
$factory->setProvider($this->defaultProvider);
|
|
@@ -4478,6 +4530,7 @@ class ManagerTest extends \Test\TestCase {
|
|
|
$this->userSession,
|
|
|
$this->knownUserService,
|
|
|
$this->shareDisabledChecker,
|
|
|
+ $this->dateTimeZone,
|
|
|
);
|
|
|
|
|
|
$factory->setProvider($this->defaultProvider);
|
|
@@ -4605,7 +4658,8 @@ class ManagerTest extends \Test\TestCase {
|
|
|
$this->dispatcher,
|
|
|
$this->userSession,
|
|
|
$this->knownUserService,
|
|
|
- $this->shareDisabledChecker
|
|
|
+ $this->shareDisabledChecker,
|
|
|
+ $this->dateTimeZone,
|
|
|
);
|
|
|
|
|
|
$factory->setProvider($this->defaultProvider);
|