Cambio en ApiOPE, datos vacios o nulos se devuelven con guiones
This commit is contained in:
@@ -21,7 +21,7 @@ public sealed class OpeFieldMapperTests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MapBlock_MapsSecondBlockAndLeavesLastTwoFieldsEmpty()
|
public void MapBlock_MapsSecondBlockAndUsesHyphenForReservedFields()
|
||||||
{
|
{
|
||||||
var mapper = CreateMapper();
|
var mapper = CreateMapper();
|
||||||
var source = CreateBlockSource();
|
var source = CreateBlockSource();
|
||||||
@@ -30,12 +30,12 @@ public sealed class OpeFieldMapperTests
|
|||||||
|
|
||||||
Assert.Equal("Ayuntamiento", result.Data["FIELD_0"].Value);
|
Assert.Equal("Ayuntamiento", result.Data["FIELD_0"].Value);
|
||||||
Assert.Equal("Comentarios", result.Data["FIELD_7"].Value);
|
Assert.Equal("Comentarios", result.Data["FIELD_7"].Value);
|
||||||
Assert.Equal(string.Empty, result.Data["FIELD_8"].Value);
|
Assert.Equal("-", result.Data["FIELD_8"].Value);
|
||||||
Assert.Equal(string.Empty, result.Data["FIELD_9"].Value);
|
Assert.Equal("-", result.Data["FIELD_9"].Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MapBlock_ReturnsNoAndEmptyFieldsForUnknownExpedient()
|
public void MapBlock_ReturnsNoAndHyphensForUnknownExpedient()
|
||||||
{
|
{
|
||||||
var mapper = CreateMapper();
|
var mapper = CreateMapper();
|
||||||
|
|
||||||
@@ -43,12 +43,12 @@ public sealed class OpeFieldMapperTests
|
|||||||
var secondBlock = mapper.MapBlock(null, 2, belongsToComplaintsChannel: false);
|
var secondBlock = mapper.MapBlock(null, 2, belongsToComplaintsChannel: false);
|
||||||
|
|
||||||
Assert.Equal("NO", firstBlock.Data["FIELD_0"].Value);
|
Assert.Equal("NO", firstBlock.Data["FIELD_0"].Value);
|
||||||
Assert.All(firstBlock.Data.Where(field => field.Key != "FIELD_0"), field => Assert.Empty(field.Value.Value));
|
Assert.All(firstBlock.Data.Where(field => field.Key != "FIELD_0"), field => Assert.Equal("-", field.Value.Value));
|
||||||
Assert.All(secondBlock.Data, field => Assert.Empty(field.Value.Value));
|
Assert.All(secondBlock.Data, field => Assert.Equal("-", field.Value.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MapBlock_ReturnsYesAndEmptyDataForPurgedChannelExpedient()
|
public void MapBlock_ReturnsYesAndHyphensForPurgedChannelExpedient()
|
||||||
{
|
{
|
||||||
var mapper = CreateMapper();
|
var mapper = CreateMapper();
|
||||||
|
|
||||||
@@ -56,8 +56,25 @@ public sealed class OpeFieldMapperTests
|
|||||||
var secondBlock = mapper.MapBlock(null, 2, belongsToComplaintsChannel: true);
|
var secondBlock = mapper.MapBlock(null, 2, belongsToComplaintsChannel: true);
|
||||||
|
|
||||||
Assert.Equal("SI", firstBlock.Data["FIELD_0"].Value);
|
Assert.Equal("SI", firstBlock.Data["FIELD_0"].Value);
|
||||||
Assert.All(firstBlock.Data.Where(field => field.Key != "FIELD_0"), field => Assert.Empty(field.Value.Value));
|
Assert.All(firstBlock.Data.Where(field => field.Key != "FIELD_0"), field => Assert.Equal("-", field.Value.Value));
|
||||||
Assert.All(secondBlock.Data, field => Assert.Empty(field.Value.Value));
|
Assert.All(secondBlock.Data, field => Assert.Equal("-", field.Value.Value));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void MapBlock_UsesHyphenForMissingOrWhitespaceSourceValues()
|
||||||
|
{
|
||||||
|
var mapper = CreateMapper();
|
||||||
|
var source = new InternalGestionaFieldsResponse(new Dictionary<string, OpeFieldValue>
|
||||||
|
{
|
||||||
|
["fechaDenuncia"] = new("STRING", " "),
|
||||||
|
["numeroDenunciaCanal"] = new("STRING", null!)
|
||||||
|
});
|
||||||
|
|
||||||
|
var result = mapper.MapBlock(source, 1, belongsToComplaintsChannel: true);
|
||||||
|
|
||||||
|
Assert.Equal("-", result.Data["FIELD_1"].Value);
|
||||||
|
Assert.Equal("-", result.Data["FIELD_2"].Value);
|
||||||
|
Assert.Equal("-", result.Data["FIELD_3"].Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
|
|||||||
@@ -40,5 +40,6 @@ Resultado esperado
|
|||||||
- Las tres respuestas devuelven HTTP 200.
|
- Las tres respuestas devuelven HTTP 200.
|
||||||
- Los tests de Postman aparecen en verde.
|
- Los tests de Postman aparecen en verde.
|
||||||
- La tercera respuesta contiene siempre FIELD_0 a FIELD_9 para el bloque solicitado.
|
- La tercera respuesta contiene siempre FIELD_0 a FIELD_9 para el bloque solicitado.
|
||||||
|
- Los datos no informados se devuelven con el valor "-", nunca como una cadena vacia.
|
||||||
|
|
||||||
Si la peticion no llega al servidor, comprobar que el equipo resuelve gesbuzpre.antifraudeandalucia.es y tiene acceso al puerto 7094.
|
Si la peticion no llega al servidor, comprobar que el equipo resuelve gesbuzpre.antifraudeandalucia.es y tiene acceso al puerto 7094.
|
||||||
|
|||||||
@@ -99,10 +99,12 @@ La operacion siempre devuelve `FIELD_0` a `FIELD_9` como valores `STRING`.
|
|||||||
numero de denuncia, sexo, preferencias de notificacion y ambito. `FIELD_1=2`
|
numero de denuncia, sexo, preferencias de notificacion y ambito. `FIELD_1=2`
|
||||||
solicita el segundo bloque: denunciado, detalle, resumen, proteccion, lugar,
|
solicita el segundo bloque: denunciado, detalle, resumen, proteccion, lugar,
|
||||||
fecha de los hechos, autorizacion de remision y comentarios; sus dos ultimas
|
fecha de los hechos, autorizacion de remision y comentarios; sus dos ultimas
|
||||||
posiciones quedan vacias.
|
posiciones contienen `-` al estar reservadas.
|
||||||
|
|
||||||
Si el expediente no pertenece al canal, el primer bloque devuelve `NO` y el
|
Si el expediente no pertenece al canal, el primer bloque devuelve `NO` y el
|
||||||
resto vacio. Para el segundo bloque se devuelven los diez campos vacios.
|
resto con `-`. Para el segundo bloque se devuelven los diez campos con `-`.
|
||||||
|
Cualquier dato ausente, nulo, vacio o compuesto solo por espacios se devuelve
|
||||||
|
como `-`; nunca se envian cadenas vacias en los campos de salida.
|
||||||
|
|
||||||
## Publicacion
|
## Publicacion
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ namespace ApiOPE.Services;
|
|||||||
|
|
||||||
public sealed class OpeFieldMapper
|
public sealed class OpeFieldMapper
|
||||||
{
|
{
|
||||||
|
private const string EmptyValue = "-";
|
||||||
|
|
||||||
public OpeDataEnvelope MapBlock(
|
public OpeDataEnvelope MapBlock(
|
||||||
InternalGestionaFieldsResponse? source,
|
InternalGestionaFieldsResponse? source,
|
||||||
int block,
|
int block,
|
||||||
@@ -65,9 +67,12 @@ public sealed class OpeFieldMapper
|
|||||||
{
|
{
|
||||||
output[$"FIELD_{index}"] = new OpeFieldValue(
|
output[$"FIELD_{index}"] = new OpeFieldValue(
|
||||||
"STRING",
|
"STRING",
|
||||||
index < values.Length ? values[index] : string.Empty);
|
NormalizeOutputValue(index < values.Length ? values[index] : string.Empty));
|
||||||
}
|
}
|
||||||
|
|
||||||
return new OpeDataEnvelope(output);
|
return new OpeDataEnvelope(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string NormalizeOutputValue(string? value)
|
||||||
|
=> string.IsNullOrWhiteSpace(value) ? EmptyValue : value.Trim();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user