diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs index b7721017b..a27d27796 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs @@ -96,6 +96,11 @@ namespace eShopOnContainers.Core.ViewModels.Base } } + public static void RegisterSingleton() where TInterface : class where T : class, TInterface + { + _container.Register().AsSingleton(); + } + public static T Resolve() where T : class { return _container.Resolve(); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Helpers/PropertyChangeTracker.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Helpers/PropertyChangeTracker.cs deleted file mode 100644 index 347a3a707..000000000 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Helpers/PropertyChangeTracker.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; - -namespace eShopOnContainers.UnitTests.Helpers -{ - public class PropertyChangeTracker - { - List _notifications = new List(); - - public PropertyChangeTracker(INotifyPropertyChanged changer) - { - changer.PropertyChanged += (sender, e) => _notifications.Add(e.PropertyName + ".Value"); - } - - //public string[] ChangedProperties - //{ - // get { return _notifications.ToArray(); } - //} - - public bool WaitForChange(string propertyName, int maxWaitMilliSeconds) - { - var startTime = DateTime.UtcNow; - while (!_notifications.Contains(propertyName)) - { - if (startTime.AddMilliseconds(maxWaitMilliSeconds) < DateTime.UtcNow) - return false; - - } - return true; - } - - public bool WaitForChange(string propertyName, TimeSpan maxWait) - { - var startTime = DateTime.UtcNow; - while (!_notifications.Contains(propertyName)) - { - if (startTime + maxWait < DateTime.UtcNow) - return false; - - } - return true; - } - - public void Reset() - { - _notifications.Clear(); - } - } -} diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockSettingsService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockSettingsService.cs new file mode 100644 index 000000000..c47c4e262 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockSettingsService.cs @@ -0,0 +1,65 @@ +using System; +using eShopOnContainers.Core.Services.Settings; + +namespace eShopOnContainers.UnitTests.Mocks +{ + public class MockSettingsService : ISettingsService + { + string _accessTokenDefault = string.Empty; + string _idTokenDefault = string.Empty; + bool _useMocksDefault = true; + string _urlBaseDefault = "https://13.88.8.119"; + bool _useFakeLocationDefault = false; + bool _allowGpsLocationDefault = false; + double _fakeLatitudeDefault = 47.604610d; + double _fakeLongitudeDefault = -122.315752d; + + public string AuthAccessToken + { + get { return _accessTokenDefault; } + set { _accessTokenDefault = value; } + } + + public string AuthIdToken + { + get { return _idTokenDefault; } + set { _idTokenDefault = value; } + } + + public bool UseMocks + { + get { return _useMocksDefault; } + set { _useMocksDefault = value; } + } + + public string UrlBase + { + get { return _urlBaseDefault; } + set { _urlBaseDefault = value; } + } + + public bool UseFakeLocation + { + get { return _useFakeLocationDefault; } + set { _useFakeLocationDefault = value; } + } + + public string Latitude + { + get { return _fakeLatitudeDefault.ToString(); } + set { _fakeLatitudeDefault = Convert.ToDouble(value); } + } + + public string Longitude + { + get { return _fakeLongitudeDefault.ToString(); } + set { _fakeLongitudeDefault = Convert.ToDouble(value); } + } + + public bool AllowGpsLocation + { + get { return _allowGpsLocationDefault; } + set { _allowGpsLocationDefault = value; } + } + } +} diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Services/MarketingServiceTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Services/MarketingServiceTests.cs index 052c5a4a8..32091eaa4 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Services/MarketingServiceTests.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Services/MarketingServiceTests.cs @@ -1,11 +1,10 @@ -namespace eShopOnContainers.UnitTests.Services -{ - using System.Threading.Tasks; - using Core; - using Core.Helpers; - using Core.Services.Marketing; - using Xunit; +using System.Threading.Tasks; +using eShopOnContainers.Core; +using eShopOnContainers.Core.Services.Marketing; +using Xunit; +namespace eShopOnContainers.UnitTests.Services +{ public class MarketingServiceTests { [Fact] diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/CatalogViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/CatalogViewModelTests.cs index 60a2ded03..2da535d10 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/CatalogViewModelTests.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/CatalogViewModelTests.cs @@ -5,6 +5,8 @@ using eShopOnContainers.Core.Services.Catalog; using eShopOnContainers.Core.Models.Catalog; using System.Threading.Tasks; using System.Linq; +using eShopOnContainers.Core.Services.Settings; +using eShopOnContainers.UnitTests.Mocks; namespace eShopOnContainers.UnitTests { @@ -13,6 +15,7 @@ namespace eShopOnContainers.UnitTests public CatalogViewModelTests() { ViewModelLocator.UpdateDependencies(true); + ViewModelLocator.RegisterSingleton(); } [Fact] diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MainViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MainViewModelTests.cs index ca768fc6d..94e0dabfc 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MainViewModelTests.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MainViewModelTests.cs @@ -2,53 +2,56 @@ using eShopOnContainers.Core.ViewModels; using eShopOnContainers.Core.ViewModels.Base; using eShopOnContainers.Core.Models.Navigation; +using eShopOnContainers.Core.Services.Settings; +using eShopOnContainers.UnitTests.Mocks; using System.Threading.Tasks; namespace eShopOnContainers.UnitTests { - public class MainViewModelTests - { - public MainViewModelTests() - { - ViewModelLocator.UpdateDependencies(true); - } + public class MainViewModelTests + { + public MainViewModelTests() + { + ViewModelLocator.UpdateDependencies(true); + ViewModelLocator.RegisterSingleton(); + } - [Fact] - public void SettingsCommandIsNotNullWhenViewModelInstantiatedTest() - { - var mainViewModel = new MainViewModel(); - Assert.NotNull(mainViewModel.SettingsCommand); - } + [Fact] + public void SettingsCommandIsNotNullWhenViewModelInstantiatedTest() + { + var mainViewModel = new MainViewModel(); + Assert.NotNull(mainViewModel.SettingsCommand); + } - [Fact] - public async Task ViewModelInitializationSendsChangeTabMessageTest() - { - bool messageReceived = false; - var mainViewModel = new MainViewModel(); - var tabParam = new TabParameter { TabIndex = 2 }; + [Fact] + public async Task ViewModelInitializationSendsChangeTabMessageTest() + { + bool messageReceived = false; + 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); + Xamarin.Forms.MessagingCenter.Subscribe(this, MessageKeys.ChangeTab, (sender, arg) => + { + messageReceived = true; + }); + await mainViewModel.InitializeAsync(tabParam); - Assert.True(messageReceived); - } + Assert.True(messageReceived); + } - [Fact] - public void IsBusyPropertyIsFalseWhenViewModelInstantiatedTest() - { - var mainViewModel = new MainViewModel(); - Assert.False(mainViewModel.IsBusy); - } + [Fact] + public void IsBusyPropertyIsFalseWhenViewModelInstantiatedTest() + { + var mainViewModel = new MainViewModel(); + Assert.False(mainViewModel.IsBusy); + } - [Fact] - public async Task IsBusyPropertyIsTrueAfterViewModelInitializationTest() - { - var mainViewModel = new MainViewModel(); - await mainViewModel.InitializeAsync(null); - Assert.True(mainViewModel.IsBusy); - } - } + [Fact] + public async Task IsBusyPropertyIsTrueAfterViewModelInitializationTest() + { + var mainViewModel = new MainViewModel(); + await mainViewModel.InitializeAsync(null); + Assert.True(mainViewModel.IsBusy); + } + } } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MarketingViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MarketingViewModelTests.cs index 8c58e67eb..c05520535 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MarketingViewModelTests.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MarketingViewModelTests.cs @@ -1,31 +1,36 @@ -namespace eShopOnContainers.UnitTests.ViewModels -{ - using System.Threading.Tasks; - using Xunit; - using Core.ViewModels.Base; - using Core.Services.Marketing; - using Core.ViewModels; +using System.Threading.Tasks; +using Xunit; +using eShopOnContainers.Core.ViewModels.Base; +using eShopOnContainers.Core.Services.Marketing; +using eShopOnContainers.Core.ViewModels; +using eShopOnContainers.UnitTests.Mocks; +using eShopOnContainers.Core.Services.Settings; +namespace eShopOnContainers.UnitTests.ViewModels +{ public class MarketingViewModelTests { public MarketingViewModelTests() { ViewModelLocator.UpdateDependencies(true); + ViewModelLocator.RegisterSingleton(); } [Fact] public void GetCampaignsIsNullTest() { + var settingsService = new MockSettingsService(); var campaignService = new CampaignMockService(); - var campaignViewModel = new CampaignViewModel(campaignService); + var campaignViewModel = new CampaignViewModel(settingsService, campaignService); Assert.Null(campaignViewModel.Campaigns); } [Fact] public async Task GetCampaignsIsNotNullTest() { + var settingsService = new MockSettingsService(); var campaignService = new CampaignMockService(); - var campaignViewModel = new CampaignViewModel(campaignService); + var campaignViewModel = new CampaignViewModel(settingsService, campaignService); await campaignViewModel.InitializeAsync(null); @@ -35,24 +40,27 @@ [Fact] public void GetCampaignDetailsCommandIsNotNullTest() { + var settingsService = new MockSettingsService(); var campaignService = new CampaignMockService(); - var campaignViewModel = new CampaignViewModel(campaignService); + var campaignViewModel = new CampaignViewModel(settingsService, campaignService); Assert.NotNull(campaignViewModel.GetCampaignDetailsCommand); } [Fact] public void GetCampaignDetailsByIdIsNullTest() { + var settingsService = new MockSettingsService(); var campaignService = new CampaignMockService(); - var campaignViewModel = new CampaignDetailsViewModel(campaignService); + var campaignViewModel = new CampaignDetailsViewModel(settingsService, campaignService); Assert.Null(campaignViewModel.Campaign); } [Fact] public async Task GetCampaignDetailsByIdIsNotNullTest() { + var settingsService = new MockSettingsService(); var campaignService = new CampaignMockService(); - var campaignDetailsViewModel = new CampaignDetailsViewModel(campaignService); + var campaignDetailsViewModel = new CampaignDetailsViewModel(settingsService, campaignService); await campaignDetailsViewModel.InitializeAsync(1); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs index 0821f4d98..84a11ed53 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/MockViewModelTests.cs @@ -1,7 +1,5 @@ using Xunit; using eShopOnContainers.Core.ViewModels.Base; -using eShopOnContainers.UnitTests.Helpers; -using System.ComponentModel; namespace eShopOnContainers.UnitTests { @@ -86,15 +84,12 @@ namespace eShopOnContainers.UnitTests bool invoked = false; var mockViewModel = new MockViewModel(); - PropertyChangedEventHandler handler = (sender, e) => + mockViewModel.Forename.PropertyChanged += (sender, e) => { if (e.PropertyName.Equals("Value")) invoked = true; }; - - mockViewModel.Forename.PropertyChanged += handler; mockViewModel.Forename.Value = "John"; - mockViewModel.Forename.PropertyChanged -= handler; Assert.True(invoked); } @@ -105,15 +100,12 @@ namespace eShopOnContainers.UnitTests bool invoked = false; var mockViewModel = new MockViewModel(); - PropertyChangedEventHandler handler = (sender, e) => + mockViewModel.Surname.PropertyChanged += (sender, e) => { if (e.PropertyName.Equals("Value")) invoked = true; }; - - mockViewModel.Surname.PropertyChanged += handler; mockViewModel.Surname.Value = "Smith"; - mockViewModel.Surname.PropertyChanged -= handler; Assert.True(invoked); } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/OrderViewModelTests.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/OrderViewModelTests.cs index 41e05ebc0..ddd86720b 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/OrderViewModelTests.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/ViewModels/OrderViewModelTests.cs @@ -4,52 +4,58 @@ using eShopOnContainers.Core.ViewModels; using eShopOnContainers.Core.ViewModels.Base; using eShopOnContainers.Core.Services.Order; using System.Threading.Tasks; +using eShopOnContainers.UnitTests.Mocks; +using eShopOnContainers.Core.Services.Settings; namespace eShopOnContainers.UnitTests { - public class OrderViewModelTests - { - public OrderViewModelTests() - { - ViewModelLocator.UpdateDependencies(true); - } + public class OrderViewModelTests + { + public OrderViewModelTests() + { + ViewModelLocator.UpdateDependencies(true); + ViewModelLocator.RegisterSingleton(); + } - [Fact] - public void OrderPropertyIsNullWhenViewModelInstantiatedTest() - { - var orderService = new OrderMockService(); - var orderViewModel = new OrderDetailViewModel(orderService); - Assert.Null(orderViewModel.Order); - } + [Fact] + public void OrderPropertyIsNullWhenViewModelInstantiatedTest() + { + var settingsService = new MockSettingsService(); + var orderService = new OrderMockService(); + var orderViewModel = new OrderDetailViewModel(settingsService, orderService); + Assert.Null(orderViewModel.Order); + } - [Fact] - public async Task OrderPropertyIsNotNullAfterViewModelInitializationTest() - { - var orderService = new OrderMockService(); - var orderViewModel = new OrderDetailViewModel(orderService); + [Fact] + public async Task OrderPropertyIsNotNullAfterViewModelInitializationTest() + { + var settingsService = new MockSettingsService(); + var orderService = new OrderMockService(); + var orderViewModel = new OrderDetailViewModel(settingsService, orderService); - var order = await orderService.GetOrderAsync(1, GlobalSetting.Instance.AuthToken); - await orderViewModel.InitializeAsync(order); + var order = await orderService.GetOrderAsync(1, GlobalSetting.Instance.AuthToken); + await orderViewModel.InitializeAsync(order); - Assert.NotNull(orderViewModel.Order); - } + Assert.NotNull(orderViewModel.Order); + } - [Fact] - public async Task SettingOrderPropertyShouldRaisePropertyChanged() - { - bool invoked = false; - var orderService = new OrderMockService(); - var orderViewModel = new OrderDetailViewModel(orderService); + [Fact] + public async Task SettingOrderPropertyShouldRaisePropertyChanged() + { + bool invoked = false; + var settingsService = new MockSettingsService(); + var orderService = new OrderMockService(); + var orderViewModel = new OrderDetailViewModel(settingsService, 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); + 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); - } - } + 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 7366ac97a..74e0d0c29 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/eShopOnContainers.UnitTests.csproj @@ -9,9 +9,6 @@ - - -