From 2d7528bc64640240452711891ce0b339935797c0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Mon, 25 Jan 2016 11:39:57 +0100
Subject: [PATCH] Adding unit tests

---
 apps/dav/appinfo/app.php                      |  1 -
 apps/dav/appinfo/application.php              |  1 -
 apps/federation/appinfo/application.php       |  3 +-
 apps/federation/appinfo/info.xml              |  2 +-
 .../lib/syncfederationaddressbooks.php        |  7 +-
 .../lib/syncfederationaddressbookstest.php    | 66 +++++++++++++++++++
 6 files changed, 72 insertions(+), 8 deletions(-)
 create mode 100644 apps/federation/tests/lib/syncfederationaddressbookstest.php

diff --git a/apps/dav/appinfo/app.php b/apps/dav/appinfo/app.php
index b5bf9bd0e73..d33545222b0 100644
--- a/apps/dav/appinfo/app.php
+++ b/apps/dav/appinfo/app.php
@@ -25,7 +25,6 @@ $app = new Application();
 $app->registerHooks();
 
 \OC::$server->registerService('CardDAVSyncService', function() use ($app) {
-
 	return $app->getSyncService();
 });
 
diff --git a/apps/dav/appinfo/application.php b/apps/dav/appinfo/application.php
index 2a27dbeb016..d8cf2a34115 100644
--- a/apps/dav/appinfo/application.php
+++ b/apps/dav/appinfo/application.php
@@ -20,7 +20,6 @@
  */
 namespace OCA\Dav\AppInfo;
 
-use OCA\DAV\CardDAV\CardDavBackend;
 use OCA\DAV\CardDAV\ContactsManager;
 use OCA\DAV\CardDAV\SyncJob;
 use OCA\DAV\CardDAV\SyncService;
diff --git a/apps/federation/appinfo/application.php b/apps/federation/appinfo/application.php
index 6137b34e28d..0d033f44982 100644
--- a/apps/federation/appinfo/application.php
+++ b/apps/federation/appinfo/application.php
@@ -174,8 +174,9 @@ class Application extends \OCP\AppFramework\App {
 	 * @return SyncFederationAddressBooks
 	 */
 	public function getSyncService() {
+		$syncService = \OC::$server->query('CardDAVSyncService');
 		$dbHandler = $this->getContainer()->query('DbHandler');
-		return new SyncFederationAddressBooks($dbHandler);
+		return new SyncFederationAddressBooks($dbHandler, $syncService);
 	}
 
 }
diff --git a/apps/federation/appinfo/info.xml b/apps/federation/appinfo/info.xml
index 54ea4831be0..7786deef38e 100644
--- a/apps/federation/appinfo/info.xml
+++ b/apps/federation/appinfo/info.xml
@@ -5,7 +5,7 @@
     <description>ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing.</description>
     <licence>AGPL</licence>
     <author>Bjoern Schiessle</author>
-    <version>0.0.2</version>
+    <version>0.0.3</version>
     <namespace>Federation</namespace>
     <category>other</category>
 	<dependencies>
diff --git a/apps/federation/lib/syncfederationaddressbooks.php b/apps/federation/lib/syncfederationaddressbooks.php
index cff848bf135..f9f402ea031 100644
--- a/apps/federation/lib/syncfederationaddressbooks.php
+++ b/apps/federation/lib/syncfederationaddressbooks.php
@@ -19,9 +19,8 @@ class SyncFederationAddressBooks {
 	/**
 	 * @param DbHandler $dbHandler
 	 */
-	function __construct(DbHandler $dbHandler) {
-
-		$this->syncService = \OC::$server->query('CardDAVSyncService');
+	function __construct(DbHandler $dbHandler, $syncService) {
+		$this->syncService = $syncService;
 		$this->dbHandler = $dbHandler;
 	}
 
@@ -30,7 +29,7 @@ class SyncFederationAddressBooks {
 		$trustedServers = $this->dbHandler->getAllServer();
 		foreach ($trustedServers as $trustedServer) {
 			$url = $trustedServer['url'];
-			$callback($url);
+			$callback($url, null);
 			$sharedSecret = $trustedServer['shared_secret'];
 			$syncToken = $trustedServer['sync_token'];
 
diff --git a/apps/federation/tests/lib/syncfederationaddressbookstest.php b/apps/federation/tests/lib/syncfederationaddressbookstest.php
new file mode 100644
index 00000000000..6932c1e1360
--- /dev/null
+++ b/apps/federation/tests/lib/syncfederationaddressbookstest.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace OCA\Federation\Tests\lib;
+
+use OCA\Federation\DbHandler;
+use OCA\Federation\SyncFederationAddressBooks;
+
+class SyncFederationAddressbooksTest extends \Test\TestCase {
+
+	/** @var array */
+	private $callBacks = [];
+
+	function testSync() {
+		/** @var DbHandler | \PHPUnit_Framework_MockObject_MockObject $dbHandler */
+		$dbHandler = $this->getMockBuilder('OCA\Federation\DbHandler')->
+			disableOriginalConstructor()->
+			getMock();
+		$dbHandler->method('getAllServer')->
+			willReturn([
+			[
+				'url' => 'https://cloud.drop.box',
+				'shared_secret' => 'iloveowncloud',
+				'sync_token' => '0'
+			]
+		]);
+		$dbHandler->expects($this->once())->method('setServerStatus')->
+			with('https://cloud.drop.box', 1, '1');
+		$syncService = $this->getMockBuilder('OCA\DAV\CardDAV\SyncService')
+			->disableOriginalConstructor()
+			->getMock();
+		$syncService->expects($this->once())->method('syncRemoteAddressBook')
+			->willReturn(1);
+
+		$s = new SyncFederationAddressBooks($dbHandler, $syncService);
+		$s->syncThemAll(function($url, $ex) {
+			$this->callBacks[] = [$url, $ex];
+		});
+		$this->assertEquals(1, count($this->callBacks));
+	}
+
+	function testException() {
+		/** @var DbHandler | \PHPUnit_Framework_MockObject_MockObject $dbHandler */
+		$dbHandler = $this->getMockBuilder('OCA\Federation\DbHandler')->
+		disableOriginalConstructor()->
+		getMock();
+		$dbHandler->method('getAllServer')->
+		willReturn([
+			[
+				'url' => 'https://cloud.drop.box',
+				'shared_secret' => 'iloveowncloud',
+				'sync_token' => '0'
+			]
+		]);
+		$syncService = $this->getMockBuilder('OCA\DAV\CardDAV\SyncService')
+			->disableOriginalConstructor()
+			->getMock();
+		$syncService->expects($this->once())->method('syncRemoteAddressBook')
+			->willThrowException(new \Exception('something did not work out'));
+
+		$s = new SyncFederationAddressBooks($dbHandler, $syncService);
+		$s->syncThemAll(function($url, $ex) {
+			$this->callBacks[] = [$url, $ex];
+		});
+		$this->assertEquals(2, count($this->callBacks));
+	}
+}
\ No newline at end of file
-- 
GitLab