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>());
        }
        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);
        }
 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));
         }
     }
 }
Exemple #5
0
        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);
        }
Exemple #9
0
 /// <summary>
 /// 构造函数
 /// </summary>
 public LimitResult(LimitLevel level = LimitLevel.None, int grade = 0)
 {
     Level = level;
     Grade = grade;
 }
Exemple #10
0
 /// <summary>
 /// 修改并返回指定结果
 /// </summary>
 /// <returns></returns>
 public bool ChangeResult(bool result, LimitLevel level)
 {
     Result = level;
     return(result);
 }
Exemple #11
0
        public static LimitCustomer CreateLimitCustomer(LimitType limitType, FeatureType featureType, CycleType cycleType, LimitLevel limitLevel)
        {
            var customer = LimitCustomer.Create("ACESSO", "document123");

            var cycle = Cycle.Create(cycleType);

            cycle.AddLimitLevel(limitLevel);

            var limit = Limit.Create(limitType, featureType);

            limit.AddCycle(cycle);

            customer.AddLimit(limit);
            return(customer);
        }