public async Task LoginAsRegisteredUserAsync()
        {
            //Prepare
            Mock<LoginStatusChangedEvent> loginStatusChangedEvent = new Mock<LoginStatusChangedEvent>();
            loginStatusChangedEvent.Setup(x => x.Publish(It.IsAny<IUserService>())).Verifiable();

            Mock<IEventAggregator> eventAggregator = new Mock<IEventAggregator>();
            eventAggregator.Setup(x => x.GetEvent<LoginStatusChangedEvent>()).Returns(loginStatusChangedEvent.Object);

            string user = "******";
            char[] pass = "******".ToCharArray();
            SecureString password = new SecureString();
            foreach (char c in pass)
            {
                password.AppendChar(c);
            } 

            //Act 
            IUserService target = new BattlenetService(eventAggregator.Object);
            UserQueryResult result = await target.LoginAsync(user, password);

            //Verify
            Assert.AreEqual(user, target.CurrentUser.Username);
            Assert.IsTrue(target.IsLoggedIn);
            Assert.IsTrue(result.Success);
            Assert.AreEqual(OnlineStatuses.Online, target.OnlineStatus);
            loginStatusChangedEvent.VerifyAll();
        }
        public void WhenConstructed_InitializesValues()
        {
            //Prepare
            var loginStatusChangedEvent = new Mock<LoginStatusChangedEvent>();
            Mock<IEventAggregator> eventAggregator = new Mock<IEventAggregator>();
            eventAggregator.Setup(x => x.GetEvent<LoginStatusChangedEvent>()).Returns(loginStatusChangedEvent.Object);
            
            //Act 
            IUserService target = new BattlenetService(eventAggregator.Object);

            //Verify
            Assert.IsNull(target.CurrentUser);
            Assert.IsFalse(target.IsLoggedIn);
            Assert.AreEqual(OnlineStatuses.Offline, target.OnlineStatus);
            Assert.IsNotNull(target.GameRegions);
            Assert.IsNotNull(target.HomeRegion);
        }
        public void LoginWithUnregisteredUser()
        {
            //Prepare
            Mock<LoginStatusChangedEvent> loginStatusChangedEvent = new Mock<LoginStatusChangedEvent>();
            loginStatusChangedEvent.Setup(x => x.Publish(It.IsAny<IUserService>())).Verifiable();

            Mock<IEventAggregator> eventAggregator = new Mock<IEventAggregator>();
            eventAggregator.Setup(x => x.GetEvent<LoginStatusChangedEvent>()).Returns(loginStatusChangedEvent.Object);

            string user = "******";
            char[] pass = "******".ToCharArray();
            SecureString password = new SecureString();
            foreach (char c in pass)
            {
                password.AppendChar(c);
            }

            //Act 
            IUserService target = new BattlenetService(eventAggregator.Object);
            UserQueryResult result = target.Login(user, password);

            //Verify
            Assert.IsNull(target.CurrentUser);
            Assert.IsFalse(target.IsLoggedIn);
            Assert.IsFalse(result.Success);
            Assert.AreEqual(UserQueryResult.ResultCode.LogginFailed, result.Code);
            loginStatusChangedEvent.Verify(x => x.Publish(It.IsAny<IUserService>()), Times.Never);
        }