Skip to content

Commit

Permalink
#1837 fixed (#1838)
Browse files Browse the repository at this point in the history
  • Loading branch information
georgeDaskalakis authored Dec 16, 2022
1 parent 1ccded3 commit edaca64
Show file tree
Hide file tree
Showing 4 changed files with 149 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/OSPSuite.Assets/UIConstants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1357,6 +1357,8 @@ public static class Error
public static readonly string SimpleParseErrorMessage = "There were errors while parsing your data. Navigate to the sheets to read the concrete error.";
public static readonly string FoldValueMustBeGreaterThanOne = "Fold value must be a number greater than one.";

public static string NoUnitColumnValues(string mappingName) => $"No values for the unit were found in the excel column mapped for '{mappingName}' \n";

public static string ParseErrorMessage(IEnumerable<string> errors) => $"There were errors while parsing your data: {string.Join(". ", errors)}";

public static string ErrorWhenPlottingDataRepository(int sheetName, string exceptionMessage) =>
Expand Down
8 changes: 8 additions & 0 deletions src/OSPSuite.Infrastructure.Import/Core/DataSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using OSPSuite.Infrastructure.Import.Core.Exceptions;
using OSPSuite.Infrastructure.Import.Services;
using OSPSuite.Utility.Collections;
using OSPSuite.Utility.Extensions;

namespace OSPSuite.Infrastructure.Import.Core
{
Expand Down Expand Up @@ -263,6 +264,13 @@ private ParseErrors validateUnitsSupportedAndSameDimension(Cache<string, ColumnI
if (column.Key.Column.Dimension == null)
{
var firstNonEmptyUnit = column.Value.FirstOrDefault(x => !string.IsNullOrEmpty(x.Unit));

if (firstNonEmptyUnit == null)
{
errors.Add(dataSet, new NoUnitColumnValues(columnInfo.DisplayName));
continue;
}


var dimensionOfFirstUnit = columnInfo.SupportedDimensions.FirstOrDefault(x => x.FindUnit(firstNonEmptyUnit.Unit, ignoreCase: true) != null);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,14 @@ public InvalidDimensionParseErrorDescription(string invalidUnit, string mappingN
}
}

public class NoUnitColumnValues : ParseErrorDescription
{
public NoUnitColumnValues(string mappingName)
{
Message = Error.NoUnitColumnValues(mappingName);
}
}

public class NaNParseErrorDescription : ParseErrorDescription
{
public NaNParseErrorDescription()
Expand Down
131 changes: 131 additions & 0 deletions tests/OSPSuite.Infrastructure.Tests/Import/DataSourceSpecs.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
using System.Collections.Generic;
using System.Linq;
using FakeItEasy;
using OSPSuite.Assets;
using OSPSuite.BDDHelper;
using OSPSuite.BDDHelper.Extensions;
using OSPSuite.Core.Domain;
using OSPSuite.Core.Domain.UnitSystem;
using OSPSuite.Core.Import;
using OSPSuite.Infrastructure.Import.Core;
using OSPSuite.Infrastructure.Import.Core.Exceptions;
using OSPSuite.Infrastructure.Import.Services;
using OSPSuite.Utility.Collections;

Expand Down Expand Up @@ -489,6 +492,134 @@ public void should_ignore_casing()
}
}


public class When_validating_missing_unit_column : concern_for_DataSource
{
private DataSet _dataSet;

protected override void Context()
{
base.Context();

var parsedData = new Dictionary<ExtendedColumn, IList<SimulationPoint>>()
{
{
new ExtendedColumn()
{
Column = new Column()
{
Name = "Time",
Unit = new UnitDescription("s")
},
ColumnInfo = _columnInfos["Time"]
},
new List<SimulationPoint>()
{
new SimulationPoint()
{
Unit = "s",
Measurement = 0,
Lloq = double.NaN
},
new SimulationPoint()
{
Unit = "s",
Measurement = 1,
Lloq = double.NaN
},
new SimulationPoint()
{
Unit = "s",
Measurement = 2,
Lloq = double.NaN
}
}
},
{
new ExtendedColumn()
{
Column = new Column()
{
Name = "Concentration",
Unit = new UnitDescription("")
},
ColumnInfo = _columnInfos["Concentration"]
},
new List<SimulationPoint>()
{
new SimulationPoint()
{
Unit = "",
Measurement = 10,
Lloq = 1
},
new SimulationPoint()
{
Unit = "",
Measurement = 0.1,
Lloq = 1
},
new SimulationPoint()
{
Unit = "",
Measurement = double.NaN,
Lloq = 1
}
}
},
{
new ExtendedColumn()
{
Column = new Column()
{
Name = "Error",
Unit = new UnitDescription("pmol/l"),
Dimension = Constants.Dimension.NO_DIMENSION
},
ColumnInfo = _columnInfos["Error"]
},
new List<SimulationPoint>()
{
new SimulationPoint()
{
Unit = "pmol/l",
Measurement = 10,
Lloq = 1
},
new SimulationPoint()
{
Unit = "pmol/l",
Measurement = 0.1,
Lloq = 1
},
new SimulationPoint()
{
Unit = "pmol/l",
Measurement = double.NaN,
Lloq = 1
}
}
}
};
_dataSet = new DataSet();
_dataSet.AddData(new List<ParsedDataSet>() { { new ParsedDataSet(new List<string>(), A.Fake<DataSheet>(), new List<UnformattedRow>(), parsedData) } });
sut.DataSets.Clear();

}

protected override void Because()
{
sut.DataSets.Add("sheet1", _dataSet);
}

[Observation]
public void should_ignore_casing()
{
sut.ValidateDataSourceUnits(_columnInfos).ErrorsFor(_dataSet).FirstOrDefault(error => error.Message.Equals(Error.NoUnitColumnValues("Concentration")))
.ShouldNotBeNull();
}
}

public class When_validating_consistent_column_input_units : concern_for_DataSource
{
private DataSet _dataSet;
Expand Down

0 comments on commit edaca64

Please sign in to comment.