using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Moq; using NUnit.Framework; using WotBlitzStatisticsPro.Common.Model; using WotBlitzStatisticsPro.Logic; using WotBlitzStatisticsPro.Logic.Dictionaries; using AutoMapper; using WotBlitzStatisticsPro.DataAccess; namespace WotBlitzStatisticsPro.Tests.DictionariesTests { [TestFixture] public class DictionariesServiceTests { private Mock _staticDictionaryUpdaterMock; private Mock _achievementsDictionaryUpdaterMock; private Mock _vehiclesDictionaryUpdaterMock; private IWargamingDictionaries _wargamingDictionaries; [SetUp] public void Init() { _staticDictionaryUpdaterMock = new Mock(); _achievementsDictionaryUpdaterMock = new Mock(); _vehiclesDictionaryUpdaterMock = new Mock(); _staticDictionaryUpdaterMock.Setup(d => d.Update()).ReturnsAsync(new UpdateDictionariesResponseItem()); _achievementsDictionaryUpdaterMock.Setup(d => d.Update()) .ReturnsAsync(new UpdateDictionariesResponseItem()); _vehiclesDictionaryUpdaterMock.Setup(d => d.Update()).ReturnsAsync(new UpdateDictionariesResponseItem()); var serviceProvider = new ServiceCollection(); serviceProvider.AddSingleton(_staticDictionaryUpdaterMock.Object); serviceProvider.AddSingleton(_achievementsDictionaryUpdaterMock.Object); serviceProvider.AddSingleton(_vehiclesDictionaryUpdaterMock.Object); WotBlitzStatisticsLogicInstaller.RegisterDictionariesFactoryMethod(serviceProvider); var services = serviceProvider.BuildServiceProvider(); _wargamingDictionaries = new WargamingDictionaries(services.GetService(), (new Mock()).Object, (new Mock>()).Object, (new Mock()).Object); } [Test] public async Task ShouldCallOnlyStaticDictionariesUpdater() { var updateResult = await _wargamingDictionaries.UpdateDictionaries(new UpdateDictionariesRequest {DictionaryTypes = DictionaryType.StaticDictionaries}); _staticDictionaryUpdaterMock.Verify(u => u.Update(), Times.Once); _achievementsDictionaryUpdaterMock.Verify(u => u.Update(), Times.Never); _vehiclesDictionaryUpdaterMock.Verify(u => u.Update(), Times.Never); } [Test] public async Task ShouldCallOnlyAchievementsDictionariesUpdater() { var updateResult = await _wargamingDictionaries.UpdateDictionaries(new UpdateDictionariesRequest {DictionaryTypes = DictionaryType.Achievements}); _staticDictionaryUpdaterMock.Verify(u => u.Update(), Times.Never); _achievementsDictionaryUpdaterMock.Verify(u => u.Update(), Times.Once); _vehiclesDictionaryUpdaterMock.Verify(u => u.Update(), Times.Never); } [Test] public async Task ShouldCallOnlyVehiclesDictionariesUpdater() { var updateResult = await _wargamingDictionaries.UpdateDictionaries(new UpdateDictionariesRequest {DictionaryTypes = DictionaryType.Vehicles}); _staticDictionaryUpdaterMock.Verify(u => u.Update(), Times.Never); _achievementsDictionaryUpdaterMock.Verify(u => u.Update(), Times.Never); _vehiclesDictionaryUpdaterMock.Verify(u => u.Update(), Times.Once); } [Test] public async Task ShouldCallOnlyVehiclesAndAchievementsDictionariesUpdater() { var updateResult = await _wargamingDictionaries.UpdateDictionaries(new UpdateDictionariesRequest {DictionaryTypes = DictionaryType.AchievementsAndVehicles}); _staticDictionaryUpdaterMock.Verify(u => u.Update(), Times.Never); _achievementsDictionaryUpdaterMock.Verify(u => u.Update(), Times.Once); _vehiclesDictionaryUpdaterMock.Verify(u => u.Update(), Times.Once); } [Test] public async Task ShouldCallAllDictionariesUpdater() { var updateResult = await _wargamingDictionaries.UpdateDictionaries(new UpdateDictionariesRequest {DictionaryTypes = DictionaryType.All}); _staticDictionaryUpdaterMock.Verify(u => u.Update(), Times.Once); _achievementsDictionaryUpdaterMock.Verify(u => u.Update(), Times.Once); _vehiclesDictionaryUpdaterMock.Verify(u => u.Update(), Times.Once); } } }