public void Ctor_ShouldSetCorrectNumberOfBuildingInfluences()
        {
            // Arrange/Act
            var viewModel     = new BuildingSettingsViewModel();
            var expectedCount = Enum.GetValues(typeof(BuildingInfluenceType)).Length;

            // Assert
            Assert.Equal(expectedCount, viewModel.BuildingInfluences.Count);
        }
        public void UseColorInLayoutCommand_ShouldCanExecute()
        {
            // Arrange
            var viewModel = new BuildingSettingsViewModel();

            // Act
            var result = viewModel.UseColorInLayoutCommand.CanExecute(null);

            // Assert
            Assert.True(result);
        }
        public void UseColorInLayoutCommand_IsExecutedWithSerializableColor_ShouldSetSelectedColor()
        {
            // Arrange
            var viewModel     = new BuildingSettingsViewModel();
            var expectedColor = new SerializableColor(Colors.LimeGreen);

            // Act
            viewModel.UseColorInLayoutCommand.Execute(expectedColor);

            // Assert
            Assert.Equal(expectedColor, viewModel.SelectedColor);
        }
        public void UseColorInLayoutCommand_IsExecutedWithNull_ShouldNotThrow()
        {
            // Arrange
            var viewModel     = new BuildingSettingsViewModel();
            var expectedColor = viewModel.SelectedColor;

            // Act
            viewModel.UseColorInLayoutCommand.Execute(null);

            // Assert
            Assert.Equal(expectedColor, viewModel.SelectedColor);
        }
        public void GetDistanceRange_BuildingInfoIsNull_ShouldSetInfluenceRangeToZeroAndReturnFalse()
        {
            // Arrange
            var viewModel = new BuildingSettingsViewModel();

            viewModel.BuildingInfluenceRange = -1;

            // Act
            var result = viewModel.GetDistanceRange(true, null);

            // Assert
            Assert.False(result);
            Assert.Equal(0, viewModel.BuildingInfluenceRange);
        }
        public void Ctor_ShouldSetDefaultValues()
        {
            // Arrange/Act
            var viewModel = new BuildingSettingsViewModel();

            // Assert
            Assert.NotNull(viewModel.ApplyColorToSelectionCommand);
            Assert.NotNull(viewModel.ApplyPredefinedColorToSelectionCommand);
            Assert.NotNull(viewModel.UseColorInLayoutCommand);
            Assert.Equal(Colors.Red, viewModel.SelectedColor);
            Assert.NotNull(viewModel.ColorsInLayout);
            Assert.NotNull(viewModel.BuildingInfluences);
            Assert.Equal(BuildingInfluenceType.None, viewModel.SelectedBuildingInfluence.Type);
        }
        public void GetDistanceRange_IsNotPavedStreet_ShouldSetInfluenceRangeCorrect(int influenceRangeToSet, int expectedInfluenceRange, bool expectedResult)
        {
            // Arrange
            var viewModel = new BuildingSettingsViewModel();

            viewModel.BuildingInfluenceRange = int.MaxValue;

            var mockedBuildingInfo = new Mock <IBuildingInfo>();

            mockedBuildingInfo.SetupGet(x => x.InfluenceRange).Returns(() => influenceRangeToSet);

            // Act
            var result = viewModel.GetDistanceRange(false, mockedBuildingInfo.Object);

            // Assert
            Assert.Equal(expectedResult, result);
            Assert.Equal(expectedInfluenceRange, viewModel.BuildingInfluenceRange);
        }
        public void GetDistanceRange_BuildingInfluenceRangeIsZeroOrLower_ShouldSetInfluenceRangeToZeroAndReturnFalse(int influenceRangeToSet)
        {
            // Arrange
            var viewModel = new BuildingSettingsViewModel();

            viewModel.BuildingInfluenceRange = int.MaxValue;

            var mockedBuildingInfo = new Mock <IBuildingInfo>();

            mockedBuildingInfo.SetupGet(x => x.InfluenceRange).Returns(() => influenceRangeToSet);

            // Act
            var result = viewModel.GetDistanceRange(true, mockedBuildingInfo.Object);

            // Assert
            Assert.False(result);
            Assert.Equal(0, viewModel.BuildingInfluenceRange);
        }
        public void GetDistanceRange_IsPavedStreetAndBuildingIsCityInstitutionBuilding_ShouldIgnoreCase(int influenceRangeToSet, int expectedInfluenceRange, bool expectedResult)
        {
            // Arrange
            var viewModel = new BuildingSettingsViewModel();

            viewModel.BuildingInfluenceRange = int.MaxValue;

            var mockedBuildingInfo = new Mock <IBuildingInfo>();

            mockedBuildingInfo.SetupGet(x => x.InfluenceRange).Returns(() => influenceRangeToSet);
            mockedBuildingInfo.SetupGet(x => x.Template).Returns(() => "citYInsTitutIOnbuiLding");

            // Act
            var result = viewModel.GetDistanceRange(true, mockedBuildingInfo.Object);

            // Assert
            Assert.Equal(expectedResult, result);
            Assert.Equal(expectedInfluenceRange, viewModel.BuildingInfluenceRange);
        }
        public void SelectedBuildingInfluence_TypeIsGiven_ShouldAdjustInputVisibility(BuildingInfluenceType typeToSet, bool expectedRadiusVisible, bool expectedRangeVisible)
        {
            // Arrange
            var viewModel = new BuildingSettingsViewModel();

            //to trigger PropertyChanged
            if (typeToSet != BuildingInfluenceType.None)
            {
                viewModel.SelectedBuildingInfluence = viewModel.BuildingInfluences.Single(x => x.Type == BuildingInfluenceType.None);
            }
            else
            {
                viewModel.SelectedBuildingInfluence = viewModel.BuildingInfluences.Single(x => x.Type == BuildingInfluenceType.Both);
            }
            viewModel.IsBuildingInfluenceInputRadiusVisible = !expectedRadiusVisible;
            viewModel.IsBuildingInfluenceInputRangeVisible  = !expectedRangeVisible;

            // Act
            viewModel.SelectedBuildingInfluence = viewModel.BuildingInfluences.Single(x => x.Type == typeToSet);

            // Assert
            Assert.Equal(expectedRadiusVisible, viewModel.IsBuildingInfluenceInputRadiusVisible);
            Assert.Equal(expectedRangeVisible, viewModel.IsBuildingInfluenceInputRangeVisible);
        }