public async Task CanLimitOverdraft() { var created = new AccountCreated(CorrelatedMessage.NewRoot()) { AccountId = AccountId, AccountHolderName = "Miled", OverdraftLimit = 0 }; var cmd = new LimitOverdraft { AccountId = AccountId, Limit = 350 }; var ev = new OverdraftLimited(cmd) { AccountId = AccountId, Limit = 350 }; await Runner.Run( def => def.Given(created).When(cmd).Then(ev) ); }
public async Task CannotSetLimitOnInvalidAccount() { var cmd = new LimitOverdraft { AccountId = AccountId, Limit = Convert.ToInt32(100m) }; await Runner.Run( def => def.Given().When(cmd).Throws(new InvalidOperationException("No Account is already exist")) ); }
public async Task CannotSetNegativeLimit() { var created = new AccountCreated(CorrelatedMessage.NewRoot()) { AccountId = AccountId, AccountHolderName = "NNN" }; var cmd = new LimitOverdraft { AccountId = AccountId, Limit = -1 }; await Runner.Run( def => def.Given(created).When(cmd).Throws(new InvalidOperationException("Overdraft limit should be positve")) ); }
public CommandResponse Handle(LimitOverdraft command) { try { if (!_repository.TryGetById <Account>(command.AccountId, out var account)) { throw new InvalidOperationException("No Account is already exist"); } account.SetOverdraftLimit(command.AccountId, command.Limit, command); _repository.Save(account); return(command.Succeed()); } catch (Exception e) { return(command.Fail(e)); } }