public void WhenConstructed_IntializesValues()
        {
            //Prepare
            Mock<IRegionManager> mockedRegionManager = new Mock<IRegionManager>();

            MockLoginStatusChangedEvent mockedLoginStatusChangedEvent = new MockLoginStatusChangedEvent();
            Mock<IEventAggregator> mockedEventAggregator = new Mock<IEventAggregator>();
            mockedEventAggregator.Setup(x => x.GetEvent<LoginStatusChangedEvent>()).Returns(mockedLoginStatusChangedEvent);

            GameRegion[] gameRegions = new GameRegion[] { 
                new GameRegion { Header = "Asia & Southeast Asia"}, 
                new GameRegion { Header = "Europe"},
                new GameRegion { Header = "Asia"},
                new GameRegion { Header = "China"}};
            Mock<IUserService> mockedUserService = new Mock<IUserService>();
            mockedUserService.Setup(x => x.GameRegions).Returns(gameRegions);
            mockedUserService.Setup(x => x.HomeRegion).Returns(gameRegions[1]);

            //Act
            AuthenticateViewModel target = new AuthenticateViewModel(mockedRegionManager.Object, 
                mockedEventAggregator.Object, mockedUserService.Object);

            //Verify
            Assert.IsInstanceOfType(target.GameRegions, typeof(List<GameRegion>));
            Assert.IsFalse(target.IsLoggedIn);
            Assert.IsFalse(target.LoginFailed);
            Assert.IsNotNull(target.LoginCommand);
            Assert.IsNotNull(target.SelectGameRegionCommand);
            Assert.IsNull(target.SecurePassword);
            Assert.IsNull(target.Username);
            Assert.IsInstanceOfType(target.SelectedRegion, typeof(GameRegion));
            Assert.IsNotNull(target.Notification);
            Assert.IsNotNull(target.ResizeMode);
        }
        private void SelectGameRegion(object param)
        {
            GameRegion region = param as GameRegion;

            if (region != null)
            {
                SelectedRegion = region;
            }
        }
        public void WhenSelectGameRegionCommandExecuted_SelectedRegionPropertyChanged()
        {
            //Prepare
            Mock<INewsService> mockedNewsService = new Mock<INewsService>();
            GameViewModel target = new GameViewModel(mockedNewsService.Object);
            GameRegion gameRegion = new GameRegion();

            //Act
            target.SelectGameRegionCommand.Execute(gameRegion);

            //Verify
            Assert.AreEqual(gameRegion, target.SelectedRegion);
        }
        public void WhenPropertyChanged_PropertyIsUpdated()
        {
            //Prepare
            Mock<IRegionManager> mockedRegionManager = new Mock<IRegionManager>();

            MockLoginStatusChangedEvent mockedLoginStatusChangedEvent = new MockLoginStatusChangedEvent();
            Mock<IEventAggregator> mockedEventAggregator = new Mock<IEventAggregator>();
            mockedEventAggregator.Setup(x => x.GetEvent<LoginStatusChangedEvent>()).Returns(mockedLoginStatusChangedEvent);

            GameRegion[] gameRegions = new GameRegion[] { 
                new GameRegion { Header = "Asia & Southeast Asia"}, 
                new GameRegion { Header = "Europe"},
                new GameRegion { Header = "Asia"},
                new GameRegion { Header = "China"}};
            Mock<IUserService> mockedUserService = new Mock<IUserService>();
            mockedUserService.Setup(x => x.GameRegions).Returns(gameRegions);
            mockedUserService.Setup(x => x.HomeRegion).Returns(gameRegions[1]);

            AuthenticateViewModel target = new AuthenticateViewModel(mockedRegionManager.Object,
                mockedEventAggregator.Object, mockedUserService.Object);

            bool isLoggedInChangedRaised = false;
            target.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
            {
                if (e.PropertyName == "IsLoggedIn")
                {
                    isLoggedInChangedRaised = true;
                }
            };

            bool userNameChangedRaised = false;
            target.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
            {
                if (e.PropertyName == "Username")
                {
                    userNameChangedRaised = true;
                }
            };

            bool passwordChangedRaised = false;
            target.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
            {
                if (e.PropertyName == "SecurePassword")
                {
                    passwordChangedRaised = true;
                }
            };

            bool selectedRegionChangedRaised = false;
            target.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
            {
                if (e.PropertyName == "SelectedRegion")
                {
                    selectedRegionChangedRaised = true;
                }
            };

            bool gameRegionsChangedRaised = false;
            target.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
            {
                if (e.PropertyName == "GameRegions")
                {
                    gameRegionsChangedRaised = true;
                }
            };

            bool loginFailedChangedRaised = false;
            target.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
            {
                if (e.PropertyName == "LoginFailed")
                {
                    loginFailedChangedRaised = true;
                }
            };

            bool notificationChangedRaised = false;
            target.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
            {
                if (e.PropertyName == "Notification")
                {
                    notificationChangedRaised = true;
                }
            };

            bool resizeModeChangedRaised = false;
            target.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
            {
                if (e.PropertyName == "ResizeMode")
                {
                    resizeModeChangedRaised = true;
                }
            };

            //Act
            target.IsLoggedIn = true;
            target.LoginFailed = true;
            target.GameRegions = null;
            target.SecurePassword = new System.Security.SecureString();
            target.SelectedRegion = null;
            target.Username = "";
            target.Notification = "";
            target.ResizeMode = "";

            //Verify
            Assert.IsTrue(isLoggedInChangedRaised);
            Assert.IsTrue(loginFailedChangedRaised);
            Assert.IsTrue(userNameChangedRaised);
            Assert.IsTrue(passwordChangedRaised);
            Assert.IsTrue(selectedRegionChangedRaised);
            Assert.IsTrue(gameRegionsChangedRaised);
            Assert.IsTrue(notificationChangedRaised);
            Assert.IsTrue(resizeModeChangedRaised);
        }
        public void WhenSelectGameRegionCommandExecuted_SelectedRegionPropertyChanged()
        {
            //Prepare
            Mock<IRegionManager> mockedRegionManager = new Mock<IRegionManager>();

            MockLoginStatusChangedEvent mockedLoginStatusChangedEvent = new MockLoginStatusChangedEvent();
            Mock<IEventAggregator> mockedEventAggregator = new Mock<IEventAggregator>();
            mockedEventAggregator.Setup(x => x.GetEvent<LoginStatusChangedEvent>()).Returns(mockedLoginStatusChangedEvent);

            Mock<IUserService> mockedUserService = new Mock<IUserService>();
            mockedUserService.Setup(x => x.Login(It.Is<string>(user => user == "user"),
                It.Is<SecureString>(pass => pass.Length == 2))).Returns(new UserQueryResult()).Verifiable();

            AuthenticateViewModel target = new AuthenticateViewModel(mockedRegionManager.Object,
                mockedEventAggregator.Object, mockedUserService.Object);

            GameRegion gameRegion = new GameRegion();

            //Act
            target.SelectGameRegionCommand.Execute(gameRegion);

            //Verify
            Assert.AreEqual(gameRegion, target.SelectedRegion);
        }
        public void WhenSelectGameRegionChanged_HomeRegionUpdated()
        {
            //Prepare
            Mock<IRegionManager> mockedRegionManager = new Mock<IRegionManager>();

            MockLoginStatusChangedEvent mockedLoginStatusChangedEvent = new MockLoginStatusChangedEvent();
            Mock<IEventAggregator> mockedEventAggregator = new Mock<IEventAggregator>();
            mockedEventAggregator.Setup(x => x.GetEvent<LoginStatusChangedEvent>()).Returns(mockedLoginStatusChangedEvent);

            GameRegion[] gameRegions = new GameRegion[] { 
                new GameRegion { Header = "Asia & Southeast Asia"}, 
                new GameRegion { Header = "Europe"},
                new GameRegion { Header = "Asia"},
                new GameRegion { Header = "China"}};
            Mock<IUserService> mockedUserService = new Mock<IUserService>();
            mockedUserService.Setup(x => x.GameRegions).Returns(gameRegions);
            mockedUserService.SetupSet(x => x.HomeRegion = gameRegions[0]).Verifiable();
            mockedUserService.SetupGet(x => x.HomeRegion).Returns(gameRegions[1]);
            
            //Act
            AuthenticateViewModel target = new AuthenticateViewModel(mockedRegionManager.Object,
                mockedEventAggregator.Object, mockedUserService.Object);


            //Act
            target.SelectedRegion = gameRegions[0];

            //Verify
            Assert.AreEqual(gameRegions[0], target.SelectedRegion);
            Assert.IsInstanceOfType(target.GameRegions, typeof(List<GameRegion>));
            mockedUserService.VerifySet(x => x.HomeRegion = gameRegions[0]);
        }