示例#1
0
 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
     });
 }
示例#2
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)
     });
 }
示例#3
0
        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))));
        }
示例#4
0
        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));
        }
示例#5
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);
        }