public int RegisterNewBalance(BalanceRegistrationInfo args)
        {
            if (args.Amount <= 0)
            {
                throw new ArgumentException("Invalid BalanceRegistrationInfo. Can't continue.");
            }

            var entityToAdd = new BalanceEntity()
            {
                Client = args.Client,
                Amount = args.Amount,
                Status = true
            };

            if (this.tableRepository.Contains(entityToAdd))
            {
                throw new ArgumentException("Balance for this client has been registered. Can't continue.");
            }

            this.tableRepository.Add(entityToAdd);

            this.tableRepository.SaveChanges();

            return(entityToAdd.Id);
        }
        public void ShouldNotRegisterNewBalanceIfItExists()
        {
            // Arrange
            this.balanceTableRepository = Substitute.For <IBalanceTableRepository>();
            BalancesService         balancesService = new BalancesService(this.balanceTableRepository);
            BalanceRegistrationInfo args            = new BalanceRegistrationInfo();

            args.Client = this.newClient;
            args.Amount = 5000.00M;
            args.Status = true;

            // Act
            balancesService.RegisterNewBalance(args);

            this.balanceTableRepository.Contains(Arg.Is <BalanceEntity>( // Now Contains returns true (table contains this balance of client)
                                                     b => b.Client == args.Client)).Returns(true);

            balancesService.RegisterNewBalance(args); // Try to reg. same twice and get exception

            // Assert
        }
        public void ShouldRegisterNewBalance()
        {
            // Arrange
            this.balanceTableRepository = Substitute.For <IBalanceTableRepository>();
            BalancesService         balancesService = new BalancesService(this.balanceTableRepository);
            BalanceRegistrationInfo args            = new BalanceRegistrationInfo();

            args.Client = this.newClient;
            args.Amount = 5000.00M;
            args.Status = true;

            // Act
            var shareId = balancesService.RegisterNewBalance(args);

            // Assert
            this.balanceTableRepository.Received(1).Add(Arg.Is <BalanceEntity>(
                                                            b => b.Client == args.Client &&
                                                            b.Amount == args.Amount &&
                                                            b.Status == args.Status));
            this.balanceTableRepository.Received(1).SaveChanges();
        }