public void GoogleGcmTest()
 {
     var controller = new NotificationsController(null, null);
     var result = controller.GoogleGcm();
     
     Assert.IsFalse(result.IsSuccessful);
     Assert.AreEqual("Method is not implemented yet", result.Message);
 }
        public void AppleNotificationsTest()
        {
            var payLoad = new AppleApiNotificationPayLoad("token", "hello World", 0, "default", "wrong key", "deviceUuid");
            var testConfigurationManager = new TestConfigurationManager();
            var securityService = new SecurityService(testConfigurationManager);
            var settings = new AppleServiceSettings(testConfigurationManager);

            var broker = new Mock<IPushBroker>();
            broker.Setup(b => b.Dispose()).Verifiable();
            broker.Setup(b => b.RegisterService<AppleNotification>(It.IsAny<ApplePushService>(), It.IsAny<bool>()));
            broker.Setup(b => b.QueueNotification(It.IsAny<AppleNotification>()));
            var appleService = new AppleNotificationService(broker.Object, new ApiLogger(), settings);
            var controller = new NotificationsController(appleService, securityService);
            var exception = new Exception("Test Exception");

            // senario 1: invalid Key
            var result = controller.Apple(payLoad);
            Assert.IsFalse(result.IsSuccessful, "Should fail, wrong api key");
            Assert.AreEqual("Invalid Authentication Key", result.Message);
            AssertPushNotificationReturnedInfo(payLoad, result);

            // senario 2: send successful 
            payLoad.AuthenticationKey = "LeopardValidApiKey";
            broker.Setup(b => b.StopAllServices(It.IsAny<bool>())).Raises(b => b.OnNotificationSent += null, this, null);
            result = controller.Apple(payLoad);
            Assert.IsTrue(result.IsSuccessful);
            Assert.AreEqual("Notification Sent", result.Message);
            AssertPushNotificationReturnedInfo(payLoad, result);

            // senario 3: send failed
            broker.Setup(b => b.StopAllServices(It.IsAny<bool>())).Raises(b => b.OnNotificationFailed += null, this, null, exception);
            result = controller.Apple(payLoad);
            Assert.IsFalse(result.IsSuccessful);
            Assert.AreEqual("Test Exception", result.Message, "should get the exception message in the result");
            AssertPushNotificationReturnedInfo(payLoad, result);

            // senario 4: device subuscription changed
            broker.Setup(b => b.StopAllServices(It.IsAny<bool>())).Raises(b => b.OnDeviceSubscriptionChanged += null, this, string.Empty, string.Empty, null);
            result = controller.Apple(payLoad);
            Assert.IsFalse(result.IsSuccessful);
            Assert.AreEqual("Device Subscription Changed", result.Message);
            AssertPushNotificationReturnedInfo(payLoad, result);

            // senario 5: device subscription expired
            broker.Setup(b => b.StopAllServices(It.IsAny<bool>())).Raises(b => b.OnDeviceSubscriptionExpired += null, this, string.Empty, DateTime.Now, null);
            result = controller.Apple(payLoad);
            Assert.IsFalse(result.IsSuccessful);
            Assert.IsTrue(result.Message.Contains("Device Subscription Expired: "));
            AssertPushNotificationReturnedInfo(payLoad, result);

            // senario 6: Service Exception
            broker.Setup(b => b.StopAllServices(It.IsAny<bool>())).Raises(b => b.OnServiceException += null, this, exception );
            result = controller.Apple(payLoad);
            Assert.IsFalse(result.IsSuccessful);
            Assert.AreEqual("Service Exception: Test Exception", result.Message);
            AssertPushNotificationReturnedInfo(payLoad, result);

            // senario 7: channel Exception
            broker.Setup(b => b.StopAllServices(It.IsAny<bool>())).Raises(b => b.OnChannelException += null, this, null, exception);
            result = controller.Apple(payLoad);
            Assert.IsFalse(result.IsSuccessful);
            Assert.AreEqual("Channel Exception: Test Exception", result.Message);
            AssertPushNotificationReturnedInfo(payLoad, result);
        }