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