Unit tests fixed.

This commit is contained in:
David Britch 2018-01-17 11:07:03 +00:00
parent 648b1b3585
commit 473c38e643
10 changed files with 187 additions and 159 deletions

View File

@ -96,6 +96,11 @@ namespace eShopOnContainers.Core.ViewModels.Base
}
}
public static void RegisterSingleton<TInterface, T>() where TInterface : class where T : class, TInterface
{
_container.Register<TInterface, T>().AsSingleton();
}
public static T Resolve<T>() where T : class
{
return _container.Resolve<T>();

View File

@ -1,50 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
namespace eShopOnContainers.UnitTests.Helpers
{
public class PropertyChangeTracker
{
List<string> _notifications = new List<string>();
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();
}
}
}

View File

@ -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; }
}
}
}

View File

@ -1,11 +1,10 @@
namespace eShopOnContainers.UnitTests.Services
{
using System.Threading.Tasks;
using Core;
using Core.Helpers;
using Core.Services.Marketing;
using System.Threading.Tasks;
using eShopOnContainers.Core;
using eShopOnContainers.Core.Services.Marketing;
using Xunit;
namespace eShopOnContainers.UnitTests.Services
{
public class MarketingServiceTests
{
[Fact]

View File

@ -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<ISettingsService, MockSettingsService>();
}
[Fact]

View File

@ -2,6 +2,8 @@
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
@ -11,6 +13,7 @@ namespace eShopOnContainers.UnitTests
public MainViewModelTests()
{
ViewModelLocator.UpdateDependencies(true);
ViewModelLocator.RegisterSingleton<ISettingsService, MockSettingsService>();
}
[Fact]

View File

@ -1,31 +1,36 @@
namespace eShopOnContainers.UnitTests.ViewModels
{
using System.Threading.Tasks;
using System.Threading.Tasks;
using Xunit;
using Core.ViewModels.Base;
using Core.Services.Marketing;
using Core.ViewModels;
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<ISettingsService, MockSettingsService>();
}
[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);

View File

@ -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);
}

View File

@ -4,6 +4,8 @@ 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
{
@ -12,21 +14,24 @@ namespace eShopOnContainers.UnitTests
public OrderViewModelTests()
{
ViewModelLocator.UpdateDependencies(true);
ViewModelLocator.RegisterSingleton<ISettingsService, MockSettingsService>();
}
[Fact]
public void OrderPropertyIsNullWhenViewModelInstantiatedTest()
{
var settingsService = new MockSettingsService();
var orderService = new OrderMockService();
var orderViewModel = new OrderDetailViewModel(orderService);
var orderViewModel = new OrderDetailViewModel(settingsService, orderService);
Assert.Null(orderViewModel.Order);
}
[Fact]
public async Task OrderPropertyIsNotNullAfterViewModelInitializationTest()
{
var settingsService = new MockSettingsService();
var orderService = new OrderMockService();
var orderViewModel = new OrderDetailViewModel(orderService);
var orderViewModel = new OrderDetailViewModel(settingsService, orderService);
var order = await orderService.GetOrderAsync(1, GlobalSetting.Instance.AuthToken);
await orderViewModel.InitializeAsync(order);
@ -38,8 +43,9 @@ namespace eShopOnContainers.UnitTests
public async Task SettingOrderPropertyShouldRaisePropertyChanged()
{
bool invoked = false;
var settingsService = new MockSettingsService();
var orderService = new OrderMockService();
var orderViewModel = new OrderDetailViewModel(orderService);
var orderViewModel = new OrderDetailViewModel(settingsService, orderService);
orderViewModel.PropertyChanged += (sender, e) =>
{

View File

@ -9,9 +9,6 @@
<PackageReference Include="xunit" Version="2.3.1" />
<PackageReference Include="xunit.runner.console" Version="2.3.1" />
</ItemGroup>
<ItemGroup>
<Folder Include="Helpers\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\eShopOnContainers.Core\eShopOnContainers.Core.csproj" />
</ItemGroup>