From b7c8d0eed958b5f06a9a1985c046751ed6bd91dc Mon Sep 17 00:00:00 2001 From: David Britch Date: Wed, 19 Apr 2017 17:07:45 +0100 Subject: [PATCH 1/8] Removed unused method. --- .../Services/Catalog/CatalogMockService.cs | 7 ------- .../Services/Catalog/CatalogService.cs | 5 ----- .../Services/Catalog/ICatalogService.cs | 1 - 3 files changed, 13 deletions(-) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs index b37226b33..d58b2b698 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs @@ -61,12 +61,5 @@ namespace eShopOnContainers.Core.Services.Catalog return MockCatalogType; } - - public async Task GetCatalogItemAsync(string id) - { - await Task.Delay(500); - - return MockCatalog.FirstOrDefault(c => c.Id == id); - } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs index bbed8a9ed..ee652fd79 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs @@ -60,11 +60,6 @@ namespace eShopOnContainers.Core.Services.Catalog } - public Task GetCatalogItemAsync(string id) - { - throw new NotImplementedException(); - } - public async Task> GetCatalogBrandAsync() { diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/ICatalogService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/ICatalogService.cs index 508da75d8..74d6aa91b 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/ICatalogService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/ICatalogService.cs @@ -10,6 +10,5 @@ namespace eShopOnContainers.Core.Services.Catalog Task> FilterAsync(int catalogBrandId, int catalogTypeId); Task> GetCatalogTypeAsync(); Task> GetCatalogAsync(); - Task GetCatalogItemAsync(string id); } } From f4bbc9029863a798650f10dfd86d0d791c98bf6e Mon Sep 17 00:00:00 2001 From: David Britch Date: Wed, 19 Apr 2017 17:08:53 +0100 Subject: [PATCH 2/8] Formatting changes. --- .../Services/Catalog/CatalogService.cs | 30 +++++++------------ 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs index ee652fd79..40807b2f5 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs @@ -20,7 +20,6 @@ namespace eShopOnContainers.Core.Services.Catalog public async Task> FilterAsync(int catalogBrandId, int catalogTypeId) { - UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpoint); builder.Path = string.Format("api/v1/catalog/items/type/{0}/brand/{1}", catalogTypeId, catalogBrandId); @@ -34,12 +33,10 @@ namespace eShopOnContainers.Core.Services.Catalog return catalog?.Data.ToObservableCollection(); else return new ObservableCollection(); - } public async Task> GetCatalogAsync() { - UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpoint); builder.Path = "api/v1/catalog/items"; @@ -56,32 +53,28 @@ namespace eShopOnContainers.Core.Services.Catalog return catalog?.Data.ToObservableCollection(); } else - return new ObservableCollection(); - + return new ObservableCollection(); } public async Task> GetCatalogBrandAsync() { + UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpoint); - UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpoint); + builder.Path = "api/v1/catalog/catalogbrands"; - builder.Path = "api/v1/catalog/catalogbrands"; + string uri = builder.ToString(); - string uri = builder.ToString(); - - IEnumerable brands = - await _requestProvider.GetAsync>(uri); - - if (brands != null) - return brands?.ToObservableCollection(); - else - return new ObservableCollection(); + IEnumerable brands = + await _requestProvider.GetAsync>(uri); + if (brands != null) + return brands?.ToObservableCollection(); + else + return new ObservableCollection(); } public async Task> GetCatalogTypeAsync() { - UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpoint); builder.Path = "api/v1/catalog/catalogtypes"; @@ -94,8 +87,7 @@ namespace eShopOnContainers.Core.Services.Catalog if (types != null) return types.ToObservableCollection(); else - return new ObservableCollection(); - + return new ObservableCollection(); } } } From ba18031b82b96624cccee0ba250aa813081249cf Mon Sep 17 00:00:00 2001 From: David Britch Date: Wed, 19 Apr 2017 17:19:14 +0100 Subject: [PATCH 3/8] Removed unused namespaces. --- .../eShopOnContainers.Core/ViewModels/CatalogViewModel.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs index 554c49852..abc7f70ac 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs @@ -5,8 +5,6 @@ using Xamarin.Forms; using eShopOnContainers.Core.Models.Catalog; using eShopOnContainers.Core.Services.Catalog; using System.Windows.Input; -using eShopOnContainers.Core.Services.Basket; -using eShopOnContainers.Core.Services.User; namespace eShopOnContainers.Core.ViewModels { From 7d3a0db546a0b984727e547ed7c8f23d33c9f00a Mon Sep 17 00:00:00 2001 From: David Britch Date: Thu, 20 Apr 2017 16:06:06 +0100 Subject: [PATCH 4/8] Formatting changes. --- .../Services/Basket/BasketService.cs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs index ae7617115..c3607c1e3 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs @@ -16,8 +16,7 @@ namespace eShopOnContainers.Core.Services.Basket } public async Task GetBasketAsync(string guidUser, string token) - { - + { UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint); builder.Path = guidUser; @@ -30,18 +29,17 @@ namespace eShopOnContainers.Core.Services.Basket ServicesHelper.FixBasketItemPictureUri(basket?.Items); return basket; - } public async Task UpdateBasketAsync(CustomerBasket customerBasket, string token) { - UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint); + UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint); - string uri = builder.ToString(); + string uri = builder.ToString(); - var result = await _requestProvider.PostAsync(uri, customerBasket, token); + var result = await _requestProvider.PostAsync(uri, customerBasket, token); - return result; + return result; } public async Task ClearBasketAsync(string guidUser, string token) From 40dddbaa3f94771ddd427a1cdd23eeba85ae23bb Mon Sep 17 00:00:00 2001 From: David Britch Date: Mon, 24 Apr 2017 17:37:53 +0100 Subject: [PATCH 5/8] View model unit tests added. --- .../Behaviors/EventToCommandBehavior.cs | 2 +- .../MainActivity.cs | 2 +- .../eShopOnContainers.TestRunner.Droid.csproj | 1 + .../AppDelegate.cs | 2 +- .../eShopOnContainers.TestRunner.iOS.csproj | 6 + .../packages.config | 1 + .../Behaviors/EventToCommandBehaviorTests.cs | 120 +++++++++ .../eShopOnContainers.UnitTests/DummyTests.cs | 27 -- .../Mocks/MockEventToCommandBehavior.cs | 12 + .../{ => Services}/BasketServiceTests.cs | 0 .../{ => Services}/CatalogServiceTests.cs | 0 .../{ => Services}/OrdersServiceTests.cs | 20 +- .../ViewModels/CatalogViewModelTests.cs | 248 ++++++++++++++++++ .../ViewModels/MainViewModelTests.cs | 56 ++++ .../ViewModels/OrderViewModelTests.cs | 55 ++++ .../eShopOnContainers.UnitTests.csproj | 28 +- .../packages.config | 15 +- 17 files changed, 543 insertions(+), 52 deletions(-) create mode 100644 src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Behaviors/EventToCommandBehaviorTests.cs delete mode 100644 src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/DummyTests.cs create mode 100644 src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockEventToCommandBehavior.cs rename src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/{ => Services}/BasketServiceTests.cs (100%) rename src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/{ => Services}/CatalogServiceTests.cs (100%) rename src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/{ => Services}/OrdersServiceTests.cs (55%) create mode 100644 src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/CatalogViewModelTests.cs create mode 100644 src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MainViewModelTests.cs create mode 100644 src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/OrderViewModelTests.cs diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Behaviors/EventToCommandBehavior.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Behaviors/EventToCommandBehavior.cs index af70fc2d9..ee0aa89e3 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Behaviors/EventToCommandBehavior.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Behaviors/EventToCommandBehavior.cs @@ -31,7 +31,7 @@ namespace eShopOnContainers.Core.Behaviors BindableProperty.CreateAttached("EventArgsConverterParameter", typeof(object), typeof(EventToCommandBehavior), null, BindingMode.OneWay); - private Delegate _handler; + protected Delegate _handler; private EventInfo _eventInfo; public string EventName diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/MainActivity.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/MainActivity.cs index 3344874f5..843195c33 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/MainActivity.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/MainActivity.cs @@ -14,7 +14,7 @@ namespace eShopOnContainers.TestRunner.Droid AddExecutionAssembly(typeof(ExtensibilityPointFactory).Assembly); // or in any reference assemblies getting the Assembly from any type/class - AddTestAssembly(typeof(UnitTests.DummyTests).Assembly); + AddTestAssembly(typeof(UnitTests.CatalogViewModelTests).Assembly); base.OnCreate(bundle); } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/eShopOnContainers.TestRunner.Droid.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/eShopOnContainers.TestRunner.Droid.csproj index e4132d7fa..be2e82d00 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/eShopOnContainers.TestRunner.Droid.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/eShopOnContainers.TestRunner.Droid.csproj @@ -20,6 +20,7 @@ Properties\AndroidManifest.xml + true diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/AppDelegate.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/AppDelegate.cs index 686dea845..67c4a9a36 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/AppDelegate.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/AppDelegate.cs @@ -17,7 +17,7 @@ namespace eShopOnContainers.TestRunner.iOS // Otherwise you need to ensure that the test assemblies will // become part of the app bundle - AddTestAssembly(typeof(UnitTests.DummyTests).Assembly); + AddTestAssembly(typeof(UnitTests.CatalogViewModelTests).Assembly); return base.FinishedLaunching(app, options); } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/eShopOnContainers.TestRunner.iOS.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/eShopOnContainers.TestRunner.iOS.csproj index 5b4c3c548..0122264ae 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/eShopOnContainers.TestRunner.iOS.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/eShopOnContainers.TestRunner.iOS.csproj @@ -155,6 +155,12 @@ ..\..\..\..\packages\xunit.runner.utility.2.2.0-beta4-build3444\lib\netstandard1.1\xunit.runner.utility.dotnet.dll True + + ..\..\..\..\packages\Xam.Plugins.Settings.2.6.0.12-beta\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll + + + ..\..\..\..\packages\Xam.Plugins.Settings.2.6.0.12-beta\lib\Xamarin.iOS10\Plugin.Settings.dll + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/packages.config b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/packages.config index dbdc2d2f5..ab2dec370 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/packages.config +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/packages.config @@ -1,6 +1,7 @@  + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Behaviors/EventToCommandBehaviorTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Behaviors/EventToCommandBehaviorTests.cs new file mode 100644 index 000000000..ce6ce8f96 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Behaviors/EventToCommandBehaviorTests.cs @@ -0,0 +1,120 @@ +using Xunit; +using Xamarin.Forms; +using System; +using System.Globalization; + +namespace eShopOnContainers.UnitTests +{ + public class EventToCommandBehaviorTests + { + [Fact] + public void InvalidEventNameShouldThrowArgumentExceptionText() + { + var behavior = new MockEventToCommandBehavior + { + EventName = "OnItemTapped" + }; + var listView = new ListView(); + + Assert.Throws(() => listView.Behaviors.Add(behavior)); + } + + [Fact] + public void CommandExecutedWhenEventFiresText() + { + bool executedCommand = false; + var behavior = new MockEventToCommandBehavior + { + EventName = "ItemTapped", + Command = new Command(() => + { + executedCommand = true; + }) + }; + var listView = new ListView(); + listView.Behaviors.Add(behavior); + + behavior.RaiseEvent(listView, null); + + Assert.True(executedCommand); + } + + [Fact] + public void CommandCanExecuteTest() + { + var behavior = new MockEventToCommandBehavior + { + EventName = "ItemTapped", + Command = new Command(() => Assert.True(false), () => false) + }; + var listView = new ListView(); + listView.Behaviors.Add(behavior); + + behavior.RaiseEvent(listView, null); + } + + [Fact] + public void CommandCanExecuteWithParameterShouldNotExecuteTest() + { + bool shouldExecute = false; + var behavior = new MockEventToCommandBehavior + { + EventName = "ItemTapped", + CommandParameter = shouldExecute, + Command = new Command(o => Assert.True(false), o => o.Equals(true)) + }; + var listView = new ListView(); + listView.Behaviors.Add(behavior); + + behavior.RaiseEvent(listView, null); + } + + [Fact] + public void CommandWithConverterTest() + { + const string item = "ItemProperty"; + bool executedCommand = false; + var behavior = new MockEventToCommandBehavior + { + EventName = "ItemTapped", + EventArgsConverter = new ItemTappedEventArgsConverter(false), + Command = new Command(o => + { + executedCommand = true; + Assert.NotNull(o); + Assert.Equal(item, o); + }) + }; + var listView = new ListView(); + listView.Behaviors.Add(behavior); + + behavior.RaiseEvent(listView, new ItemTappedEventArgs(listView, item)); + + Assert.True(executedCommand); + } + + private class ItemTappedEventArgsConverter : IValueConverter + { + private readonly bool _returnParameter; + + public bool HasConverted { get; private set; } + + public ItemTappedEventArgsConverter(bool returnParameter) + { + _returnParameter = returnParameter; + } + + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + HasConverted = true; + return _returnParameter ? parameter : (value as ItemTappedEventArgs)?.Item; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + } + +} diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/DummyTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/DummyTests.cs deleted file mode 100644 index 89257db27..000000000 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/DummyTests.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Threading.Tasks; -using Xunit; - -namespace eShopOnContainers.UnitTests -{ - public class DummyTests - { - [Fact] - public void ThisShouldPass_Sync() - { - Assert.True(true); - } - - [Fact] - public async Task ThisShouldPass_Async() - { - await Task.Run(() => { Assert.True(true); }); - } - - [Fact] - public async Task ThisShouldFail_Async() - { - await Task.Run(() => { throw new Exception("Oops!"); }); - } - } -} \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockEventToCommandBehavior.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockEventToCommandBehavior.cs new file mode 100644 index 000000000..16ad65044 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockEventToCommandBehavior.cs @@ -0,0 +1,12 @@ +using eShopOnContainers.Core.Behaviors; + +namespace eShopOnContainers.UnitTests +{ + public class MockEventToCommandBehavior : EventToCommandBehavior + { + public void RaiseEvent(params object[] args) + { + _handler.DynamicInvoke(args); + } + } +} diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/BasketServiceTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Services/BasketServiceTests.cs similarity index 100% rename from src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/BasketServiceTests.cs rename to src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Services/BasketServiceTests.cs diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/CatalogServiceTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Services/CatalogServiceTests.cs similarity index 100% rename from src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/CatalogServiceTests.cs rename to src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Services/CatalogServiceTests.cs diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/OrdersServiceTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Services/OrdersServiceTests.cs similarity index 55% rename from src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/OrdersServiceTests.cs rename to src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Services/OrdersServiceTests.cs index a235234cc..f8411ef6f 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/OrdersServiceTests.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Services/OrdersServiceTests.cs @@ -1,6 +1,5 @@ using eShopOnContainers.Core; using eShopOnContainers.Core.Services.Order; -using eShopOnContainers.Core.Services.RequestProvider; using System.Threading.Tasks; using Xunit; @@ -8,6 +7,15 @@ namespace eShopOnContainers.UnitTests { public class OrdersServiceTests { + [Fact] + public async Task GetFakeOrderTest() + { + var ordersMockService = new OrderMockService(); + var order = await ordersMockService.GetOrderAsync(1, GlobalSetting.Instance.AuthToken); + + Assert.NotNull(order); + } + [Fact] public async Task GetFakeOrdersTest() { @@ -16,15 +24,5 @@ namespace eShopOnContainers.UnitTests Assert.NotEqual(0, result.Count); } - - [Fact] - public async Task GetOrdersTest() - { - var requestProvider = new RequestProvider(); - var ordersService = new OrderService(requestProvider); - var result = await ordersService.GetOrdersAsync(GlobalSetting.Instance.AuthToken); - - Assert.NotEqual(0, result.Count); - } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/CatalogViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/CatalogViewModelTests.cs new file mode 100644 index 000000000..7c39f80bb --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/CatalogViewModelTests.cs @@ -0,0 +1,248 @@ +using Xunit; +using eShopOnContainers.Core.ViewModels; +using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.Core.Services.Catalog; +using eShopOnContainers.Core.Models.Catalog; +using System.Threading.Tasks; +using System.Linq; + +namespace eShopOnContainers.UnitTests +{ + public class CatalogViewModelTests + { + [Fact] + public void AddCatalogItemCommandIsNotNullTest() + { + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + Assert.NotNull(catalogViewModel.AddCatalogItemCommand); + } + + [Fact] + public void FilterCommandIsNotNullTest() + { + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + Assert.NotNull(catalogViewModel.FilterCommand); + } + + [Fact] + public void ClearFilterCommandIsNotNullTest() + { + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + Assert.NotNull(catalogViewModel.ClearFilterCommand); + } + + [Fact] + public void ProductsPropertyIsNullWhenViewModelInstantiatedTest() + { + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + Assert.Null(catalogViewModel.Products); + } + + [Fact] + public void BrandsPropertyuIsNullWhenViewModelInstantiatedTest() + { + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + Assert.Null(catalogViewModel.Brands); + } + + [Fact] + public void BrandPropertyIsNullWhenViewModelInstantiatedTest() + { + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + Assert.Null(catalogViewModel.Brand); + } + + [Fact] + public void TypesPropertyIsNullWhenViewModelInstantiatedTest() + { + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + Assert.Null(catalogViewModel.Types); + } + + [Fact] + public void TypePropertyIsNullWhenViewModelInstantiatedTest() + { + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + Assert.Null(catalogViewModel.Type); + } + + [Fact] + public void IsFilterPropertyIsFalseWhenViewModelInstantiatedTest() + { + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + Assert.False(catalogViewModel.IsFilter); + } + + [Fact] + public async Task ProductsPropertyIsNotNullAfterViewModelInitializationTest() + { + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + await catalogViewModel.InitializeAsync(null); + + Assert.NotNull(catalogViewModel.Products); + } + + [Fact] + public async Task BrandsPropertyIsNotNullAfterViewModelInitializationTest() + { + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + await catalogViewModel.InitializeAsync(null); + + Assert.NotNull(catalogViewModel.Brands); + } + + [Fact] + public async Task TypesPropertyIsNotNullAfterViewModelInitializationTest() + { + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + await catalogViewModel.InitializeAsync(null); + + Assert.NotNull(catalogViewModel.Types); + } + + [Fact] + public async Task SettingProductsPropertyShouldRaisePropertyChanged() + { + bool invoked = false; + + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + catalogViewModel.PropertyChanged += (sender, e) => + { + if (e.PropertyName.Equals("Products")) + invoked = true; + }; + await catalogViewModel.InitializeAsync(null); + + Assert.True(invoked); + } + + [Fact] + public async Task SettingBrandsPropertyShouldRaisePropertyChanged() + { + bool invoked = false; + + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + catalogViewModel.PropertyChanged += (sender, e) => + { + if (e.PropertyName.Equals("Brands")) + invoked = true; + }; + await catalogViewModel.InitializeAsync(null); + + Assert.True(invoked); + } + + [Fact] + public async Task SettingTypesPropertyShouldRaisePropertyChanged() + { + bool invoked = false; + + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + catalogViewModel.PropertyChanged += (sender, e) => + { + if (e.PropertyName.Equals("Types")) + invoked = true; + }; + await catalogViewModel.InitializeAsync(null); + + Assert.True(invoked); + } + + [Fact] + public void AddCatalogItemCommandSendsAddProductMessageTest() + { + bool messageReceived = false; + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + Xamarin.Forms.MessagingCenter.Subscribe(this, MessageKeys.AddProduct, (sender, arg) => + { + messageReceived = true; + }); + catalogViewModel.AddCatalogItemCommand.Execute(null); + + Assert.True(messageReceived); + } + + [Fact] + public async Task FilterCommandSendsFilterMessageTest() + { + bool messageReceived = false; + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + await catalogViewModel.InitializeAsync(null); + catalogViewModel.Brand = catalogViewModel.Brands.FirstOrDefault(); + catalogViewModel.Type = catalogViewModel.Types.FirstOrDefault(); + + Xamarin.Forms.MessagingCenter.Subscribe(this, MessageKeys.Filter, (sender) => + { + messageReceived = true; + }); + catalogViewModel.FilterCommand.Execute(null); + + Assert.True(messageReceived); + } + + [Fact] + public async Task ClearFilterCommandResetsPropertiesTest() + { + var catalogService = new CatalogMockService(); + ViewModelLocator.RegisterDependencies(true); + var catalogViewModel = new CatalogViewModel(catalogService); + + await catalogViewModel.InitializeAsync(null); + catalogViewModel.ClearFilterCommand.Execute(null); + + Assert.Null(catalogViewModel.Brand); + Assert.Null(catalogViewModel.Type); + Assert.NotNull(catalogViewModel.Products); + } + } +} diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MainViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MainViewModelTests.cs new file mode 100644 index 000000000..8766b5d46 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MainViewModelTests.cs @@ -0,0 +1,56 @@ +using Xunit; +using eShopOnContainers.Core.ViewModels; +using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.Core.Models.Navigation; +using System.Threading.Tasks; + +namespace eShopOnContainers.UnitTests +{ + public class MainViewModelTests + { + [Fact] + public void SettingsCommandIsNotNullWhenViewModelInstantiatedTest() + { + ViewModelLocator.RegisterDependencies(true); + var mainViewModel = new MainViewModel(); + + Assert.NotNull(mainViewModel.SettingsCommand); + } + + [Fact] + public async Task ViewModelInitializationSendsChangeTabMessageTest() + { + bool messageReceived = false; + ViewModelLocator.RegisterDependencies(true); + var mainViewModel = new MainViewModel(); + var tabParam = new TabParameter { TabIndex = 2 }; + + Xamarin.Forms.MessagingCenter.Subscribe(this, MessageKeys.ChangeTab, (sender, arg) => + { + messageReceived = true; + }); + await mainViewModel.InitializeAsync(tabParam); + + Assert.True(messageReceived); + } + + [Fact] + public void IsBusyPropertyIsFalseWhenViewModelInstantiatedTest() + { + ViewModelLocator.RegisterDependencies(true); + var mainViewModel = new MainViewModel(); + Assert.False(mainViewModel.IsBusy); + } + + [Fact] + public async Task IsBusyPropertyIsTrueAfterViewModelInitializationTest() + { + ViewModelLocator.RegisterDependencies(true); + var mainViewModel = new MainViewModel(); + + await mainViewModel.InitializeAsync(null); + + Assert.True(mainViewModel.IsBusy); + } + } +} diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/OrderViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/OrderViewModelTests.cs new file mode 100644 index 000000000..50a21b1be --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/OrderViewModelTests.cs @@ -0,0 +1,55 @@ +using Xunit; +using eShopOnContainers.Core; +using eShopOnContainers.Core.ViewModels; +using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.Core.Services.Order; +using System.Threading.Tasks; + +namespace eShopOnContainers.UnitTests +{ + public class OrderViewModelTests + { + [Fact] + public void OrderPropertyIsNullWhenViewModelInstantiatedTest() + { + var orderService = new OrderMockService(); + ViewModelLocator.RegisterDependencies(true); + var orderViewModel = new OrderDetailViewModel(orderService); + + Assert.Null(orderViewModel.Order); + } + + [Fact] + public async Task OrderPropertyIsNotNullAfterViewModelInitializationTest() + { + var orderService = new OrderMockService(); + ViewModelLocator.RegisterDependencies(true); + var orderViewModel = new OrderDetailViewModel(orderService); + + var order = await orderService.GetOrderAsync(1, GlobalSetting.Instance.AuthToken); + await orderViewModel.InitializeAsync(order); + + Assert.NotNull(orderViewModel.Order); + } + + [Fact] + public async Task SettingOrderPropertyShouldRaisePropertyChanged() + { + bool invoked = false; + + var orderService = new OrderMockService(); + ViewModelLocator.RegisterDependencies(true); + var orderViewModel = new OrderDetailViewModel(orderService); + + orderViewModel.PropertyChanged += (sender, e) => + { + if (e.PropertyName.Equals("Order")) + invoked = true; + }; + var order = await orderService.GetOrderAsync(1, GlobalSetting.Instance.AuthToken); + await orderViewModel.InitializeAsync(order); + + Assert.True(invoked); + } + } +} \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj index 1225ae872..f91348b46 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj @@ -34,11 +34,15 @@ 4 - - - - + + + + + + + + @@ -57,6 +61,15 @@ ..\..\..\..\packages\xunit.extensibility.execution.2.2.0-beta4-build3444\lib\netstandard1.0\xunit.execution.dotnet.dll True + + ..\..\..\..\packages\Xamarin.Forms.2.3.4.231\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Core.dll + + + ..\..\..\..\packages\Xamarin.Forms.2.3.4.231\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Platform.dll + + + ..\..\..\..\packages\Xamarin.Forms.2.3.4.231\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Xaml.dll + @@ -68,6 +81,12 @@ eShopOnContainers.Core + + + + + + + \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/packages.config b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/packages.config index a26539956..4b0dc784c 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/packages.config +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/packages.config @@ -1,10 +1,11 @@  - - - - - - - + + + + + + + + \ No newline at end of file From 64b37cd4eb7455dd42634f074fcd17d59d7e7443 Mon Sep 17 00:00:00 2001 From: David Britch Date: Tue, 25 Apr 2017 11:07:35 +0100 Subject: [PATCH 6/8] Unit tests added. --- .../App.xaml.cs | 2 +- .../Mocks/MockViewModel.cs | 53 +++++++++++ .../ViewModels/MockViewModelTests.cs | 92 +++++++++++++++++++ .../eShopOnContainers.UnitTests.csproj | 2 + 4 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockViewModel.cs create mode 100644 src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs 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 @@ + + From 641bf1a1ac2b24e8ee99c1296cf96df4588ee4be Mon Sep 17 00:00:00 2001 From: David Britch Date: Tue, 25 Apr 2017 11:52:46 +0100 Subject: [PATCH 7/8] Validation unit tests updated. --- .../ViewModels/MockViewModelTests.cs | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs index 74c607af4..2f9abe66f 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs @@ -14,6 +14,12 @@ namespace eShopOnContainers.UnitTests bool isValid = mockViewModel.Validate(); Assert.False(isValid); + Assert.Null(mockViewModel.Forename.Value); + Assert.Null(mockViewModel.Surname.Value); + Assert.False(mockViewModel.Forename.IsValid); + Assert.False(mockViewModel.Surname.IsValid); + Assert.NotEmpty(mockViewModel.Forename.Errors); + Assert.NotEmpty(mockViewModel.Surname.Errors); } [Fact] @@ -26,6 +32,12 @@ namespace eShopOnContainers.UnitTests bool isValid = mockViewModel.Validate(); Assert.False(isValid); + Assert.NotNull(mockViewModel.Forename.Value); + Assert.Null(mockViewModel.Surname.Value); + Assert.True(mockViewModel.Forename.IsValid); + Assert.False(mockViewModel.Surname.IsValid); + Assert.Empty(mockViewModel.Forename.Errors); + Assert.NotEmpty(mockViewModel.Surname.Errors); } [Fact] @@ -38,10 +50,16 @@ namespace eShopOnContainers.UnitTests bool isValid = mockViewModel.Validate(); Assert.False(isValid); + Assert.Null(mockViewModel.Forename.Value); + Assert.NotNull(mockViewModel.Surname.Value); + Assert.False(mockViewModel.Forename.IsValid); + Assert.True(mockViewModel.Surname.IsValid); + Assert.NotEmpty(mockViewModel.Forename.Errors); + Assert.Empty(mockViewModel.Surname.Errors); } [Fact] - public void CheckValidationPassesWhenPropertiesHaveDataTest() + public void CheckValidationPassesWhenBothPropertiesHaveDataTest() { ViewModelLocator.RegisterDependencies(true); var mockViewModel = new MockViewModel(); @@ -51,6 +69,12 @@ namespace eShopOnContainers.UnitTests bool isValid = mockViewModel.Validate(); Assert.True(isValid); + Assert.NotNull(mockViewModel.Forename.Value); + Assert.NotNull(mockViewModel.Surname.Value); + Assert.True(mockViewModel.Forename.IsValid); + Assert.True(mockViewModel.Surname.IsValid); + Assert.Empty(mockViewModel.Forename.Errors); + Assert.Empty(mockViewModel.Surname.Errors); } [Fact] From c0800ede1eaa1d8144730e381632085696840401 Mon Sep 17 00:00:00 2001 From: David Britch Date: Tue, 25 Apr 2017 15:31:02 +0100 Subject: [PATCH 8/8] Refactored unit tests. --- .../ViewModels/CatalogViewModelTests.cs | 35 +++---------------- .../ViewModels/MainViewModelTests.cs | 12 +++---- .../ViewModels/MockViewModelTests.cs | 13 +++---- .../ViewModels/OrderViewModelTests.cs | 10 +++--- 4 files changed, 20 insertions(+), 50 deletions(-) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/CatalogViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/CatalogViewModelTests.cs index 7c39f80bb..c1d4deaec 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/CatalogViewModelTests.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/CatalogViewModelTests.cs @@ -10,13 +10,16 @@ namespace eShopOnContainers.UnitTests { public class CatalogViewModelTests { + public CatalogViewModelTests() + { + ViewModelLocator.RegisterDependencies(true); + } + [Fact] public void AddCatalogItemCommandIsNotNullTest() { var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); - Assert.NotNull(catalogViewModel.AddCatalogItemCommand); } @@ -24,9 +27,7 @@ namespace eShopOnContainers.UnitTests public void FilterCommandIsNotNullTest() { var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); - Assert.NotNull(catalogViewModel.FilterCommand); } @@ -34,9 +35,7 @@ namespace eShopOnContainers.UnitTests public void ClearFilterCommandIsNotNullTest() { var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); - Assert.NotNull(catalogViewModel.ClearFilterCommand); } @@ -44,9 +43,7 @@ namespace eShopOnContainers.UnitTests public void ProductsPropertyIsNullWhenViewModelInstantiatedTest() { var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); - Assert.Null(catalogViewModel.Products); } @@ -54,9 +51,7 @@ namespace eShopOnContainers.UnitTests public void BrandsPropertyuIsNullWhenViewModelInstantiatedTest() { var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); - Assert.Null(catalogViewModel.Brands); } @@ -64,9 +59,7 @@ namespace eShopOnContainers.UnitTests public void BrandPropertyIsNullWhenViewModelInstantiatedTest() { var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); - Assert.Null(catalogViewModel.Brand); } @@ -74,9 +67,7 @@ namespace eShopOnContainers.UnitTests public void TypesPropertyIsNullWhenViewModelInstantiatedTest() { var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); - Assert.Null(catalogViewModel.Types); } @@ -84,9 +75,7 @@ namespace eShopOnContainers.UnitTests public void TypePropertyIsNullWhenViewModelInstantiatedTest() { var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); - Assert.Null(catalogViewModel.Type); } @@ -94,9 +83,7 @@ namespace eShopOnContainers.UnitTests public void IsFilterPropertyIsFalseWhenViewModelInstantiatedTest() { var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); - Assert.False(catalogViewModel.IsFilter); } @@ -104,7 +91,6 @@ namespace eShopOnContainers.UnitTests public async Task ProductsPropertyIsNotNullAfterViewModelInitializationTest() { var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); await catalogViewModel.InitializeAsync(null); @@ -116,7 +102,6 @@ namespace eShopOnContainers.UnitTests public async Task BrandsPropertyIsNotNullAfterViewModelInitializationTest() { var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); await catalogViewModel.InitializeAsync(null); @@ -128,7 +113,6 @@ namespace eShopOnContainers.UnitTests public async Task TypesPropertyIsNotNullAfterViewModelInitializationTest() { var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); await catalogViewModel.InitializeAsync(null); @@ -140,9 +124,7 @@ namespace eShopOnContainers.UnitTests public async Task SettingProductsPropertyShouldRaisePropertyChanged() { bool invoked = false; - var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); catalogViewModel.PropertyChanged += (sender, e) => @@ -159,9 +141,7 @@ namespace eShopOnContainers.UnitTests public async Task SettingBrandsPropertyShouldRaisePropertyChanged() { bool invoked = false; - var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); catalogViewModel.PropertyChanged += (sender, e) => @@ -178,9 +158,7 @@ namespace eShopOnContainers.UnitTests public async Task SettingTypesPropertyShouldRaisePropertyChanged() { bool invoked = false; - var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); catalogViewModel.PropertyChanged += (sender, e) => @@ -198,7 +176,6 @@ namespace eShopOnContainers.UnitTests { bool messageReceived = false; var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); Xamarin.Forms.MessagingCenter.Subscribe(this, MessageKeys.AddProduct, (sender, arg) => @@ -215,7 +192,6 @@ namespace eShopOnContainers.UnitTests { bool messageReceived = false; var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); await catalogViewModel.InitializeAsync(null); catalogViewModel.Brand = catalogViewModel.Brands.FirstOrDefault(); @@ -234,7 +210,6 @@ namespace eShopOnContainers.UnitTests public async Task ClearFilterCommandResetsPropertiesTest() { var catalogService = new CatalogMockService(); - ViewModelLocator.RegisterDependencies(true); var catalogViewModel = new CatalogViewModel(catalogService); await catalogViewModel.InitializeAsync(null); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MainViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MainViewModelTests.cs index 8766b5d46..1ccffcd34 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MainViewModelTests.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MainViewModelTests.cs @@ -8,12 +8,15 @@ namespace eShopOnContainers.UnitTests { public class MainViewModelTests { + public MainViewModelTests() + { + ViewModelLocator.RegisterDependencies(true); + } + [Fact] public void SettingsCommandIsNotNullWhenViewModelInstantiatedTest() { - ViewModelLocator.RegisterDependencies(true); var mainViewModel = new MainViewModel(); - Assert.NotNull(mainViewModel.SettingsCommand); } @@ -21,7 +24,6 @@ namespace eShopOnContainers.UnitTests public async Task ViewModelInitializationSendsChangeTabMessageTest() { bool messageReceived = false; - ViewModelLocator.RegisterDependencies(true); var mainViewModel = new MainViewModel(); var tabParam = new TabParameter { TabIndex = 2 }; @@ -37,7 +39,6 @@ namespace eShopOnContainers.UnitTests [Fact] public void IsBusyPropertyIsFalseWhenViewModelInstantiatedTest() { - ViewModelLocator.RegisterDependencies(true); var mainViewModel = new MainViewModel(); Assert.False(mainViewModel.IsBusy); } @@ -45,11 +46,8 @@ namespace eShopOnContainers.UnitTests [Fact] public async Task IsBusyPropertyIsTrueAfterViewModelInitializationTest() { - ViewModelLocator.RegisterDependencies(true); var mainViewModel = new MainViewModel(); - await mainViewModel.InitializeAsync(null); - Assert.True(mainViewModel.IsBusy); } } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs index 2f9abe66f..82312bc69 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs @@ -5,10 +5,14 @@ namespace eShopOnContainers.UnitTests { public class MockViewModelTests { + public MockViewModelTests() + { + ViewModelLocator.RegisterDependencies(true); + } + [Fact] public void CheckValidationFailsWhenPropertiesAreEmptyTest() { - ViewModelLocator.RegisterDependencies(true); var mockViewModel = new MockViewModel(); bool isValid = mockViewModel.Validate(); @@ -25,7 +29,6 @@ namespace eShopOnContainers.UnitTests [Fact] public void CheckValidationFailsWhenOnlyForenameHasDataTest() { - ViewModelLocator.RegisterDependencies(true); var mockViewModel = new MockViewModel(); mockViewModel.Forename.Value = "John"; @@ -43,7 +46,6 @@ namespace eShopOnContainers.UnitTests [Fact] public void CheckValidationPassesWhenOnlySurnameHasDataTest() { - ViewModelLocator.RegisterDependencies(true); var mockViewModel = new MockViewModel(); mockViewModel.Surname.Value = "Smith"; @@ -61,7 +63,6 @@ namespace eShopOnContainers.UnitTests [Fact] public void CheckValidationPassesWhenBothPropertiesHaveDataTest() { - ViewModelLocator.RegisterDependencies(true); var mockViewModel = new MockViewModel(); mockViewModel.Forename.Value = "John"; mockViewModel.Surname.Value = "Smith"; @@ -81,8 +82,6 @@ namespace eShopOnContainers.UnitTests public void SettingForenamePropertyShouldRaisePropertyChanged() { bool invoked = false; - - ViewModelLocator.RegisterDependencies(true); var mockViewModel = new MockViewModel(); mockViewModel.Forename.PropertyChanged += (sender, e) => @@ -99,8 +98,6 @@ namespace eShopOnContainers.UnitTests public void SettingSurnamePropertyShouldRaisePropertyChanged() { bool invoked = false; - - ViewModelLocator.RegisterDependencies(true); var mockViewModel = new MockViewModel(); mockViewModel.Surname.PropertyChanged += (sender, e) => diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/OrderViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/OrderViewModelTests.cs index 50a21b1be..fbfc6a951 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/OrderViewModelTests.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/OrderViewModelTests.cs @@ -9,13 +9,16 @@ namespace eShopOnContainers.UnitTests { public class OrderViewModelTests { + public OrderViewModelTests() + { + ViewModelLocator.RegisterDependencies(true); + } + [Fact] public void OrderPropertyIsNullWhenViewModelInstantiatedTest() { var orderService = new OrderMockService(); - ViewModelLocator.RegisterDependencies(true); var orderViewModel = new OrderDetailViewModel(orderService); - Assert.Null(orderViewModel.Order); } @@ -23,7 +26,6 @@ namespace eShopOnContainers.UnitTests public async Task OrderPropertyIsNotNullAfterViewModelInitializationTest() { var orderService = new OrderMockService(); - ViewModelLocator.RegisterDependencies(true); var orderViewModel = new OrderDetailViewModel(orderService); var order = await orderService.GetOrderAsync(1, GlobalSetting.Instance.AuthToken); @@ -36,9 +38,7 @@ namespace eShopOnContainers.UnitTests public async Task SettingOrderPropertyShouldRaisePropertyChanged() { bool invoked = false; - var orderService = new OrderMockService(); - ViewModelLocator.RegisterDependencies(true); var orderViewModel = new OrderDetailViewModel(orderService); orderViewModel.PropertyChanged += (sender, e) =>