diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Windows/App.xaml.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Windows/App.xaml.cs index 9f53c60d4..c21eb84c0 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Windows/App.xaml.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Windows/App.xaml.cs @@ -12,7 +12,7 @@ namespace eShopOnContainers.TestRunner.Windows { // Otherwise you need to ensure that the test assemblies will // become part of the app bundle - AddTestAssembly(typeof(UnitTests.DummyTests).GetTypeInfo().Assembly); + AddTestAssembly(typeof(UnitTests.CatalogViewModelTests).GetTypeInfo().Assembly); } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockViewModel.cs new file mode 100644 index 000000000..64acab458 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockViewModel.cs @@ -0,0 +1,53 @@ +using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.Core.Validations; + +namespace eShopOnContainers.UnitTests +{ + public class MockViewModel : ViewModelBase + { + private ValidatableObject _forename; + private ValidatableObject _surname; + + public ValidatableObject Forename + { + get + { + return _forename; + } + set + { + _forename = value; + RaisePropertyChanged(() => Forename); + } + } + + public ValidatableObject Surname + { + get + { + return _surname; + } + set + { + _surname = value; + RaisePropertyChanged(() => Surname); + } + } + + public MockViewModel() + { + _forename = new ValidatableObject(); + _surname = new ValidatableObject(); + + _forename.Validations.Add(new IsNotNullOrEmptyRule { ValidationMessage = "Forename is required." }); + _surname.Validations.Add(new IsNotNullOrEmptyRule { ValidationMessage = "Surname name is required." }); + } + + public bool Validate() + { + bool isValidForename = _forename.Validate(); + bool isValidSurname = _surname.Validate(); + return isValidForename && isValidSurname; + } + } +} diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs new file mode 100644 index 000000000..74c607af4 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs @@ -0,0 +1,92 @@ +using Xunit; +using eShopOnContainers.Core.ViewModels.Base; + +namespace eShopOnContainers.UnitTests +{ + public class MockViewModelTests + { + [Fact] + public void CheckValidationFailsWhenPropertiesAreEmptyTest() + { + ViewModelLocator.RegisterDependencies(true); + var mockViewModel = new MockViewModel(); + + bool isValid = mockViewModel.Validate(); + + Assert.False(isValid); + } + + [Fact] + public void CheckValidationFailsWhenOnlyForenameHasDataTest() + { + ViewModelLocator.RegisterDependencies(true); + var mockViewModel = new MockViewModel(); + mockViewModel.Forename.Value = "John"; + + bool isValid = mockViewModel.Validate(); + + Assert.False(isValid); + } + + [Fact] + public void CheckValidationPassesWhenOnlySurnameHasDataTest() + { + ViewModelLocator.RegisterDependencies(true); + var mockViewModel = new MockViewModel(); + mockViewModel.Surname.Value = "Smith"; + + bool isValid = mockViewModel.Validate(); + + Assert.False(isValid); + } + + [Fact] + public void CheckValidationPassesWhenPropertiesHaveDataTest() + { + ViewModelLocator.RegisterDependencies(true); + var mockViewModel = new MockViewModel(); + mockViewModel.Forename.Value = "John"; + mockViewModel.Surname.Value = "Smith"; + + bool isValid = mockViewModel.Validate(); + + Assert.True(isValid); + } + + [Fact] + public void SettingForenamePropertyShouldRaisePropertyChanged() + { + bool invoked = false; + + ViewModelLocator.RegisterDependencies(true); + var mockViewModel = new MockViewModel(); + + mockViewModel.Forename.PropertyChanged += (sender, e) => + { + if (e.PropertyName.Equals("Value")) + invoked = true; + }; + mockViewModel.Forename.Value = "John"; + + Assert.True(invoked); + } + + [Fact] + public void SettingSurnamePropertyShouldRaisePropertyChanged() + { + bool invoked = false; + + ViewModelLocator.RegisterDependencies(true); + var mockViewModel = new MockViewModel(); + + mockViewModel.Surname.PropertyChanged += (sender, e) => + { + if (e.PropertyName.Equals("Value")) + invoked = true; + }; + mockViewModel.Surname.Value = "Smith"; + + Assert.True(invoked); + } + } +} diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj index f91348b46..115aca788 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj @@ -43,6 +43,8 @@ + +