Index: Core/Common/src/Core.Common.Base/Data/IProjectFactory.cs =================================================================== diff -u -r3d088548dfdebfd5c3adbbd67075b42e134f5c03 -rc4125b3012678bd098090e0a1dbb5b099fbe2d3d --- Core/Common/src/Core.Common.Base/Data/IProjectFactory.cs (.../IProjectFactory.cs) (revision 3d088548dfdebfd5c3adbbd67075b42e134f5c03) +++ Core/Common/src/Core.Common.Base/Data/IProjectFactory.cs (.../IProjectFactory.cs) (revision c4125b3012678bd098090e0a1dbb5b099fbe2d3d) @@ -19,6 +19,8 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; + namespace Core.Common.Base.Data { /// @@ -29,7 +31,9 @@ /// /// Creates a new instance of . /// + /// The func to perform + /// after the project is created. /// An empty object. - IProject CreateNewProject(); + IProject CreateNewProject(Func onCreateNewProjectFunc); } } \ No newline at end of file Index: Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerProjectFactory.cs =================================================================== diff -u -r711926831e7b9fe24d536b184db5e5a4294c899a -rc4125b3012678bd098090e0a1dbb5b099fbe2d3d --- Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerProjectFactory.cs (.../RiskeerProjectFactory.cs) (revision 711926831e7b9fe24d536b184db5e5a4294c899a) +++ Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerProjectFactory.cs (.../RiskeerProjectFactory.cs) (revision c4125b3012678bd098090e0a1dbb5b099fbe2d3d) @@ -19,8 +19,8 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; using Core.Common.Base.Data; -using Riskeer.Common.Data.AssessmentSection; using Riskeer.Integration.Data; namespace Riskeer.Integration.Plugin @@ -30,13 +30,30 @@ /// public class RiskeerProjectFactory : IProjectFactory { - public IProject CreateNewProject() + /// + /// A ; or null when there + /// is no . + /// Thrown when + /// is null. + public IProject CreateNewProject(Func onCreateNewProjectFunc) { + if (onCreateNewProjectFunc == null) + { + throw new ArgumentNullException(nameof(onCreateNewProjectFunc)); + } + + var assessmentSection = (AssessmentSection) onCreateNewProjectFunc(); + + if (assessmentSection == null) + { + return null; + } + return new RiskeerProject { AssessmentSections = { - new AssessmentSection(AssessmentSectionComposition.Dike) + assessmentSection } }; } Index: Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/RiskeerProjectFactoryTest.cs =================================================================== diff -u -r711926831e7b9fe24d536b184db5e5a4294c899a -rc4125b3012678bd098090e0a1dbb5b099fbe2d3d --- Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/RiskeerProjectFactoryTest.cs (.../RiskeerProjectFactoryTest.cs) (revision 711926831e7b9fe24d536b184db5e5a4294c899a) +++ Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/RiskeerProjectFactoryTest.cs (.../RiskeerProjectFactoryTest.cs) (revision c4125b3012678bd098090e0a1dbb5b099fbe2d3d) @@ -19,8 +19,10 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; using Core.Common.Base.Data; using NUnit.Framework; +using Riskeer.Common.Data.AssessmentSection; using Riskeer.Integration.Data; namespace Riskeer.Integration.Plugin.Test @@ -29,16 +31,64 @@ public class RiskeerProjectFactoryTest { [Test] - public void CreateNewProject_ReturnsNewRiskeerProject() + public void CreateNewProject_OnCreateNewProjectFuncNull_ThrowsArgumentNullException() { // Setup var projectFactory = new RiskeerProjectFactory(); // Call - IProject result = projectFactory.CreateNewProject(); + void Call() => projectFactory.CreateNewProject(null); // Assert - Assert.IsInstanceOf(result); + var exception = Assert.Throws(Call); + Assert.AreEqual("onCreateNewProjectFunc", exception.ParamName); } + + [Test] + public void CreateNewProject_WithOnCreateNewProjectFuncReturnAssessmentSection_ReturnsNewRiskeerProject() + { + // Setup + var projectFactory = new RiskeerProjectFactory(); + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); + + // Call + IProject project = projectFactory.CreateNewProject(() => assessmentSection); + + // Assert + Assert.IsInstanceOf(project); + var riskeerProject = (RiskeerProject) project; + CollectionAssert.AreEqual(new[] + { + assessmentSection + }, riskeerProject.AssessmentSections); + } + + [Test] + public void CreateNewProject_WithOnCreateNewProjectFuncReturnNull_ReturnsNull() + { + // Setup + var projectFactory = new RiskeerProjectFactory(); + + // Call + IProject project = projectFactory.CreateNewProject(() => null); + + // Assert + Assert.IsNull(project); + } + + [Test] + public void CreateNewProject_WithOnCreateNewProjectFuncThrowsException_ThrowsException() + { + // Setup + var projectFactory = new RiskeerProjectFactory(); + const string expectedMessage = "Exception message test"; + + // Call + void Call() => projectFactory.CreateNewProject(() => throw new Exception(expectedMessage)); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual(expectedMessage, exception.Message); + } } } \ No newline at end of file