private async Task<AccountInfoResponse> SaveAccountAndTankInformation(AccountAndTanksContextRow accountAndTanksInfo) { var contextData = new AccountInformationPipelineContextData { AccountInfo = accountAndTanksInfo.AccountInfo, AccountInfoHistory = accountAndTanksInfo.AccountInfoHistory, Tanks = accountAndTanksInfo.Tanks, TanksHistory = accountAndTanksInfo.TanksHistory }; var context = new OperationContext(new AccountRequest(contextData.AccountInfo?.AccountId ?? -1, RealmType.Ru, RequestLanguage.En)); context.AddOrReplace(contextData); var pipeline = new Pipeline<IOperationContext>(_operationFactory); pipeline .AddOperation<CalculateStatisticsOperation>() .AddOperation<SaveAccountAndTanksOperation>() .AddOperation<BuildAccountInfoResponseOperation>() ; var firstOperation = pipeline.Build(); if (firstOperation != null) { await firstOperation .Invoke(context, null) .ConfigureAwait(false); } return contextData?.Response ?? new AccountInfoResponse(); }
private async Task <AccountInfoResponse> GatherAndSaveAccountInformation(string accountFileName, string tanksFileName) { var contextData = new AccountInformationPipelineContextData(); await SetAccountInfo(accountFileName, contextData); await SetTanksInfo(tanksFileName, contextData); var context = new OperationContext(new AccountRequest(contextData.AccountInfo?.AccountId ?? -1, Realm, RequestLanguage.En)); context.AddOrReplace(contextData); var pipeline = new Pipeline <IOperationContext>(_operationFactory); pipeline .AddOperation <CalculateStatisticsOperation>() .AddOperation <SaveAccountAndTanksOperation>() .AddOperation <BuildAccountInfoResponseOperation>() ; var firstOperation = pipeline.Build(); if (firstOperation != null) { await firstOperation .Invoke(context, null) .ConfigureAwait(false); } return(contextData?.Response ?? new AccountInfoResponse()); }
public async Task <AccountInfoHistoryResponse> GetAccountInfoHistory(RealmType realm, long accountId, DateTime startDate, RequestLanguage requestLanguage) { var contextData = new AccountHistoryInformationPipelineContextData(startDate); try { var context = new OperationContext(new AccountRequest(accountId, realm, requestLanguage)); context.AddOrReplace(contextData); var pipeline = new Pipeline <IOperationContext>(_operationFactory); pipeline.AddOperation <ReadAccountInfoFromDbOperation>() .AddOperation <ReadAccountInfoHistoryFromDbOperation>() .AddOperation <CheckIfHistoryIsEmptyOperation>() .AddOperation <FillOverallStatisticsOperation>() .AddOperation <FillPeriodStatisticsOperation>() .AddOperation <FillPeriodDifferenceOperation>() .AddOperation <FillStatisticsDifferenceOperation>() .AddOperation <FillAccountInfoHistoryResponse>() ; var firstOperation = pipeline.Build(); if (firstOperation != null) { await firstOperation .Invoke(context, null) .ConfigureAwait(false); } } catch (Exception e) { _logger.LogError(e, "GetAccountInfoHistory error"); throw; } return(contextData?.Response ?? new AccountInfoHistoryResponse()); }
public async Task ShouldSetFlagIfDbAccountInfoIsNull() { var context = new OperationContext(new AccountRequest(AccountId, Realm, Language)); context.AddOrReplace(_contextData); await _operation.Invoke(context, null); _contextData.NeedToSaveData.Should().Be(true); }
public async Task ShouldSaveAccountInfoHistory() { _contextData.NeedToSaveData = true; var context = new OperationContext(new AccountRequest(AccountId, Realm, Language)); context.AddOrReplace(_contextData); await _operation.Invoke(context, null); WargamingDataAccessorMock.Verify(d => d.AddAccountInfoHistory(It.Is <AccountInfoHistory>(a => a.AccountId == AccountId)), Times.Once); }
public async Task ShouldNotSetFlagIfDatesAreEqual() { _contextData.DbAccountInfo = GetAccountInfoFromFixture(); var context = new OperationContext(new AccountRequest(AccountId, Realm, Language)); context.AddOrReplace(_contextData); await _operation.Invoke(context, null); _contextData.NeedToSaveData.Should().Be(false); }
public async Task ShouldSetFlagIfDbDateIsLessThenWgDate() { _contextData.DbAccountInfo = GetAccountInfoFromFixture(); _contextData.DbAccountInfo.LastBattleTime -= 1; var context = new OperationContext(new AccountRequest(AccountId, Realm, Language)); context.AddOrReplace(_contextData); await _operation.Invoke(context, null); _contextData.NeedToSaveData.Should().Be(true); }
public async Task ShouldNotSaveAccountInfoIfFlagIsNotSet() { var context = new OperationContext(new AccountRequest(AccountId, Realm, Language)); context.AddOrReplace(_contextData); await _operation.Invoke(context, null); WargamingDataAccessorMock.Verify(d => d.AddOurUpdateAccountInfo(It.Is <AccountInfo>(a => a.AccountId == AccountId)), Times.Never); WargamingDataAccessorMock.Verify(d => d.AddAccountInfoHistory(It.IsAny <AccountInfoHistory>()), Times.Never); WargamingDataAccessorMock.Verify(d => d.AddOrUpdateTankInfo(It.IsAny <TankInfo>()), Times.Never); WargamingDataAccessorMock.Verify(d => d.AddTankInfoHistory(It.IsAny <TankInfoHistory>()), Times.Never); }
public async Task ShouldSaveAllTanksIfNotTanksInDatabase() { _contextData.NeedToSaveData = true; var context = new OperationContext(new AccountRequest(AccountId, Realm, Language)); context.AddOrReplace(_contextData); await _operation.Invoke(context, null); var tanksCount = _contextData.Tanks.Count; WargamingDataAccessorMock.Verify(d => d.AddOrUpdateTankInfo(It.IsAny <TankInfo>()), Times.Exactly(tanksCount)); WargamingDataAccessorMock.Verify(d => d.AddTankInfoHistory(It.IsAny <TankInfoHistory>()), Times.Exactly(tanksCount)); }
public async Task ShouldCalculateAppropriateWn7() { var context = new OperationContext(new AccountRequest(AccountId, Realm, Language)); context.AddOrReplace(_contextData); await _operation.Invoke(context, null); _contextData.AccountInfoHistory.AvgTier.Should().Be(7.191034482758621); _contextData.AccountInfoHistory.Wn7.Should().Be(1543.801045341129); foreach (var tankInfoHistory in _contextData.TanksHistory) { tankInfoHistory.Value.Wn7.Should().Be(_expectedTankWn7[tankInfoHistory.Key]); } }
public async Task ShouldReadAccountInfoFromDataAccessor() { var context = new OperationContext(new AccountRequest(AccountId, Realm, Language)); context.AddOrReplace(_contextData); await _operation.Invoke(context, null); _contextData.DbAccountInfo.Should().NotBeNull(); var accountInfoSerialized = JsonConvert.SerializeObject(_contextData.DbAccountInfo); var expectedAccountInfo = await File.ReadAllTextAsync(GetFixturePath("MappedAccountInfo.json")); accountInfoSerialized.Should().Be(expectedAccountInfo); }
public async Task ShouldSaveTanksThatLastDateIsGreaterThenInDatabase() { _contextData.NeedToSaveData = true; var context = new OperationContext(new AccountRequest(AccountId, Realm, Language)); context.AddOrReplace(_contextData); int outdatedTanksCount = 3; int outdatedTanksIndex = 0; foreach (var tank in _contextData.Tanks) { if (outdatedTanksIndex < outdatedTanksCount) { var tankInfo = new TankInfo { TankInfoId = new TankInfoKey { TankId = tank.TankId, AccountId = tank.AccountId, }, LastBattleTime = tank.LastBattleTime - 1 }; WargamingDataAccessorMock.Setup(d => d.ReadTankInfo(tank.AccountId, tank.TankId)) .ReturnsAsync(tankInfo); outdatedTanksIndex++; } else { WargamingDataAccessorMock.Setup(d => d.ReadTankInfo(tank.AccountId, tank.TankId)) .ReturnsAsync(tank); } } await _operation.Invoke(context, null); var tanksCount = _contextData.Tanks.Count; WargamingDataAccessorMock.Verify(d => d.AddOrUpdateTankInfo(It.IsAny <TankInfo>()), Times.Exactly(outdatedTanksCount)); WargamingDataAccessorMock.Verify(d => d.AddTankInfoHistory(It.IsAny <TankInfoHistory>()), Times.Exactly(outdatedTanksCount)); }
public async Task <AccountInfoResponse> GatherAndSaveAccountInformation( RealmType realm, long accountId, RequestLanguage requestLanguage, string wargamingToken) { var contextData = new AccountInformationPipelineContextData(); try { var context = new OperationContext(new AccountRequest(accountId, realm, requestLanguage, wargamingToken)); context.AddOrReplace(contextData); var pipeline = new Pipeline <IOperationContext>(_operationFactory); pipeline.AddOperation <GetAccountInfoOperation>() .AddOperation <ReadAccountInfoFromDbOperation>() .AddOperation <CheckLastBattleDateOperation>() .AddOperation <GetTanksInfoOperation>() .AddOperation <CalculateStatisticsOperation>() .AddOperation <SaveAccountAndTanksOperation>() .AddOperation <BuildAccountInfoResponseOperation>() ; var firstOperation = pipeline.Build(); if (firstOperation != null) { await firstOperation .Invoke(context, null) .ConfigureAwait(false); } } catch (Exception e) { _logger.LogError(e, "GatherAndSaveAccountInformation error"); throw; } return(contextData?.Response ?? new AccountInfoResponse()); }
public async Task ShouldGetAndSaveTanksInformation() { var context = new OperationContext(new AccountRequest(AccountId, Realm, Language)); context.AddOrReplace(_contextData); await _operation.Invoke(context, null); _contextData.Tanks.Should().NotBeNull(); _contextData.TanksHistory.Should().NotBeNull(); var tanksSerialized = JsonConvert.SerializeObject(_contextData.Tanks); var tanksHistorySerialized = JsonConvert.SerializeObject(_contextData.TanksHistory); var expectedTanksInfo = await File.ReadAllTextAsync(GetFixturePath("MappedTanks.json")); tanksSerialized.Should().Be(expectedTanksInfo); var expectedTanksHistory = await File.ReadAllTextAsync(GetFixturePath("MappedTanksHistory.json")); tanksHistorySerialized.Should().Be(expectedTanksHistory); }