public async Task Connect_Exception()
        {
            var host             = "MyHost";
            var token            = "MyToken";
            var exceptionmessage = "This is an exception";

            var client = new HC2Client(_nativeMqttClient.Object, host, token);

            _nativeMqttClient.Setup(d => d.Connect(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .ThrowsAsync(new Exception(exceptionmessage));

            Exception ex = null;

            try
            {
                var response = await client.Connect(new MessageObserver(e => {}));
            }
            catch (Exception e)
            {
                ex = e;
            }

            Assert.IsNotNull(ex);
            Assert.AreEqual(exceptionmessage, ex.Message);
            _nativeMqttClient.Verify(d => d.Connect(host, token, It.IsAny <CancellationToken>()), Times.Once);
        }
        public void Initialize()
        {
            _nativeMqttClient       = new Mock <INativeMqttClient>();
            _nikoResponseObservable = new NikoResponseObservable();
            _nativeMqttClient.SetupGet(d => d.ResponseObservable).Returns(_nikoResponseObservable);
            _nativeMqttClient.SetupGet(d => d.IsConnected).Returns(true);

            var host  = "MyHost";
            var token = "MyToken";

            _client = new HC2Client(_nativeMqttClient.Object, host, token);
        }
        public void Initialize()
        {
            _nativeMqttClient       = new Mock <INativeMqttClient>();
            _nikoResponseObservable = new NikoResponseObservable();
            _nativeMqttClient.SetupGet(d => d.ResponseObservable).Returns(_nikoResponseObservable);
            _nativeMqttClient.Setup(d => d.Connect(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new ConnectionResult(ConnectResultCode.Success));
            _nativeMqttClient.Setup(d => d.Subscribe()).ReturnsAsync(new SubscribeResult(SubscribeResultCode.Success));

            var host  = "MyHost";
            var token = "MyToken";

            _client = new HC2Client(_nativeMqttClient.Object, host, token);
        }
        public async Task Connect_Fail()
        {
            var host  = "MyHost";
            var token = "MyToken";

            var client = new HC2Client(_nativeMqttClient.Object, host, token);

            _nativeMqttClient.Setup(d => d.Connect(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new ConnectionResult(ConnectResultCode.NotAuthorized, "Error"), TimeSpan.FromSeconds(1));

            var response = await client.Connect(new MessageObserver(e => {}));

            response.IsSuccess.Should().BeFalse();
            _nativeMqttClient.Verify(d => d.Connect(host, token, It.IsAny <CancellationToken>()), Times.Once);
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            if (string.IsNullOrEmpty(_hostname) || string.IsNullOrEmpty(_token))
            {
                var dialog = new MessageDialog("Token or hostanme not set. Set it in MainPage.cs");
                dialog.ShowAsync();
            }
            else
            {
                _client = new HC2Client(_hostname, _token);
                _client.Connect(_messageObserver).ContinueWith(
                    t => { _client.GetDevices(); });
            }

            base.OnNavigatedTo(e);
        }
        public async Task Disconnect_Success()
        {
            var eventraised    = false;
            var host           = "MyHost";
            var token          = "MyToken";
            var autoresetevent = new AutoResetEvent(false);

            _nativeMqttClient.Setup(d => d.Disconnect()).Returns(Task.CompletedTask).Raises(d => d.Disconnected += null, EventArgs.Empty);

            var client = new HC2Client(_nativeMqttClient.Object, host, token);

            client.Disconnected += (sender, args) =>
            {
                eventraised = true;
                autoresetevent.Set();
            };

            await client.Disconnect();

            autoresetevent.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
            eventraised.Should().Be(true);
            _nativeMqttClient.Verify(d => d.Disconnect(), Times.Once);
        }