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);
        }
Example #2
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);
        }
        public async Task AddNewCustomerSimple()
        {
            //arrange
            var random   = new Random();
            var customer = LimitCustomer.Create($"ACESSO", $"document{random.Next(1000, 10000)}");

            customer.AddLimit(Limit.Create(LimitType.CashIn, FeatureType.TED));

            //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 > 0);
        }
Example #4
0
        public async Task <LimitCustomer> GetLimitAsync(string companyKey, string documentNumber)
        {
            var limitCompany = await _companyQuery.GetAsync(companyKey);

            if (limitCompany is null)
            {
                return(null);
            }

            var limitCustomer = await _customerQuery.GetAsync(LimitCustomer.GetId(companyKey, documentNumber));

            var limitUseds = await _limitUsedQuery.GetResumeAsync(companyKey, documentNumber);


            if (limitCustomer is null)
            {
                limitCustomer = LimitCustomer.Create(companyKey, documentNumber);
            }

            foreach (var limit in limitCompany.Limits)
            {
                foreach (var cycle in limit.Cycles)
                {
                    foreach (var limitLevel in cycle.LimitLevels)
                    {
                        var limitLevelCustomer = limitCustomer.GetLimitLevel(limit.Type, limit.FeatureType, cycle.Type, limitLevel.Type) ?? limitLevel;
                        var limitResume        = GetResume(limitUseds, limit.Type, limit.FeatureType, cycle.Type, limitLevel.Type);

                        if (!(limitResume is null))
                        {
                            limitLevelCustomer.DecreaseMaxValue(limitResume.Amount);
                        }
                        limitCustomer.AddLimitLevel(limit.Type, limit.FeatureType, cycle.Type, limitLevelCustomer);
                    }
                }
            }


            return(limitCustomer);
        }