public static AddAssetPairRateCommand Invert(this AddAssetPairRateCommand src) { return(new AddAssetPairRateCommand { BaseAssetId = src.QuotingAssetId, QuotingAssetId = src.BaseAssetId, BidPrice = src.BidPrice > 0 ? 1 / src.BidPrice : 0, AskPrice = src.AskPrice > 0 ? 1 / src.AskPrice : 0 }); }
public static AddAssetPairRateCommand ApplyAccuracy(this AddAssetPairRateCommand src, int accuracy) { return(new AddAssetPairRateCommand { BaseAssetId = src.BaseAssetId, QuotingAssetId = src.QuotingAssetId, BidPrice = Math.Round(src.BidPrice, accuracy), AskPrice = Math.Round(src.AskPrice, accuracy) }); }
public async Task <IAssetPairRate> AddAsync(AddAssetPairRateCommand cmd) { AssetPairSetting settings = await _assetPairSettingsService.GetAsync(cmd.BaseAssetId, cmd.QuotingAssetId); if (settings == null) { throw new AssetPairRateStorageNotSupportedException(cmd.BaseAssetId, cmd.QuotingAssetId); } await _assetPairRateRepository.AddAsync( Mapper.Map <AssetPairRate>(cmd.Invert().ApplyAccuracy(settings.Accuracy))); return(await _assetPairRateRepository.AddAsync( Mapper.Map <AssetPairRate>(cmd.ApplyAccuracy(settings.Accuracy)))); }
public async Task AddAsync_InvertedRateAdded() { const decimal bidPrice = 1; const decimal askPrice = 2; const string baseAssetId = "BTC"; const string quotingAssetId = "LKK"; const int assetPairAccuracy = 1; var rates = new List <IAssetPairRate>(); _assetPairSettingsServiceMock.Setup(o => o.GetAsync(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync( new AssetPairSetting { BaseAssetId = baseAssetId, QuotingAssetId = quotingAssetId, Accuracy = assetPairAccuracy }); _assetPairRateRepositoryMock.Setup(o => o.AddAsync(It.IsAny <AssetPairRate>())) .ReturnsAsync((IAssetPairRate rate) => rate) .Callback((IAssetPairRate rate) => rates.Add(rate)); var newRateCommand = new AddAssetPairRateCommand { BidPrice = bidPrice, AskPrice = askPrice, BaseAssetId = baseAssetId, QuotingAssetId = quotingAssetId, }; await _assetRatesService.AddAsync(newRateCommand); Assert.IsNotNull(rates.Single(x => x.BaseAssetId == newRateCommand.BaseAssetId && x.QuotingAssetId == newRateCommand.QuotingAssetId)); Assert.IsNotNull(rates.Single(x => x.BaseAssetId == newRateCommand.QuotingAssetId && x.QuotingAssetId == newRateCommand.BaseAssetId)); Assert.IsTrue(rates.Single(x => x.BaseAssetId == baseAssetId).BidPrice.Equals(newRateCommand.BidPrice)); Assert.IsTrue(rates.Single(x => x.BaseAssetId == baseAssetId).AskPrice.Equals(newRateCommand.AskPrice)); Assert.IsTrue(rates.Single(x => x.BaseAssetId == quotingAssetId).BidPrice .Equals(newRateCommand.BidPrice > 0 ? 1 / newRateCommand.BidPrice : 0)); Assert.IsTrue(rates.Single(x => x.BaseAssetId == quotingAssetId).AskPrice .Equals(newRateCommand.AskPrice > 0 ? 1 / newRateCommand.AskPrice : 0)); }
public async Task AddAsync_NoSettings_ThrowsException() { const decimal bidPrice = 1; const decimal askPrice = 2; const string baseAssetId = "BTC"; const string quotingAssetId = "LKK"; _assetPairSettingsServiceMock.Setup(o => o.GetAsync(It.IsAny <string>(), It.IsAny <string>())) .ReturnsAsync(() => null); var newRateCommand = new AddAssetPairRateCommand { BidPrice = bidPrice, AskPrice = askPrice, BaseAssetId = baseAssetId, QuotingAssetId = quotingAssetId, }; await _assetRatesService.AddAsync(newRateCommand); }