public async Task AddNewCustomerComplex() { //arrange var random = new Random(); var customer = LimitCustomer.Create($"ACESSO", $"document{random.Next(1000, 10000)}"); var limitLevel = LimitLevel.Create(LevelType.Card, 1000, 30); var cycle = Cycle.Create(CycleType.Transaction); cycle.AddLimitLevel(limitLevel); var limit = Limit.Create(LimitType.CashIn, FeatureType.TED); limit.AddCycle(cycle); customer.AddLimit(limit); //act await _repositoryCommand.SaveAsync(customer); var customerFound = await _repositoryQuery.GetAsync(customer.Id); //assert Assert.NotNull(customerFound); Assert.Equal(customer.Id, customerFound.Id); Assert.True(customerFound.Limits.Count == 1); Assert.True(customerFound.Limits.First().Cycles.Count == 1); Assert.True(customerFound.Limits.First().Cycles.First().LimitLevels.Count == 1); }
public async Task GetLimitJoinWithLimitCustomer() { //arrange var company = Fixture.GetLimitCompanyValid(); var documentNumber = "document123"; var limitType = LimitType.CashIn; var featureType = FeatureType.TED; var cycleType = CycleType.Monthly; var levelType = LevelType.Account; var limitLevel = LimitLevel.Create(levelType, 80000, 6000); var customer = Fixture.CreateLimitCustomer(limitType, featureType, cycleType, limitLevel); _companyRepositoryQuery.GetAsync(Arg.Any <string>()).Returns(company); _customerRepositoryQuery.GetAsync(Arg.Any <string>()).Returns(customer); //act var limitCustomer = await _limitService.GetLimitAsync(company.CompanyKey, documentNumber); var limitLevelGet = limitCustomer.GetLimitLevel(limitType, featureType, cycleType, levelType); //assert Assert.NotNull(limitLevelGet); Assert.Equal(limitLevel.Type, limitLevelGet.Type); Assert.Equal(limitLevel.MaxValue, limitLevelGet.MaxValue); Assert.Equal(limitLevel.MinValue, limitLevelGet.MinValue); }
public async Task NotReserveLimitWhenHasLimitAvailable() { //arrange var amountUsed = 80000; var limitType = LimitType.CashIn; var featureType = FeatureType.TED; var cycleType = CycleType.Monthly; var levelType = LevelType.Account; var limitLevel = LimitLevel.Create(levelType, amountUsed - 1, 6000); var customer = Fixture.CreateLimitCustomer(limitType, featureType, cycleType, limitLevel); var command = new ReserveLimitCommand() { CompanyKey = customer.CompanyKey, DocumentNumber = customer.DocumentNumber, LimitType = limitType, FeatureType = featureType, CycleType = cycleType, LevelType = levelType, Amount = amountUsed }; _limitService.GetLimitAsync(Arg.Any <string>(), Arg.Any <string>()).Returns(customer); //act var result = await _handle.Handle(command, CancellationToken.None); //assert Assert.False(result.IsValid); await _repository.DidNotReceive().SaveAsync(Arg.Any <LimitUsed>()); }
private IEnumerable <LimitLevel> LimitLevelsParse(List <LimitLevelDto> limitLevelsDto) { if (limitLevelsDto.Any()) { foreach (var limitLevelDto in limitLevelsDto) { yield return(LimitLevel.Create(limitLevelDto.Type, limitLevelDto.MaxValue, limitLevelDto.MinValue)); } } }
private static Cycle GetCycle(CycleType type) { var cycle = Cycle.Create(type); cycle.AddLimitLevel(LimitLevel.Create(LevelType.Account, 50000, 10000)); cycle.AddLimitLevel(LimitLevel.Create(LevelType.Card, 50000, 10000)); cycle.AddLimitLevel(LimitLevel.Create(LevelType.Document, 50000, 10000)); return(cycle); }
public void CycleHaveAddNewLimitLevel() { //arrange var limitLevel = LimitLevel.Create(LevelType.Account, 10000, 1000); var cycle = Cycle.Create(CycleType.Daily); cycle.AddLimitLevel(limitLevel); //act var result = cycle.Validate(); //assert Assert.True(result.IsValid); }
public void CycleDontHaveTwoLimitLevelEquals() { //arrange var limitLevel = LimitLevel.Create(LevelType.Account, 10000, 1000); var limitLevelDouble = LimitLevel.Create(LevelType.Account, 100012, 1000); var cycle = Cycle.Create(CycleType.Daily); cycle.AddLimitLevel(limitLevel); //act cycle.AddLimitLevel(limitLevelDouble); var result = cycle.Validate(); //assert Assert.True(result.IsInvalid); }
public async Task GetLimitJoinWithLimitCustomerWithLimitUsed() { //arrange var company = Fixture.GetLimitCompanyValid(); var documentNumber = "document123"; var limitType = LimitType.CashIn; var featureType = FeatureType.TED; var cycleType = CycleType.Monthly; var levelType = LevelType.Account; var limitUsedMax = 600; var limitMaxValue = 80000; var limitLevel = LimitLevel.Create(levelType, limitMaxValue, 6000); var customer = Fixture.CreateLimitCustomer(limitType, featureType, cycleType, limitLevel); var limitUsed = new LimitLevelResumeDto() { CompanyKey = company.CompanyKey, DocumentNumber = documentNumber, LimitType = limitType, FeatureType = featureType, CycleType = cycleType, LevelType = levelType, Amount = limitUsedMax }; var listLimitUsed = new List <LimitLevelResumeDto> { limitUsed }; _companyRepositoryQuery.GetAsync(Arg.Any <string>()).Returns(company); _customerRepositoryQuery.GetAsync(Arg.Any <string>()).Returns(customer); _limitUsedQueryRepository.GetResumeAsync(Arg.Any <string>(), Arg.Any <string>()).Returns(listLimitUsed); //act var limitCustomer = await _limitService.GetLimitAsync(company.CompanyKey, documentNumber); var limitLevelGet = limitCustomer.GetLimitLevel(limitType, featureType, cycleType, levelType); //assert Assert.NotNull(limitLevelGet); Assert.Equal(limitLevel.Type, limitLevelGet.Type); Assert.Equal(limitMaxValue - limitUsedMax, limitLevelGet.MaxValue); Assert.Equal(limitLevel.MinValue, limitLevelGet.MinValue); }