Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#2115 error when importing empty row #2384

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion src/OSPSuite.Infrastructure.Import/Core/DataSheet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ public void RemoveEmptyColumns()
}
}

public void RemoveEmptyRows()
public void RemoveEmptyRowsAtTheEnd()
{
for (var i = _rawDataTable.Count - 1; i >= 0; i--)
{
Expand All @@ -184,6 +184,15 @@ public void RemoveEmptyRows()
}
}

public void RemoveEmptyRows()
{
for (var i = _rawDataTable.Count - 1; i >= 0; i--)
{
if (_rawDataTable[i].All(x => x.IsNullOrEmpty()))
_rawDataTable.RemoveAt(i);
}
}

public string SheetName { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ protected override void LoadFromFile(string path)
}

dataSheet.RemoveEmptyColumns();
dataSheet.RemoveEmptyRows();
dataSheet.RemoveEmptyRowsAtTheEnd();
benjaperez1983 marked this conversation as resolved.
Show resolved Hide resolved

DataSheets.AddSheet(dataSheet);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ protected override void LoadFromFile(string path)
}

rawSheetData.RemoveEmptyColumns();
rawSheetData.RemoveEmptyRows();
rawSheetData.RemoveEmptyRowsAtTheEnd();

DataSheets.AddSheet(rawSheetData);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,8 @@ private void loadSheets(IDataSourceFile dataSourceFile, IReadOnlyList<string> sh
}

var sheets = dataSourceFile.DataSheets.GetDataSheetsByName(sheetNames);
sheets.Each(sheet => sheet.RemoveEmptyRows());

var dataMappings = dataSourceFile.Format.GetParameters<MetaDataFormatParameter>().Where(p => p.ColumnName != null).Select(md =>
new MetaDataMappingConverter()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,81 @@ public void sets_column_mapping_presenter_settings()
}
}

public class When_setting_data_source_with_empty_rows : concern_for_ImporterPresenter
{
private RandomDataSourceFile _dataSourceFile;
protected Cache<string, DataSheet> _sheets;

protected override void Context()
{
base.Context();
_sheets = new Cache<string, DataSheet>();
_sheets.Add("Sheet1", A.Fake<DataSheet>());

_dataSourceFile = new RandomDataSourceFile(A.Fake<IImportLogger>());
_dataSourceFile.Format = A.Fake<IDataFormat>();
_dataSourceFile.Path = "FakePath";
A.CallTo(() => _importerDataPresenter.SetDataSource(A<string>.Ignored)).Returns(_dataSourceFile);
_importerDataPresenter.OnImportSheets += Raise.With(new ImportSheetsEventArgs()
{ Filter = "", DataSourceFile = _dataSourceFile, SheetNames = _sheets.Keys.ToList() });
}

[Observation]
public void should_not_throw_an_ImporterParsingException()
{
sut.LoadConfiguration(_importerConfiguration, "");
}

//This class needs to be added to create a random data source file
//With the empty rows that we need to test
public class RandomDataSourceFile : DataSourceFile
benjaperez1983 marked this conversation as resolved.
Show resolved Hide resolved
{
public RandomDataSourceFile(IImportLogger logger) : base(logger)
{
}

protected override void LoadFromFile(string path)
{
Console.WriteLine($"Loading data from file: {path} (simulated random data)");

var random = new Random();
int numberOfSheets = 1;

for (int i = 0; i < numberOfSheets; i++)
{
var dataSheet = new DataSheet
{
SheetName = $"Sheet{i + 1}"
};

int numberOfRows = 5;
int numberOfColumns = 3;

for (int c = 0; c < numberOfColumns; c++)
{
dataSheet.AddColumn($"Column{c + 1}", c);
}

var emptyRow = new List<string>(Enumerable.Repeat(string.Empty, numberOfColumns));
dataSheet.AddRow(emptyRow);

for (int r = 0; r < numberOfRows; r++)
{
var row = new List<string>();
for (int c = 0; c < numberOfColumns; c++)
{
row.Add($"Data_{i + 1}_{r + 1}_{c + 1}");
}

dataSheet.AddRow(row);
}

DataSheets.AddSheet(dataSheet);
}
}
}
}

public class When_import_data : concern_for_ImporterPresenter
{
protected bool triggered = false;
Expand Down