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); }
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()); }
public OwnedCryptoView(OwnedCrypto c) { Token = c.State.Token; Quantity = c.State.Quantity; Cost = c.State.Cost; DaysHeld = c.State.DaysHeld; AverageCost = c.State.AverageCost; }
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); }
public Task Save(OwnedCrypto crypto, Guid userId) { return(Save(crypto, _crypto_entity, userId)); }