public async Task <IActionResult> PostAsync([FromBody] string censoData) { if (string.IsNullOrWhiteSpace(censoData)) { return(BadRequest(new { error = $"{nameof(censoData)} must not be empty" })); // BadRequest } var mappings = await censoMappingRepository.GetAll(); if (mappings == null || mappings.Count() < 1) { return(StatusCode(500, new { error = $"No mapping found" })); } EngineCenso engine = new EngineCenso(); var viableMappers = engine.FindViableMappers(mappings.Select(x => x.ToPropertyMapper()), censoData); if (viableMappers == null || viableMappers.Count() < 1) { return(StatusCode(500, new { error = $"No mappings able to parse data" })); } if (viableMappers.Count() > 1) { logger.LogWarning($"{viableMappers.Count()} viable mappers found for input {censoData}."); } var output = engine.Process(censoData, viableMappers.First()); return(Json(output)); }
public void InputNoModeloMG_ComUmaRegiaoComUmaCidadeEDoisBairros_RetornaStringNoPadraoDefinido() { const string input = @"{ ""regions"":[ { ""name"": ""Triangulo Mineiro"", ""cities"": [ { ""name"": ""Uberlandia"", ""population"": 700001, ""neighborhoods"": [ { ""name"": ""Santa Monica"", ""zone"": ""Zona Leste"", ""population"": 13012 }, { ""name"": ""Fundinho"", ""zone"": ""Centro"", ""population"": 19864 } ] } ] } ] }"; CensoOutput expectedOutput = new CensoOutput() { Result = new List <Result>() { new Result() { Cidade = "Uberlandia", Habitantes = 700001, Bairros = new List <Bairro>() { new Bairro() { Nome = "Santa Monica", Habitantes = 13012 }, new Bairro() { Nome = "Fundinho", Habitantes = 19864 } } } } }; EngineCenso engine = new EngineCenso(); var actualOutput = engine.Process(input, jsonMgMapper); Assert.AreEqual(JsonConvert.SerializeObject(expectedOutput), JsonConvert.SerializeObject(actualOutput)); }
public void InputNoModeloMG_ComUmaRegiaoComUmaCidadeEDoisBairros_RetornaStringNoPadraoDefinido() { const string input = @"<body> <region> <name>Triangulo Mineiro</name> <cities> <city> <name>Uberlandia</name> <population>700001</population> <neighborhoods> <neighborhood> <name>Santa Monica</name> <zone>Zona Leste</zone> <population>13012</population> </neighborhood> <neighborhood> <name>Fundinho</name> <zone>Centro</zone> <population>19864</population> </neighborhood> </neighborhoods> </city> </cities> </region> </body>"; CensoOutput expectedOutput = new CensoOutput() { Result = new List <Result>() { new Result() { Cidade = "Uberlandia", Habitantes = 700001, Bairros = new List <Bairro>() { new Bairro() { Nome = "Santa Monica", Habitantes = 13012 }, new Bairro() { Nome = "Fundinho", Habitantes = 19864 } } } } }; EngineCenso engine = new EngineCenso(new List <CensoPropertyMapper> { ModeloACTests.acMapper, ModeloRJTests.rjMapper, ModeloMGTests.mgMapper }); var actualOutput = engine.Process(input); Assert.AreEqual(JsonConvert.SerializeObject(expectedOutput), JsonConvert.SerializeObject(actualOutput)); }
public async Task <IActionResult> PostAsync([FromBody] string censoData) { var mappings = await censoMappingRepository.GetAll(); EngineCenso engine = new EngineCenso(mappings.Select(x => x.ToPropertyMapper())); var output = engine.Process(censoData); return(Json(output)); }
public void InputNoModeloAC_ComUmaCidadeEDoisBairros_RetornaStringNoPadraoDefinido() { const string input = @"{ ""cities"":[ { ""name"":""Rio Branco"", ""population"":576589, ""neighborhoods"":[ { ""name"":""Habitasa"", ""population"":7503 }, { ""name"":""Areial"", ""population"":5310 } ] } ] }"; CensoOutput expectedOutput = new CensoOutput() { Result = new List <Result>() { new Result() { Cidade = "Rio Branco", Habitantes = 576589, Bairros = new List <Bairro>() { new Bairro() { Nome = "Habitasa", Habitantes = 7503 }, new Bairro() { Nome = "Areial", Habitantes = 5310 } } } } }; EngineCenso engine = new EngineCenso(new List <CensoPropertyMapper> { ModeloACTests.acMapper, ModeloRJTests.rjMapper, ModeloMGTests.mgMapper }); var actualOutput = engine.Process(input); Assert.AreEqual(JsonConvert.SerializeObject(expectedOutput), JsonConvert.SerializeObject(actualOutput)); }
public void InputNoModeloRJ_ComUmaCidadeEDoisBairros_RetornaStringNoPadraoDefinido() { const string input = @"<corpo> <cidade> <nome>Rio de Janeiro</nome> <populacao>10345678</populacao> <bairros> <bairro> <nome>Tijuca</nome> <regiao>Zona Norte</regiao> <populacao>135678</populacao> </bairro> <bairro> <nome>Botafogo</nome> <regiao>Zona Sul</regiao> <populacao>12456</populacao> </bairro> </bairros> </cidade> </corpo>"; CensoOutput expectedOutput = new CensoOutput() { Result = new List <Result>() { new Result() { Cidade = "Rio de Janeiro", Habitantes = 10345678, Bairros = new List <Bairro>() { new Bairro() { Nome = "Tijuca", Habitantes = 135678 }, new Bairro() { Nome = "Botafogo", Habitantes = 12456 } } } } }; EngineCenso engine = new EngineCenso(new List <CensoPropertyMapper> { ModeloACTests.acMapper, ModeloRJTests.rjMapper, ModeloMGTests.mgMapper }); var actualOutput = engine.Process(input); Assert.AreEqual(JsonConvert.SerializeObject(expectedOutput), JsonConvert.SerializeObject(actualOutput)); }
public void InputNoModeloMG_ComUmaRegiaoComUmaCidadeEUmBairro_RetornaStringNoPadraoDefinido() { const string input = @"{ ""regions"":[ { ""name"": ""Triangulo Mineiro"", ""cities"": [ { ""name"": ""Uberlandia"", ""population"": 700001, ""neighborhoods"": [ { ""name"": ""Santa Monica"", ""zone"": ""Zona Leste"", ""population"": 13012 } ] } ] } ] }"; CensoOutput expectedOutput = new CensoOutput() { Result = new List <Result>() { new Result() { Cidade = "Uberlandia", Habitantes = 700001, Bairros = new List <Bairro>() { new Bairro() { Nome = "Santa Monica", Habitantes = 13012 } } } } }; EngineCenso engine = new EngineCenso(new List <CensoPropertyMapper> { ModeloACTests.acMapper, ModeloRJTests.rjMapper, ModeloMGTests.mgMapper, ModeloJsonComRegion.jsonMgMapper }); var actualOutput = engine.Process(input); Assert.AreEqual(JsonConvert.SerializeObject(expectedOutput), JsonConvert.SerializeObject(actualOutput)); }
public void InputNoModeloRJ_ComDuasCidadesEDoisBairrosCadaUma_RetornaStringNoPadraoDefinido() { const string input = @"<corpo> <cidade> <nome>Rio de Janeiro</nome> <populacao>10345678</populacao> <bairros> <bairro> <nome>Tijuca</nome> <regiao>Zona Norte</regiao> <populacao>135678</populacao> </bairro> <bairro> <nome>Botafogo</nome> <regiao>Zona Sul</regiao> <populacao>12456</populacao> </bairro> </bairros> </cidade> <cidade> <nome>Petrópolis</nome> <populacao>300000</populacao> <bairros> <bairro> <nome>Mosela</nome> <regiao>Central</regiao> <populacao>21234</populacao> </bairro> <bairro> <nome>Retiro</nome> <regiao>Central</regiao> <populacao>51368</populacao> </bairro> </bairros> </cidade> </corpo>"; CensoOutput expectedOutput = new CensoOutput() { Result = new List <Result>() { new Result() { Cidade = "Rio de Janeiro", Habitantes = 10345678, Bairros = new List <Bairro>() { new Bairro() { Nome = "Tijuca", Habitantes = 135678 }, new Bairro() { Nome = "Botafogo", Habitantes = 12456 } } }, new Result() { Cidade = "Petrópolis", Habitantes = 300000, Bairros = new List <Bairro>() { new Bairro() { Nome = "Mosela", Habitantes = 21234 }, new Bairro() { Nome = "Retiro", Habitantes = 51368 } } } } }; EngineCenso engine = new EngineCenso(); var actualOutput = engine.Process(input, rjMapper); Assert.AreEqual(JsonConvert.SerializeObject(expectedOutput), JsonConvert.SerializeObject(actualOutput)); }
public void InputNoModeloMG_ComDuasRegioesComDuasCidadesCadaEDoisBairrosCada_RetornaStringNoPadraoDefinido() { const string input = @"{ ""regions"":[ { ""name"": ""Triangulo Mineiro"", ""cities"": [ { ""name"": ""Uberlandia"", ""population"": 700001, ""neighborhoods"": [ { ""name"": ""Santa Monica"", ""zone"": ""Zona Leste"", ""population"": 13012 }, { ""name"": ""Fundinho"", ""zone"": ""Centro"", ""population"": 19864 } ] }, { ""name"": ""Uberaba"", ""population"": 300000, ""neighborhoods"": [ { ""name"": ""Manoel Mendes"", ""zone"": ""Zona Leste"", ""population"": 16543 }, { ""name"": ""Santa Maria"", ""zone"": ""Centro"", ""population"": 16845 } ] } ] }, { ""name"": ""Zona da Mata Mineira"", ""cities"": [ { ""name"": ""Juiz de Fora"", ""population"": 600000, ""neighborhoods"": [ { ""name"": ""Costa Carvalho"", ""zone"": ""Região Central"", ""population"": 80654 }, { ""name"": ""Grajaú"", ""zone"": ""Zona Leste"", ""population"": 25006 } ] }, { ""name"": ""Bicas"", ""population"": 14000, ""neighborhoods"": [ { ""name"": ""Alhadas"", ""zone"": ""Região Central"", ""population"": 2300 }, { ""name"": ""Edgar Moreira"", ""zone"": ""Zona Oeste"", ""population"": 3201 } ] } ] } ] }"; CensoOutput expectedOutput = new CensoOutput() { Result = new List <Result>() { new Result() { Cidade = "Uberlandia", Habitantes = 700001, Bairros = new List <Bairro>() { new Bairro() { Nome = "Santa Monica", Habitantes = 13012 }, new Bairro() { Nome = "Fundinho", Habitantes = 19864 } } }, new Result() { Cidade = "Uberaba", Habitantes = 300000, Bairros = new List <Bairro>() { new Bairro() { Nome = "Manoel Mendes", Habitantes = 16543 }, new Bairro() { Nome = "Santa Maria", Habitantes = 16845 } } }, new Result() { Cidade = "Juiz de Fora", Habitantes = 600000, Bairros = new List <Bairro>() { new Bairro() { Nome = "Costa Carvalho", Habitantes = 80654 }, new Bairro() { Nome = "Grajaú", Habitantes = 25006 } } }, new Result() { Cidade = "Bicas", Habitantes = 14000, Bairros = new List <Bairro>() { new Bairro() { Nome = "Alhadas", Habitantes = 2300 }, new Bairro() { Nome = "Edgar Moreira", Habitantes = 3201 } } } } }; EngineCenso engine = new EngineCenso(); var actualOutput = engine.Process(input, jsonMgMapper); Assert.AreEqual(JsonConvert.SerializeObject(expectedOutput), JsonConvert.SerializeObject(actualOutput)); }
public void InputNoModeloMG_ComDuasRegioesComUmaCidadeCadaEUmBairro_RetornaStringNoPadraoDefinido() { const string input = @"{ ""regions"":[ { ""name"": ""Triangulo Mineiro"", ""cities"": [ { ""name"": ""Uberlandia"", ""population"": 700001, ""neighborhoods"": [ { ""name"": ""Santa Monica"", ""zone"": ""Zona Leste"", ""population"": 13012 } ] } ] }, { ""name"": ""Zona da Mata Mineira"", ""cities"": [ { ""name"": ""Juiz de Fora"", ""population"": 600000, ""neighborhoods"": [ { ""name"": ""Costa Carvalho"", ""zone"": ""Região Central"", ""population"": 80654 } ] } ] } ] }"; CensoOutput expectedOutput = new CensoOutput() { Result = new List <Result>() { new Result() { Cidade = "Uberlandia", Habitantes = 700001, Bairros = new List <Bairro>() { new Bairro() { Nome = "Santa Monica", Habitantes = 13012 } } }, new Result() { Cidade = "Juiz de Fora", Habitantes = 600000, Bairros = new List <Bairro>() { new Bairro() { Nome = "Costa Carvalho", Habitantes = 80654 } } } } }; EngineCenso engine = new EngineCenso(); var actualOutput = engine.Process(input, jsonMgMapper); Assert.AreEqual(JsonConvert.SerializeObject(expectedOutput), JsonConvert.SerializeObject(actualOutput)); }
public void InputNoModeloMG_ComDuasRegioesComDuasCidadesCadaEDoisBairrosCada_RetornaStringNoPadraoDefinido() { const string input = @"<body> <region> <name>Triangulo Mineiro</name> <cities> <city> <name>Uberlandia</name> <population>700001</population> <neighborhoods> <neighborhood> <name>Santa Monica</name> <zone>Zona Leste</zone> <population>13012</population> </neighborhood> <neighborhood> <name>Fundinho</name> <zone>Centro</zone> <population>19864</population> </neighborhood> </neighborhoods> </city> <city> <name>Uberaba</name> <population>300000</population> <neighborhoods> <neighborhood> <name>Manoel Mendes</name> <zone>Zona Leste</zone> <population>16543</population> </neighborhood> <neighborhood> <name>Santa Maria</name> <zone>Centro</zone> <population>16845</population> </neighborhood> </neighborhoods> </city> </cities> </region> <region> <name>Zona da Mata Mineira</name> <cities> <city> <name>Juiz de Fora</name> <population>600000</population> <neighborhoods> <neighborhood> <name>Costa Carvalho</name> <zone>Região Central</zone> <population>80654</population> </neighborhood> <neighborhood> <name>Grajaú</name> <zone>Zona Leste</zone> <population>25006</population> </neighborhood> </neighborhoods> </city> <city> <name>Bicas</name> <population>14000</population> <neighborhoods> <neighborhood> <name>Alhadas</name> <zone>Região Central</zone> <population>2300</population> </neighborhood> <neighborhood> <name>Edgar Moreira</name> <zone>Zona Oeste</zone> <population>3201</population> </neighborhood> </neighborhoods> </city> </cities> </region> </body>"; CensoOutput expectedOutput = new CensoOutput() { Result = new List <Result>() { new Result() { Cidade = "Uberlandia", Habitantes = 700001, Bairros = new List <Bairro>() { new Bairro() { Nome = "Santa Monica", Habitantes = 13012 }, new Bairro() { Nome = "Fundinho", Habitantes = 19864 } } }, new Result() { Cidade = "Uberaba", Habitantes = 300000, Bairros = new List <Bairro>() { new Bairro() { Nome = "Manoel Mendes", Habitantes = 16543 }, new Bairro() { Nome = "Santa Maria", Habitantes = 16845 } } }, new Result() { Cidade = "Juiz de Fora", Habitantes = 600000, Bairros = new List <Bairro>() { new Bairro() { Nome = "Costa Carvalho", Habitantes = 80654 }, new Bairro() { Nome = "Grajaú", Habitantes = 25006 } } }, new Result() { Cidade = "Bicas", Habitantes = 14000, Bairros = new List <Bairro>() { new Bairro() { Nome = "Alhadas", Habitantes = 2300 }, new Bairro() { Nome = "Edgar Moreira", Habitantes = 3201 } } } } }; EngineCenso engine = new EngineCenso(); var actualOutput = engine.Process(input, mgMapper); Assert.AreEqual(JsonConvert.SerializeObject(expectedOutput), JsonConvert.SerializeObject(actualOutput)); }
public void InputNoModeloMG_ComDuasRegioesComUmaCidadeCadaEUmBairro_RetornaStringNoPadraoDefinido() { const string input = @"<body> <region> <name>Triangulo Mineiro</name> <cities> <city> <name>Uberlandia</name> <population>700001</population> <neighborhoods> <neighborhood> <name>Santa Monica</name> <zone>Zona Leste</zone> <population>13012</population> </neighborhood> </neighborhoods> </city> </cities> </region> <region> <name>Zona da Mata Mineira</name> <cities> <city> <name>Juiz de Fora</name> <population>600000</population> <neighborhoods> <neighborhood> <name>Costa Carvalho</name> <zone>Região Central</zone> <population>80654</population> </neighborhood> </neighborhoods> </city> </cities> </region> </body>"; CensoOutput expectedOutput = new CensoOutput() { Result = new List <Result>() { new Result() { Cidade = "Uberlandia", Habitantes = 700001, Bairros = new List <Bairro>() { new Bairro() { Nome = "Santa Monica", Habitantes = 13012 } } }, new Result() { Cidade = "Juiz de Fora", Habitantes = 600000, Bairros = new List <Bairro>() { new Bairro() { Nome = "Costa Carvalho", Habitantes = 80654 } } } } }; EngineCenso engine = new EngineCenso(); var actualOutput = engine.Process(input, mgMapper); Assert.AreEqual(JsonConvert.SerializeObject(expectedOutput), JsonConvert.SerializeObject(actualOutput)); }
public void InputNoModeloMG_ComUmaRegiaoComDuasCidadesEDoisBairrosCada_RetornaStringNoPadraoDefinido() { const string input = @"<body> <region> <name>Triangulo Mineiro</name> <cities> <city> <name>Uberlandia</name> <population>700001</population> <neighborhoods> <neighborhood> <name>Santa Monica</name> <zone>Zona Leste</zone> <population>13012</population> </neighborhood> <neighborhood> <name>Fundinho</name> <zone>Centro</zone> <population>19864</population> </neighborhood> </neighborhoods> </city> <city> <name>Uberaba</name> <population>300000</population> <neighborhoods> <neighborhood> <name>Manoel Mendes</name> <zone>Zona Leste</zone> <population>16543</population> </neighborhood> <neighborhood> <name>Santa Maria</name> <zone>Centro</zone> <population>16845</population> </neighborhood> </neighborhoods> </city> </cities> </region> </body>"; CensoOutput expectedOutput = new CensoOutput() { Result = new List <Result>() { new Result() { Cidade = "Uberlandia", Habitantes = 700001, Bairros = new List <Bairro>() { new Bairro() { Nome = "Santa Monica", Habitantes = 13012 }, new Bairro() { Nome = "Fundinho", Habitantes = 19864 } } }, new Result() { Cidade = "Uberaba", Habitantes = 300000, Bairros = new List <Bairro>() { new Bairro() { Nome = "Manoel Mendes", Habitantes = 16543 }, new Bairro() { Nome = "Santa Maria", Habitantes = 16845 } } } } }; EngineCenso engine = new EngineCenso(); var actualOutput = engine.Process(input, mgMapper); Assert.AreEqual(JsonConvert.SerializeObject(expectedOutput), JsonConvert.SerializeObject(actualOutput)); }
public void InputNoModeloMG_ComDuasRegioesComDuasCidadesCadaEUmBairroCada_RetornaStringNoPadraoDefinido() { const string input = @"{ ""regions"":[ { ""name"": ""Triangulo Mineiro"", ""cities"": [ { ""name"": ""Uberlandia"", ""population"": 700001, ""neighborhoods"": [ { ""name"": ""Santa Monica"", ""zone"": ""Zona Leste"", ""population"": 13012 } ] }, { ""name"": ""Uberaba"", ""population"": 300000, ""neighborhoods"": [ { ""name"": ""Manoel Mendes"", ""zone"": ""Zona Leste"", ""population"": 16543 } ] } ] }, { ""name"": ""Zona da Mata Mineira"", ""cities"": [ { ""name"": ""Juiz de Fora"", ""population"": 600000, ""neighborhoods"": [ { ""name"": ""Costa Carvalho"", ""zone"": ""Região Central"", ""population"": 80654 } ] }, { ""name"": ""Bicas"", ""population"": 14000, ""neighborhoods"": [ { ""name"": ""Alhadas"", ""zone"": ""Região Central"", ""population"": 2300 } ] } ] } ] }"; CensoOutput expectedOutput = new CensoOutput() { Result = new List <Result>() { new Result() { Cidade = "Uberlandia", Habitantes = 700001, Bairros = new List <Bairro>() { new Bairro() { Nome = "Santa Monica", Habitantes = 13012 } } }, new Result() { Cidade = "Uberaba", Habitantes = 300000, Bairros = new List <Bairro>() { new Bairro() { Nome = "Manoel Mendes", Habitantes = 16543 } } }, new Result() { Cidade = "Juiz de Fora", Habitantes = 600000, Bairros = new List <Bairro>() { new Bairro() { Nome = "Costa Carvalho", Habitantes = 80654 } } }, new Result() { Cidade = "Bicas", Habitantes = 14000, Bairros = new List <Bairro>() { new Bairro() { Nome = "Alhadas", Habitantes = 2300 } } } } }; EngineCenso engine = new EngineCenso(new List <CensoPropertyMapper> { ModeloACTests.acMapper, ModeloRJTests.rjMapper, ModeloMGTests.mgMapper, ModeloJsonComRegion.jsonMgMapper }); var actualOutput = engine.Process(input); Assert.AreEqual(JsonConvert.SerializeObject(expectedOutput), JsonConvert.SerializeObject(actualOutput)); }
public void InputNoModeloAC_ComDuasCidadesEDoisBairrosCada_RetornaStringNoPadraoDefinido() { const string input = @"{ ""cities"":[ { ""name"":""Rio Branco"", ""population"":576589, ""neighborhoods"":[ { ""name"":""Habitasa"", ""population"":7503 }, { ""name"":""Areial"", ""population"":5310 } ] }, { ""name"":""Epitaciolândia"", ""population"":13434, ""neighborhoods"":[ { ""name"":""Beira Rio"", ""population"":1230 }, { ""name"":""Cetel"", ""population"":3157 } ] } ] }"; CensoOutput expectedOutput = new CensoOutput() { Result = new List <Result>() { new Result() { Cidade = "Rio Branco", Habitantes = 576589, Bairros = new List <Bairro>() { new Bairro() { Nome = "Habitasa", Habitantes = 7503 }, new Bairro() { Nome = "Areial", Habitantes = 5310 } } }, new Result() { Cidade = "Epitaciolândia", Habitantes = 13434, Bairros = new List <Bairro>() { new Bairro() { Nome = "Beira Rio", Habitantes = 1230 }, new Bairro() { Nome = "Cetel", Habitantes = 3157 } } } } }; EngineCenso engine = new EngineCenso(); var actualOutput = engine.Process(input, acMapper); Assert.AreEqual(JsonConvert.SerializeObject(expectedOutput), JsonConvert.SerializeObject(actualOutput)); }