// Copyright (C) Stichting Deltares 2016. All rights reserved.
//
// This file is part of Ringtoets.
//
// Ringtoets is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
// All names, logos, and references to "Deltares" are registered trademarks of
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
using System;
using System.Linq;
using Application.Ringtoets.Storage.DbContext;
using Application.Ringtoets.Storage.Read;
using NUnit.Framework;
using Ringtoets.Common.Data.Calculation;
using Ringtoets.GrassCoverErosionInwards.Data;
using Ringtoets.Piping.Data;
namespace Application.Ringtoets.Storage.Test.Read
{
[TestFixture]
public class CalculationGroupEntityReadExtentionsTest
{
[Test]
public void ReadPipingCalculationGroup_ReadConversionCollectorIsNull_ThrowArgumentNullException()
{
// Setup
var entity = new CalculationGroupEntity();
var generalPipingInput = new GeneralPipingInput();
// Call
TestDelegate call = () => entity.ReadPipingCalculationGroup(null, generalPipingInput);
// Assert
string paramName = Assert.Throws(call).ParamName;
Assert.AreEqual("collector", paramName);
}
[Test]
public void ReadPipingCalculationGroup_GeneralPipingInputIsNull_ThrowArgumentNullException()
{
// Setup
var entity = new CalculationGroupEntity();
var collector = new ReadConversionCollector();
// Call
TestDelegate call = () => entity.ReadPipingCalculationGroup(collector, null);
// Assert
string paramName = Assert.Throws(call).ParamName;
Assert.AreEqual("generalPipingInput", paramName);
}
[Test]
[TestCase(123, "A", 1)]
[TestCase(1, "b", 0)]
public void ReadPipingCalculationGroup_EntityWithoutChildren_CreateCalculationGroupWithoutChildren(
long id, string name, byte isEditable)
{
// Setup
var entity = new CalculationGroupEntity
{
CalculationGroupEntityId = id,
Name = name,
IsEditable = isEditable
};
var collector = new ReadConversionCollector();
var generalPipingInput = new GeneralPipingInput();
// Call
CalculationGroup group = entity.ReadPipingCalculationGroup(collector, generalPipingInput);
// Assert
Assert.AreEqual(id, group.StorageId);
Assert.AreEqual(name, group.Name);
Assert.AreEqual(Convert.ToBoolean(isEditable), group.IsNameEditable);
CollectionAssert.IsEmpty(group.Children);
}
[Test]
public void ReadPipingCalculationGroup_EntityWithChildGroups_CreateCalculationGroupWithChildGroups()
{
// Setup
var rootGroupEntity = new CalculationGroupEntity
{
CalculationGroupEntityId = 1,
Name = "A",
CalculationGroupEntity1 =
{
new CalculationGroupEntity
{
CalculationGroupEntityId = 2,
Name = "AA",
IsEditable = 1,
Order = 0
},
new CalculationGroupEntity
{
CalculationGroupEntityId = 3,
Name = "AB",
IsEditable = 0,
CalculationGroupEntity1 =
{
new CalculationGroupEntity
{
CalculationGroupEntityId = 4,
Name = "ABA",
IsEditable = 0,
Order = 0
},
new CalculationGroupEntity
{
CalculationGroupEntityId = 5,
Name = "ABB",
IsEditable = 1,
Order = 1
}
},
Order = 1
}
}
};
var collector = new ReadConversionCollector();
var generalPipingInput = new GeneralPipingInput();
// Call
var rootGroup = rootGroupEntity.ReadPipingCalculationGroup(collector, generalPipingInput);
// Assert
Assert.AreEqual(1, rootGroup.StorageId);
Assert.AreEqual("A", rootGroup.Name);
Assert.IsFalse(rootGroup.IsNameEditable);
ICalculationBase[] rootChildren = rootGroup.Children.ToArray();
var rootChildGroup1 = (CalculationGroup)rootChildren[0];
Assert.AreEqual("AA", rootChildGroup1.Name);
Assert.AreEqual(2, rootChildGroup1.StorageId);
Assert.IsTrue(rootChildGroup1.IsNameEditable);
CollectionAssert.IsEmpty(rootChildGroup1.Children);
var rootChildGroup2 = (CalculationGroup)rootChildren[1];
Assert.AreEqual("AB", rootChildGroup2.Name);
Assert.AreEqual(3, rootChildGroup2.StorageId);
Assert.IsFalse(rootChildGroup2.IsNameEditable);
ICalculationBase[] rootChildGroup2Children = rootChildGroup2.Children.ToArray();
var rootChildGroup1Child1 = (CalculationGroup)rootChildGroup2Children[0];
Assert.AreEqual("ABA", rootChildGroup1Child1.Name);
Assert.AreEqual(4, rootChildGroup1Child1.StorageId);
Assert.IsFalse(rootChildGroup1Child1.IsNameEditable);
CollectionAssert.IsEmpty(rootChildGroup1Child1.Children);
var rootChildGroup1Child2 = (CalculationGroup)rootChildGroup2Children[1];
Assert.AreEqual("ABB", rootChildGroup1Child2.Name);
Assert.AreEqual(5, rootChildGroup1Child2.StorageId);
Assert.IsTrue(rootChildGroup1Child2.IsNameEditable);
CollectionAssert.IsEmpty(rootChildGroup1Child2.Children);
}
[Test]
public void ReadPipingCalculationGroup_EntityWithChildPipingCalculations_CreateCalculationGroupWithChildCalculations()
{
// Setup
var rootGroupEntity = new CalculationGroupEntity
{
CalculationGroupEntityId = 1,
Name = "A",
PipingCalculationEntities =
{
new PipingCalculationEntity
{
PipingCalculationEntityId = 3,
Order = 0,
Name = "1",
DampingFactorExitMean = 1,
},
new PipingCalculationEntity
{
PipingCalculationEntityId = 6,
Order = 1,
Name = "2",
DampingFactorExitMean = 2,
}
}
};
var collector = new ReadConversionCollector();
var generalPipingInput = new GeneralPipingInput();
// Call
var rootGroup = rootGroupEntity.ReadPipingCalculationGroup(collector, generalPipingInput);
// Assert
ICalculationBase[] rootChildren = rootGroup.Children.ToArray();
Assert.AreEqual(2, rootChildren.Length);
var rootChildCalculation1 = (PipingCalculationScenario)rootChildren[0];
Assert.AreEqual("1", rootChildCalculation1.Name);
Assert.AreEqual(3, rootChildCalculation1.StorageId);
var rootChildCalculation2 = (PipingCalculationScenario)rootChildren[1];
Assert.AreEqual("2", rootChildCalculation2.Name);
Assert.AreEqual(6, rootChildCalculation2.StorageId);
}
[Test]
public void ReadPipingCalculationGroup_EntityWithChildPipingCalculationsAndGroups_CreateCalculationGroupWithChildCalculationsAndGroups()
{
// Setup
var rootGroupEntity = new CalculationGroupEntity
{
CalculationGroupEntityId = 1,
Name = "A",
PipingCalculationEntities =
{
new PipingCalculationEntity
{
PipingCalculationEntityId = 3,
Order = 0,
Name = "calculation1",
DampingFactorExitMean = 1,
},
new PipingCalculationEntity
{
PipingCalculationEntityId = 6,
Order = 2,
Name = "calculation2",
DampingFactorExitMean = 2,
}
},
CalculationGroupEntity1 =
{
new CalculationGroupEntity
{
CalculationGroupEntityId = 2,
Order = 1,
Name = "group1"
},
new CalculationGroupEntity
{
CalculationGroupEntityId = 4,
Order = 3,
Name = "group2"
}
}
};
var collector = new ReadConversionCollector();
var generalPipingInput = new GeneralPipingInput();
// Call
var rootGroup = rootGroupEntity.ReadPipingCalculationGroup(collector, generalPipingInput);
// Assert
ICalculationBase[] rootChildren = rootGroup.Children.ToArray();
Assert.AreEqual(4, rootChildren.Length);
var rootChildCalculation1 = (PipingCalculationScenario)rootChildren[0];
Assert.AreEqual("calculation1", rootChildCalculation1.Name);
Assert.AreEqual(3, rootChildCalculation1.StorageId);
var rootChildGroup1 = (CalculationGroup)rootChildren[1];
Assert.AreEqual("group1", rootChildGroup1.Name);
Assert.AreEqual(2, rootChildGroup1.StorageId);
var rootChildCalculation2 = (PipingCalculationScenario)rootChildren[2];
Assert.AreEqual("calculation2", rootChildCalculation2.Name);
Assert.AreEqual(6, rootChildCalculation2.StorageId);
var rootChildGroup2 = (CalculationGroup)rootChildren[3];
Assert.AreEqual("group2", rootChildGroup2.Name);
Assert.AreEqual(4, rootChildGroup2.StorageId);
}
[Test]
public void ReadAsGrassCoverErosionInwardsCalculationGroup_CollectorIsNull_ThrowArgumentNullException()
{
// Setup
var entity = new CalculationGroupEntity();
// Call
TestDelegate call = () => entity.ReadAsGrassCoverErosionInwardsCalculationGroup(null);
// Assert
string paramName = Assert.Throws(call).ParamName;
Assert.AreEqual("collector", paramName);
}
[Test]
[TestCase(345, "HAbba", 1)]
[TestCase(45, "Dooeis", 0)]
public void ReadAsGrassCoverErosionInwardsCalculationGroup_EntityWithoutChildren_CreateCalculationGroupWithoutChildren(
long id, string name, byte isEditable)
{
// Setup
var entity = new CalculationGroupEntity
{
CalculationGroupEntityId = id,
Name = name,
IsEditable = isEditable
};
var collector = new ReadConversionCollector();
// Call
CalculationGroup group = entity.ReadAsGrassCoverErosionInwardsCalculationGroup(collector);
// Assert
Assert.AreEqual(id, group.StorageId);
Assert.AreEqual(name, group.Name);
Assert.AreEqual(Convert.ToBoolean(isEditable), group.IsNameEditable);
CollectionAssert.IsEmpty(group.Children);
}
[Test]
public void ReadAsGrassCoverErosionInwardsCalculationGroup_EntityWithChildGroups_CreateCalculationGroupWithChildGroups()
{
// Setup
var rootGroupEntity = new CalculationGroupEntity
{
CalculationGroupEntityId = 1,
Name = "A",
CalculationGroupEntity1 =
{
new CalculationGroupEntity
{
CalculationGroupEntityId = 2,
Name = "AA",
IsEditable = 1,
Order = 0
},
new CalculationGroupEntity
{
CalculationGroupEntityId = 3,
Name = "AB",
IsEditable = 0,
CalculationGroupEntity1 =
{
new CalculationGroupEntity
{
CalculationGroupEntityId = 4,
Name = "ABA",
IsEditable = 0,
Order = 0
},
new CalculationGroupEntity
{
CalculationGroupEntityId = 5,
Name = "ABB",
IsEditable = 1,
Order = 1
}
},
Order = 1
}
}
};
var collector = new ReadConversionCollector();
// Call
var rootGroup = rootGroupEntity.ReadAsGrassCoverErosionInwardsCalculationGroup(collector);
// Assert
Assert.AreEqual(1, rootGroup.StorageId);
Assert.AreEqual("A", rootGroup.Name);
Assert.IsFalse(rootGroup.IsNameEditable);
ICalculationBase[] rootChildren = rootGroup.Children.ToArray();
var rootChildGroup1 = (CalculationGroup)rootChildren[0];
Assert.AreEqual("AA", rootChildGroup1.Name);
Assert.AreEqual(2, rootChildGroup1.StorageId);
Assert.IsTrue(rootChildGroup1.IsNameEditable);
CollectionAssert.IsEmpty(rootChildGroup1.Children);
var rootChildGroup2 = (CalculationGroup)rootChildren[1];
Assert.AreEqual("AB", rootChildGroup2.Name);
Assert.AreEqual(3, rootChildGroup2.StorageId);
Assert.IsFalse(rootChildGroup2.IsNameEditable);
ICalculationBase[] rootChildGroup2Children = rootChildGroup2.Children.ToArray();
var rootChildGroup1Child1 = (CalculationGroup)rootChildGroup2Children[0];
Assert.AreEqual("ABA", rootChildGroup1Child1.Name);
Assert.AreEqual(4, rootChildGroup1Child1.StorageId);
Assert.IsFalse(rootChildGroup1Child1.IsNameEditable);
CollectionAssert.IsEmpty(rootChildGroup1Child1.Children);
var rootChildGroup1Child2 = (CalculationGroup)rootChildGroup2Children[1];
Assert.AreEqual("ABB", rootChildGroup1Child2.Name);
Assert.AreEqual(5, rootChildGroup1Child2.StorageId);
Assert.IsTrue(rootChildGroup1Child2.IsNameEditable);
CollectionAssert.IsEmpty(rootChildGroup1Child2.Children);
}
[Test]
public void ReadAsGrassCoverErosionInwardsCalculationGroup_EntityWithChildGrassCoverErosionInwardsCalculations_CreateCalculationGroupWithChildCalculations()
{
// Setup
var rootGroupEntity = new CalculationGroupEntity
{
CalculationGroupEntityId = 1,
Name = "A",
GrassCoverErosionInwardsCalculationEntities =
{
new GrassCoverErosionInwardsCalculationEntity
{
GrassCoverErosionInwardsCalculationEntityId = 3,
Order = 0,
Name = "1"
},
new GrassCoverErosionInwardsCalculationEntity
{
GrassCoverErosionInwardsCalculationEntityId = 6,
Order = 1,
Name = "2"
}
}
};
var collector = new ReadConversionCollector();
// Call
var rootGroup = rootGroupEntity.ReadAsGrassCoverErosionInwardsCalculationGroup(collector);
// Assert
ICalculationBase[] rootChildren = rootGroup.Children.ToArray();
Assert.AreEqual(2, rootChildren.Length);
var rootChildCalculation1 = (GrassCoverErosionInwardsCalculation)rootChildren[0];
Assert.AreEqual("1", rootChildCalculation1.Name);
Assert.AreEqual(3, rootChildCalculation1.StorageId);
var rootChildCalculation2 = (GrassCoverErosionInwardsCalculation)rootChildren[1];
Assert.AreEqual("2", rootChildCalculation2.Name);
Assert.AreEqual(6, rootChildCalculation2.StorageId);
}
[Test]
public void ReadAsGrassCoverErosionInwardsCalculationGroup_EntityWithChildGrassCoverErosionInwardsCalculationsAndGroups_CreateCalculationGroupWithChildCalculationsAndGroups()
{
// Setup
var rootGroupEntity = new CalculationGroupEntity
{
CalculationGroupEntityId = 1,
Name = "A",
GrassCoverErosionInwardsCalculationEntities =
{
new GrassCoverErosionInwardsCalculationEntity
{
GrassCoverErosionInwardsCalculationEntityId = 3,
Order = 0,
Name = "calculation1"
},
new GrassCoverErosionInwardsCalculationEntity
{
GrassCoverErosionInwardsCalculationEntityId = 6,
Order = 2,
Name = "calculation2"
}
},
CalculationGroupEntity1 =
{
new CalculationGroupEntity
{
CalculationGroupEntityId = 2,
Order = 1,
Name = "group1"
},
new CalculationGroupEntity
{
CalculationGroupEntityId = 4,
Order = 3,
Name = "group2"
}
}
};
var collector = new ReadConversionCollector();
// Call
var rootGroup = rootGroupEntity.ReadAsGrassCoverErosionInwardsCalculationGroup(collector);
// Assert
ICalculationBase[] rootChildren = rootGroup.Children.ToArray();
Assert.AreEqual(4, rootChildren.Length);
var rootChildCalculation1 = (GrassCoverErosionInwardsCalculation)rootChildren[0];
Assert.AreEqual("calculation1", rootChildCalculation1.Name);
Assert.AreEqual(3, rootChildCalculation1.StorageId);
var rootChildGroup1 = (CalculationGroup)rootChildren[1];
Assert.AreEqual("group1", rootChildGroup1.Name);
Assert.AreEqual(2, rootChildGroup1.StorageId);
var rootChildCalculation2 = (GrassCoverErosionInwardsCalculation)rootChildren[2];
Assert.AreEqual("calculation2", rootChildCalculation2.Name);
Assert.AreEqual(6, rootChildCalculation2.StorageId);
var rootChildGroup2 = (CalculationGroup)rootChildren[3];
Assert.AreEqual("group2", rootChildGroup2.Name);
Assert.AreEqual(4, rootChildGroup2.StorageId);
}
}
}