aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/Contacts/ContactsMenu/Providers
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/Contacts/ContactsMenu/Providers')
-rw-r--r--tests/lib/Contacts/ContactsMenu/Providers/EMailproviderTest.php35
-rw-r--r--tests/lib/Contacts/ContactsMenu/Providers/LocalTimeProviderTest.php197
2 files changed, 205 insertions, 27 deletions
diff --git a/tests/lib/Contacts/ContactsMenu/Providers/EMailproviderTest.php b/tests/lib/Contacts/ContactsMenu/Providers/EMailproviderTest.php
index c0052469aba..648351c2ca9 100644
--- a/tests/lib/Contacts/ContactsMenu/Providers/EMailproviderTest.php
+++ b/tests/lib/Contacts/ContactsMenu/Providers/EMailproviderTest.php
@@ -1,25 +1,8 @@
<?php
/**
- * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
- *
- * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace Tests\Contacts\ContactsMenu\Providers;
@@ -29,18 +12,17 @@ use OCP\Contacts\ContactsMenu\IActionFactory;
use OCP\Contacts\ContactsMenu\IEntry;
use OCP\Contacts\ContactsMenu\ILinkAction;
use OCP\IURLGenerator;
+use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class EMailproviderTest extends TestCase {
-
- /** @var IActionFactory|\PHPUnit\Framework\MockObject\MockObject */
+ /** @var IActionFactory|MockObject */
private $actionFactory;
- /** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */
+ /** @var IURLGenerator|MockObject */
private $urlGenerator;
- /** @var EMailProvider */
- private $provider;
+ private EMailProvider $provider;
protected function setUp(): void {
parent::setUp();
@@ -51,7 +33,7 @@ class EMailproviderTest extends TestCase {
$this->provider = new EMailProvider($this->actionFactory, $this->urlGenerator);
}
- public function testProcess() {
+ public function testProcess(): void {
$entry = $this->createMock(IEntry::class);
$action = $this->createMock(ILinkAction::class);
$iconUrl = 'https://example.com/img/actions/icon.svg';
@@ -78,9 +60,8 @@ class EMailproviderTest extends TestCase {
$this->provider->process($entry);
}
- public function testProcessEmptyAddress() {
+ public function testProcessEmptyAddress(): void {
$entry = $this->createMock(IEntry::class);
- $action = $this->createMock(ILinkAction::class);
$iconUrl = 'https://example.com/img/actions/icon.svg';
$this->urlGenerator->expects($this->once())
->method('imagePath')
diff --git a/tests/lib/Contacts/ContactsMenu/Providers/LocalTimeProviderTest.php b/tests/lib/Contacts/ContactsMenu/Providers/LocalTimeProviderTest.php
new file mode 100644
index 00000000000..cc53c0bcfcf
--- /dev/null
+++ b/tests/lib/Contacts/ContactsMenu/Providers/LocalTimeProviderTest.php
@@ -0,0 +1,197 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace lib\Contacts\ContactsMenu\Providers;
+
+use OC\Contacts\ContactsMenu\Providers\LocalTimeProvider;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\Contacts\ContactsMenu\IActionFactory;
+use OCP\Contacts\ContactsMenu\IEntry;
+use OCP\Contacts\ContactsMenu\ILinkAction;
+use OCP\IConfig;
+use OCP\IDateTimeFormatter;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
+use OCP\IUserSession;
+use OCP\L10N\IFactory as IL10NFactory;
+use PHPUnit\Framework\MockObject\MockObject;
+use Test\TestCase;
+
+class LocalTimeProviderTest extends TestCase {
+
+ private IActionFactory&MockObject $actionFactory;
+ private IL10N&MockObject $l;
+ private IL10NFactory&MockObject $l10nFactory;
+ private IURLGenerator&MockObject $urlGenerator;
+ private IUserManager&MockObject $userManager;
+ private ITimeFactory&MockObject $timeFactory;
+ private IUserSession&MockObject $userSession;
+ private IDateTimeFormatter&MockObject $dateTimeFormatter;
+ private IConfig&MockObject $config;
+
+ private LocalTimeProvider $provider;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->actionFactory = $this->createMock(IActionFactory::class);
+ $this->l10nFactory = $this->createMock(IL10NFactory::class);
+ $this->l = $this->createMock(IL10N::class);
+ $this->l->expects($this->any())
+ ->method('t')
+ ->willReturnCallback(function ($text, $parameters = []) {
+ return vsprintf($text, $parameters);
+ });
+ $this->l->expects($this->any())
+ ->method('n')
+ ->willReturnCallback(function ($text, $textPlural, $n, $parameters = []) {
+ $formatted = str_replace('%n', (string)$n, $n === 1 ? $text : $textPlural);
+ return vsprintf($formatted, $parameters);
+ });
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->userManager = $this->createMock(IUserManager::class);
+ $this->timeFactory = $this->createMock(ITimeFactory::class);
+ $this->dateTimeFormatter = $this->createMock(IDateTimeFormatter::class);
+ $this->config = $this->createMock(IConfig::class);
+ $this->userSession = $this->createMock(IUserSession::class);
+
+ $this->provider = new LocalTimeProvider(
+ $this->actionFactory,
+ $this->l10nFactory,
+ $this->urlGenerator,
+ $this->userManager,
+ $this->timeFactory,
+ $this->dateTimeFormatter,
+ $this->config,
+ $this->userSession,
+ );
+ }
+
+ public static function dataTestProcess(): array {
+ return [
+ 'no current user' => [
+ false,
+ null,
+ null,
+ 'Local time: 10:24',
+ ],
+ 'both UTC' => [
+ true,
+ null,
+ null,
+ '10:24 • same time',
+ ],
+ 'both same time zone' => [
+ true,
+ 'Europe/Berlin',
+ 'Europe/Berlin',
+ '11:24 • same time',
+ ],
+ '1h behind' => [
+ true,
+ 'Europe/Berlin',
+ 'Europe/London',
+ '10:24 • 1h behind',
+ ],
+ '4:45h ahead' => [
+ true,
+ 'Europe/Berlin',
+ 'Asia/Kathmandu',
+ '16:09 • 4h45m ahead',
+ ],
+ ];
+ }
+
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTestProcess')]
+ public function testProcess(bool $hasCurrentUser, ?string $currentUserTZ, ?string $targetUserTZ, string $expected): void {
+ $entry = $this->createMock(IEntry::class);
+ $entry->expects($this->once())
+ ->method('getProperty')
+ ->with('UID')
+ ->willReturn('user1');
+
+ $user = $this->createMock(IUser::class);
+ $user->method('getUID')
+ ->willReturn('user1');
+ $this->userManager->expects($this->once())
+ ->method('get')
+ ->with('user1')
+ ->willReturn($user);
+
+ $this->l10nFactory->method('get')
+ ->with('lib')
+ ->willReturn($this->l);
+
+ $this->config->method('getSystemValueString')
+ ->with('default_timezone', 'UTC')
+ ->willReturn('UTC');
+ $this->config
+ ->method('getUserValue')
+ ->willReturnMap([
+ ['user1', 'core', 'timezone', '', $targetUserTZ],
+ ['currentUser', 'core', 'timezone', '', $currentUserTZ],
+ ]);
+
+ if ($hasCurrentUser) {
+ $currentUser = $this->createMock(IUser::class);
+ $currentUser->method('getUID')
+ ->willReturn('currentUser');
+ $this->userSession->method('getUser')
+ ->willReturn($currentUser);
+ }
+
+ $this->timeFactory->method('getDateTime')
+ ->willReturnCallback(fn ($time, $tz) => (new \DateTime('2023-01-04 10:24:43', new \DateTimeZone('UTC')))->setTimezone($tz));
+
+ $this->dateTimeFormatter->method('formatTime')
+ ->willReturnCallback(fn (\DateTime $time) => $time->format('H:i'));
+
+ $this->urlGenerator->method('imagePath')
+ ->willReturn('actions/recent.svg');
+ $this->urlGenerator->method('getAbsoluteURL')
+ ->with('actions/recent.svg')
+ ->willReturn('https://localhost/actions/recent.svg');
+
+ $action = $this->createMock(ILinkAction::class);
+ $this->actionFactory->expects($this->once())
+ ->method('newLinkAction')
+ ->with(
+ 'https://localhost/actions/recent.svg',
+ $expected,
+ '#',
+ 'timezone'
+ )
+ ->willReturn($action);
+
+ $entry->expects($this->once())
+ ->method('addAction')
+ ->with($action);
+
+ $this->provider->process($entry);
+ }
+
+ public function testProcessNoUser(): void {
+ $entry = $this->createMock(IEntry::class);
+ $entry->expects($this->once())
+ ->method('getProperty')
+ ->with('UID')
+ ->willReturn('user1');
+
+ $user = $this->createMock(IUser::class);
+ $user->method('getUID')
+ ->willReturn(null);
+
+ $entry->expects($this->never())
+ ->method('addAction');
+
+ $this->provider->process($entry);
+ }
+}