public void Deve_somar_a_pontuacao_da_familia_e_aumentar_quantidade_de_criterios_atendidos_quando_ela_atender_o_criterio() { const int quantidadeDeCriteriosInicialmenteAtendidos = 1; const int pontuacaoInicialDaFamilia = 4; const int valorDaRendaUm = 400; const int valorDaRendaDois = 500; var rendaDaPessoaUm = FluentBuilder <Renda> .New().With(renda => renda.Valor, valorDaRendaUm).Build(); var rendaDaPessoaDois = FluentBuilder <Renda> .New().With(renda => renda.Valor, valorDaRendaDois).Build(); var pessoaUm = FluentBuilder <Pessoa> .New().With(pessoa => pessoa.Renda, rendaDaPessoaUm).Build(); var pessoaDois = FluentBuilder <Pessoa> .New().With(pessoa => pessoa.Renda, rendaDaPessoaDois).Build(); var pessoas = new[] { pessoaUm, pessoaDois }; var familia = FluentBuilder <Familia> .New() .With(f => f.QuantidadeDeCriteriosAtendidos, quantidadeDeCriteriosInicialmenteAtendidos) .With(f => f.Pontuacao, pontuacaoInicialDaFamilia) .WithCollection(f => f.Pessoas, pessoas).Build(); var pontuacaoDaFamiliaEsperada = pontuacaoInicialDaFamilia + _criterioDeRendaInferiorA900.Pontos; const int quantidadeDeCriteriosAtendidosEsperados = quantidadeDeCriteriosInicialmenteAtendidos + 1; _pontuacaoDeFamilias.Pontuar(_criterioDeRendaInferiorA900, familia); Assert.Equal(pontuacaoDaFamiliaEsperada, familia.Pontuacao); Assert.Equal(quantidadeDeCriteriosAtendidosEsperados, familia.QuantidadeDeCriteriosAtendidos); }
public IEnumerable <Familia> Classificar(FamiliaDto[] familiasDto) { var criterios = _criterioRepositorio.ObterTodos(); var familias = familiasDto.Where(f => f.Status == Status.CadastroValido) .Select(MapeadorDeFamilia.Mapear).ToList(); var pontuadorDeFamilias = new PontuacaoDeFamilias(); foreach (var familia in familias) { foreach (var criterio in criterios) { pontuadorDeFamilias.Pontuar(criterio, familia); } } var familiasOrdenadasPorPontuacao = familias.OrderByDescending(f => f.Pontuacao).ToList(); EnviarParaOContemplados(familiasOrdenadasPorPontuacao); return(familiasOrdenadasPorPontuacao); }