public async Task OwnedCryptoWorksAsync()
        {
            var crypto = new OwnedCrypto(new Token("BTC"), _userId);

            crypto.Purchase(10, 2.1m, DateTimeOffset.UtcNow);

            var storage = CreateStorage();

            await storage.Save(crypto, _userId);

            var loadedList = await storage.GetCryptos(_userId);

            Assert.NotEmpty(loadedList);

            var loaded = await storage.GetCrypto(crypto.State.Token, _userId);

            Assert.Equal(loaded.State.Quantity, crypto.State.Quantity);

            loaded.Purchase(5, 5, DateTime.UtcNow);

            await storage.Save(loaded, _userId);

            loaded = await storage.GetCrypto(loaded.State.Token, loaded.State.UserId);

            Assert.NotEqual(loaded.State.Quantity, crypto.State.Quantity);

            await storage.Delete(_userId);

            var afterDelete = await storage.GetCryptos(_userId);

            Assert.Empty(afterDelete);
        }
Example #2
0
            public override async Task <CommandResponse> Handle(Command cmd, CancellationToken cancellationToken)
            {
                var user = await _accounts.GetUser(cmd.UserId);

                if (user == null)
                {
                    return(CommandResponse.Failed(
                               "Unable to find user account for stock operation"));
                }

                var crypto = await _storage.GetCrypto(cmd.Token, cmd.UserId);

                if (crypto == null)
                {
                    crypto = new OwnedCrypto(cmd.Token, cmd.UserId);
                }

                crypto.Purchase(
                    quantity: cmd.Quantity, dollarAmountSpent: cmd.DollarAmount, date: cmd.Date.Value, notes: cmd.Notes
                    );

                await _storage.Save(crypto, cmd.UserId);

                return(CommandResponse.Success());
            }
Example #3
0
 public OwnedCryptoView(OwnedCrypto c)
 {
     Token       = c.State.Token;
     Quantity    = c.State.Quantity;
     Cost        = c.State.Cost;
     DaysHeld    = c.State.DaysHeld;
     AverageCost = c.State.AverageCost;
 }
Example #4
0
        public void ExportCryptos()
        {
            var crypto = new OwnedCrypto("btc", Guid.NewGuid());

            crypto.Purchase(quantity: 1.2m, dollarAmountSpent: 200, date: DateTimeOffset.UtcNow);
            crypto.Sell(quantity: 0.2m, dollarAmountReceived: 100, date: DateTimeOffset.UtcNow);

            var report = CSVExport.Generate(new[] { crypto });

            Assert.Contains(CSVExport.CRYPTOS_HEADER, report);
            Assert.Contains("BTC", report);
            Assert.Contains("buy", report);
            Assert.Contains("sell", report);
        }
        public void Yields()
        {
            var algo = new OwnedCrypto(
                new Token("ALGO"), System.Guid.NewGuid()
                );

            algo.Yield(quantity: 0.080861m,
                       dollarAmountWorth: 0.11m,
                       date: DateTimeOffset.UtcNow,
                       notes: "Received 0.080861 ALGO from Coinbase Rewards");

            Assert.Equal("ALGO", algo.State.Token);
            Assert.Equal(0.080861m, algo.State.Quantity);
            Assert.Equal(0, algo.State.Cost);
            Assert.Empty(algo.State.PositionInstances);
            Assert.Empty(algo.State.Transactions);
        }
        public void Airdrops()
        {
            var xlm = new OwnedCrypto(
                new Token("XLM"), System.Guid.NewGuid()
                );

            xlm.Reward(quantity: 0.012m,
                       dollarAmountWorth: 2.0m,
                       date: DateTimeOffset.UtcNow,
                       notes: "Received 4.9954541 XLM from Coinbase Earn");

            Assert.Equal("XLM", xlm.State.Token);
            Assert.Equal(0.012m, xlm.State.Quantity);
            Assert.Equal(0, xlm.State.Cost);
            Assert.Empty(xlm.State.PositionInstances);
            Assert.Empty(xlm.State.Transactions);
        }
        public void Btc_EndToEnd()
        {
            var btc = new OwnedCrypto(
                new Token("BTC"), System.Guid.NewGuid()
                );

            btc.Purchase(
                quantity: 0.05437703m,
                dollarAmountSpent: 985.32m,
                date: System.DateTimeOffset.Parse("2017-12-19T15:05:38Z")
                );

            Assert.Equal(0.05437703m, btc.State.Quantity);
            Assert.Equal(985.32m, btc.State.Cost);

            btc.Sell(0.004m, dollarAmountReceived: 74, DateTimeOffset.UtcNow, notes: null);

            Assert.Equal(0.05037703m, btc.State.Quantity);

            Assert.Equal(2, btc.State.Transactions.Count);
            Assert.Single(btc.State.PositionInstances);
        }
Example #8
0
 public Task Save(OwnedCrypto crypto, Guid userId)
 {
     return(Save(crypto, _crypto_entity, userId));
 }