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();
        }
Пример #2
0
        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());
        }
Пример #3
0
        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));
        }
Пример #13
0
        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);
        }