summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--appinfo/routes.php1
-rw-r--r--lib/Controller/ContactsController.php62
-rw-r--r--lib/Controller/PageController.php23
-rw-r--r--tests/unit/Controller/ContactsControllerTest.php74
-rw-r--r--tests/unit/Controller/PageControllerTest.php1
5 files changed, 147 insertions, 14 deletions
diff --git a/appinfo/routes.php b/appinfo/routes.php
index 647b8f27..6bdf24a3 100644
--- a/appinfo/routes.php
+++ b/appinfo/routes.php
@@ -23,6 +23,7 @@
return [
'routes' => [
+ ['name' => 'contacts#direct', 'url' => '/direct/{contact}', 'verb' => 'GET'],
['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
['name' => 'page#index', 'url' => '/{group}', 'verb' => 'GET', 'postfix' => 'group'],
['name' => 'page#index', 'url' => '/{group}/{contact}', 'verb' => 'GET', 'postfix' => 'group.contact'],
diff --git a/lib/Controller/ContactsController.php b/lib/Controller/ContactsController.php
new file mode 100644
index 00000000..24361096
--- /dev/null
+++ b/lib/Controller/ContactsController.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @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/>.
+ *
+ */
+
+namespace OCA\Contacts\Controller;
+
+use OCA\Contacts\AppInfo\Application;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\RedirectResponse;
+use OCP\IL10N;
+use OCP\IRequest;
+use OCP\IURLGenerator;
+
+class ContactsController extends Controller {
+
+ /** @var IL10N */
+ private $l10n;
+
+ /** @var IURLGenerator */
+ private $urlGenerator;
+
+ public function __construct(IRequest $request,
+ IL10N $l10n,
+ IURLGenerator $urlGenerator) {
+ parent::__construct(Application::APP_ID, $request);
+
+ $this->l10n = $l10n;
+ $this->urlGenerator = $urlGenerator;
+ }
+
+
+ /**
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ *
+ * Open and find direct contact
+ * @param string $uuid
+ */
+ public function direct(string $contact): RedirectResponse {
+ $url = $this->urlGenerator->getAbsoluteURL('/apps/contacts/' . $this->l10n->t('All contacts') . '/' . $contact);
+ return new RedirectResponse($url);
+ }
+}
diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php
index d40b74ce..e94510cd 100644
--- a/lib/Controller/PageController.php
+++ b/lib/Controller/PageController.php
@@ -23,6 +23,7 @@
namespace OCA\Contacts\Controller;
+use OCA\Contacts\AppInfo\Application;
use OCA\Contacts\Service\SocialApiService;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\TemplateResponse;
@@ -33,8 +34,6 @@ use OCP\L10N\IFactory;
use OCP\Util;
class PageController extends Controller {
- protected $appName;
-
/** @var IConfig */
private $config;
@@ -47,15 +46,13 @@ class PageController extends Controller {
/** @var SocialApiService */
private $socialApiService;
- public function __construct(string $appName,
- IRequest $request,
+ public function __construct(IRequest $request,
IConfig $config,
IInitialStateService $initialStateService,
IFactory $languageFactory,
SocialApiService $socialApiService) {
- parent::__construct($appName, $request);
+ parent::__construct(Application::APP_ID, $request);
- $this->appName = $appName;
$this->config = $config;
$this->initialStateService = $initialStateService;
$this->languageFactory = $languageFactory;
@@ -70,16 +67,16 @@ class PageController extends Controller {
*/
public function index(): TemplateResponse {
$locales = $this->languageFactory->findAvailableLocales();
- $defaultProfile = $this->config->getAppValue($this->appName, 'defaultProfile', 'HOME');
+ $defaultProfile = $this->config->getAppValue(Application::APP_ID, 'defaultProfile', 'HOME');
$supportedNetworks = $this->socialApiService->getSupportedNetworks();
- $this->initialStateService->provideInitialState($this->appName, 'locales', $locales);
- $this->initialStateService->provideInitialState($this->appName, 'defaultProfile', $defaultProfile);
- $this->initialStateService->provideInitialState($this->appName, 'supportedNetworks', $supportedNetworks);
+ $this->initialStateService->provideInitialState(Application::APP_ID, 'locales', $locales);
+ $this->initialStateService->provideInitialState(Application::APP_ID, 'defaultProfile', $defaultProfile);
+ $this->initialStateService->provideInitialState(Application::APP_ID, 'supportedNetworks', $supportedNetworks);
- Util::addScript($this->appName, 'contacts');
- Util::addStyle($this->appName, 'contacts');
+ Util::addScript(Application::APP_ID, 'contacts');
+ Util::addStyle(Application::APP_ID, 'contacts');
- return new TemplateResponse($this->appName, 'main');
+ return new TemplateResponse(Application::APP_ID, 'main');
}
}
diff --git a/tests/unit/Controller/ContactsControllerTest.php b/tests/unit/Controller/ContactsControllerTest.php
new file mode 100644
index 00000000..34e35a27
--- /dev/null
+++ b/tests/unit/Controller/ContactsControllerTest.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @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/>.
+ *
+ */
+
+namespace OCA\Contacts\Controller;
+
+use PHPUnit\Framework\MockObject\MockObject;
+use OCP\IL10N;
+use OCP\IRequest;
+use OCP\IURLGenerator;
+use ChristophWurst\Nextcloud\Testing\TestCase;
+use OCP\AppFramework\Http\RedirectResponse;
+
+class ContactsControllerTest extends TestCase {
+ private $controller;
+
+ /** @var IL10N|MockObject */
+ private $l10n;
+
+ /** @var IURLGenerator|MockObject*/
+ private $urlGenerator;
+
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->request = $this->createMock(IRequest::class);
+ $this->l10n = $this->createMock(IL10N::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+
+ $this->controller = new ContactsController(
+ $this->request,
+ $this->l10n,
+ $this->urlGenerator
+ );
+ }
+
+
+ public function testRedirect() {
+ $contact = 'uuid~addressbook';
+
+ $this->l10n->method('t')
+ ->with('All contacts')
+ ->willReturn('All contacts');
+
+ $this->urlGenerator->expects($this->once())
+ ->method('getAbsoluteURL')
+ ->with('/apps/contacts/All contacts/' . $contact)
+ ->willReturn('/apps/contacts/All contacts/' . $contact);
+
+ $result = $this->controller->direct('uuid~addressbook');
+ $this->assertTrue($result instanceof RedirectResponse);
+ $this->assertEquals('/apps/contacts/All contacts/' . $contact, $result->getRedirectURL());
+ }
+}
diff --git a/tests/unit/Controller/PageControllerTest.php b/tests/unit/Controller/PageControllerTest.php
index c492ecdf..f173ff73 100644
--- a/tests/unit/Controller/PageControllerTest.php
+++ b/tests/unit/Controller/PageControllerTest.php
@@ -60,7 +60,6 @@ class PageControllerTest extends TestCase {
$this->socialApi = $this->createMock(SocialApiService::class);
$this->controller = new PageController(
- 'contacts',
$this->request,
$this->config,
$this->initialStateService,