Skip to content

Commit

Permalink
add tests with base test class
Browse files Browse the repository at this point in the history
  • Loading branch information
adamhathcock committed Jul 4, 2024
1 parent 91a69a8 commit 23942b0
Show file tree
Hide file tree
Showing 10 changed files with 220 additions and 66 deletions.
Original file line number Diff line number Diff line change
@@ -1,87 +1,75 @@
using System.Collections;
using FluentAssertions;
using Moq;
using FluentAssertions;
using NUnit.Framework;
using Objects;
using Speckle.Converters.Common;
using Speckle.Converters.Common.Objects;
using Speckle.Converters.RevitShared;
using Speckle.Converters.RevitShared.Helpers;
using Speckle.Converters.RevitShared.Raw;
using Speckle.Converters.RevitShared.Services;
using Speckle.Testing;

namespace Speckle.Converters.Revit2023.Tests;

public class ModelCurveArrayToSpeckleConverterTests
public class ModelCurveArrayToSpeckleConverterTests : MoqTest
{
private MockRepository _repository;

private Mock<IRevitConversionContextStack> _revitConversionContextStack;
private Mock<IScalingServiceToSpeckle> _scalingServiceToSpeckle;
private Mock<ITypedConverter<DB.Curve, ICurve>> _curveConverter;

[SetUp]
public void Start()
{
_repository = new(MockBehavior.Strict);
_revitConversionContextStack = _repository.Create<IRevitConversionContextStack>();
_scalingServiceToSpeckle = _repository.Create<IScalingServiceToSpeckle>();
_curveConverter = _repository.Create<ITypedConverter<DB.Curve, ICurve>>();
}

[TearDown]
public void Verify() => _repository.VerifyAll();

[Test]
public void Convert_Empty()
{
var revitConversionContextStack = Create<IRevitConversionContextStack>();
var scalingServiceToSpeckle = Create<IScalingServiceToSpeckle>();
var curveConverter = Create<ITypedConverter<DB.Curve, ICurve>>();

var sut = new ModelCurveArrayToSpeckleConverter(
_revitConversionContextStack.Object,
_scalingServiceToSpeckle.Object,
_curveConverter.Object
revitConversionContextStack.Object,
scalingServiceToSpeckle.Object,
curveConverter.Object
);
var array = _repository.Create<DB.ModelCurveArray>();
var array = Create<DB.ModelCurveArray>();
array.Setup(x => x.GetEnumerator()).Returns(Enumerable.Empty<object>().GetEnumerator());
Assert.Throws<SpeckleConversionException>(() => sut.Convert(array.Object));
}

[Test]
public void Convert()
{
var endpoint1 = _repository.Create<DB.XYZ>();
var geometry1 = _repository.Create<DB.Curve>();
var curve1 = _repository.Create<DB.ModelCurve>();
var revitConversionContextStack = Create<IRevitConversionContextStack>();
var scalingServiceToSpeckle = Create<IScalingServiceToSpeckle>();
var curveConverter = Create<ITypedConverter<DB.Curve, ICurve>>();

var endpoint1 = Create<DB.XYZ>();
var geometry1 = Create<DB.Curve>();
var curve1 = Create<DB.ModelCurve>();
curve1.Setup(x => x.GeometryCurve).Returns(geometry1.Object);
geometry1.Setup(x => x.Length).Returns(2);
geometry1.Setup(x => x.GetEndPoint(0)).Returns(endpoint1.Object);

var endpoint2 = _repository.Create<DB.XYZ>();
var geometry2 = _repository.Create<DB.Curve>();
var curve2 = _repository.Create<DB.ModelCurve>();
var endpoint2 = Create<DB.XYZ>();
var geometry2 = Create<DB.Curve>();
var curve2 = Create<DB.ModelCurve>();
curve2.Setup(x => x.GeometryCurve).Returns(geometry2.Object);
geometry2.Setup(x => x.Length).Returns(3);
geometry2.Setup(x => x.GetEndPoint(1)).Returns(endpoint2.Object);

var context = _repository.Create<IConversionContext<DB.Document>>();
_revitConversionContextStack.Setup(x => x.Current).Returns(context.Object);
var context = Create<IConversionContext<DB.Document>>();
revitConversionContextStack.Setup(x => x.Current).Returns(context.Object);

var units = "units";
context.Setup(x => x.SpeckleUnits).Returns(units);

var scaleLength = 2.2;
_scalingServiceToSpeckle.Setup(x => x.ScaleLength(2 + 3)).Returns(scaleLength);
scalingServiceToSpeckle.Setup(x => x.ScaleLength(2 + 3)).Returns(scaleLength);

endpoint1.Setup(x => x.DistanceTo(endpoint2.Object)).Returns(4.4);

_curveConverter.Setup(x => x.Convert(geometry1.Object)).Returns(_repository.Create<ICurve>().Object);
_curveConverter.Setup(x => x.Convert(geometry2.Object)).Returns(_repository.Create<ICurve>().Object);
curveConverter.Setup(x => x.Convert(geometry1.Object)).Returns(Create<ICurve>().Object);
curveConverter.Setup(x => x.Convert(geometry2.Object)).Returns(Create<ICurve>().Object);

var sut = new ModelCurveArrayToSpeckleConverter(
_revitConversionContextStack.Object,
_scalingServiceToSpeckle.Object,
_curveConverter.Object
revitConversionContextStack.Object,
scalingServiceToSpeckle.Object,
curveConverter.Object
);
var array = _repository.Create<DB.ModelCurveArray>();
var array = Create<DB.ModelCurveArray>();

array
.Setup(x => x.GetEnumerator())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
Expand All @@ -17,6 +17,7 @@

<ItemGroup>
<ProjectReference Include="..\..\..\Sdk\Speckle.Converters.Common\Speckle.Converters.Common.csproj" />
<ProjectReference Include="..\..\..\Sdk\Speckle.Testing\Speckle.Testing.csproj" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
using FluentAssertions;
using Moq;
using NUnit.Framework;
using Rhino;
using Speckle.Converters.Common;
using Speckle.Converters.Common.Objects;
using Speckle.Converters.Rhino7.ToSpeckle.Raw;
using Speckle.Testing;

namespace Speckle.Converters.Rhino7.Tests;

public class ArcToSpeckleConverterTests : MoqTest
{
[Test]
public void Convert_ShouldConvertArcCorrectly()
{
// Arrange
var radius = 1.1d;
var mockPointConverter = Create<ITypedConverter<RG.Point3d, SOG.Point>>();
var mockPlaneConverter = Create<ITypedConverter<RG.Plane, SOG.Plane>>();
var mockBoxConverter = Create<ITypedConverter<RG.Box, SOG.Box>>();
var mockContextStack = Create<IConversionContextStack<RhinoDoc, UnitSystem>>();
var factory = Create<IBoxFactory>();

var context = Create<IConversionContext<RhinoDoc>>();
context.Setup(x => x.SpeckleUnits).Returns("units");
mockContextStack.Setup(cs => cs.Current).Returns(context.Object);

var targetArc = Create<RG.Arc>();
var targetPlane = Create<RG.Plane>();
var targetBox = Create<RG.Box>();
var point3d = Create<RG.Point3d>();
var boundbox = Create<RG.BoundingBox>();

targetArc.Setup(x => x.Plane).Returns(targetPlane.Object);
targetArc.Setup(x => x.Radius).Returns(radius);
targetArc.Setup(x => x.StartAngle).Returns(radius);
targetArc.Setup(x => x.EndAngle).Returns(radius);
targetArc.Setup(x => x.Angle).Returns(radius);
targetArc.Setup(x => x.Length).Returns(radius);
targetArc.Setup(x => x.StartPoint).Returns(point3d.Object);
targetArc.Setup(x => x.MidPoint).Returns(point3d.Object);
targetArc.Setup(x => x.EndPoint).Returns(point3d.Object);
targetArc.Setup(x => x.BoundingBox()).Returns(boundbox.Object);
factory.Setup(x => x.Create(boundbox.Object)).Returns(targetBox.Object);

mockPlaneConverter.Setup(pc => pc.Convert(targetPlane.Object)).Returns(new SOG.Plane());
mockPointConverter.Setup(pc => pc.Convert(It.IsAny<RG.Point3d>())).Returns(new SOG.Point());
mockBoxConverter.Setup(bc => bc.Convert(targetBox.Object)).Returns(new SOG.Box());

var converter = new ArcToSpeckleConverter(
mockPointConverter.Object,
mockPlaneConverter.Object,
mockBoxConverter.Object,
mockContextStack.Object,
factory.Object
);

// Act
var result = converter.Convert(targetArc.Object);

// Assert
result.Should().NotBeNull();
}
}
Original file line number Diff line number Diff line change
@@ -1,29 +1,21 @@
using Moq;
using NUnit.Framework;
using NUnit.Framework;
using Rhino;
using Speckle.Converters.Common;
using Speckle.Converters.Common.Objects;
using Speckle.Converters.Rhino7.ToSpeckle.Raw;
using Speckle.Testing;

namespace Speckle.Converters.Rhino7.Tests;

public class EllipseToSpeckleConverterTests
public class EllipseToSpeckleConverterTests : MoqTest
{
private MockRepository _repository;

private Mock<IConversionContextStack<RhinoDoc, UnitSystem>> _conversionContextStack;

private Mock<ITypedConverter<RG.Plane, SOG.Plane>> _planeConverter;
private Mock<ITypedConverter<RG.Box, SOG.Box>> _boxConverter;

[SetUp]
public void Setup()
[Test]
public void Convert_Test()
{
_repository = new(MockBehavior.Strict);
_conversionContextStack = _repository.Create<IConversionContextStack<RhinoDoc, UnitSystem>>();
_planeConverter = _repository.Create<ITypedConverter<RG.Plane, SOG.Plane>>();
_boxConverter = _repository.Create<ITypedConverter<RG.Box, SOG.Box>>();
}
var conversionContextStack = Create<IConversionContextStack<RhinoDoc, UnitSystem>>();
var planeConverter = Create<ITypedConverter<RG.Plane, SOG.Plane>>();
var boxConverter = Create<ITypedConverter<RG.Box, SOG.Box>>();

[TearDown]
public void Verify() => _repository.VerifyAll();
var x = new EllipseToSpeckleConverter(planeConverter.Object, boxConverter.Object, conversionContextStack.Object);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
Expand All @@ -16,7 +16,8 @@
<Import Project="..\Speckle.Converters.RhinoShared\Speckle.Converters.RhinoShared.projitems" Label="Shared" />

<ItemGroup>
<ProjectReference Include="..\..\..\Sdk\Speckle.Converters.Common\Speckle.Converters.Common.csproj" />
<ProjectReference Include="..\..\..\Sdk\Speckle.Converters.Common\Speckle.Converters.Common.csproj" />
<ProjectReference Include="..\..\..\Sdk\Speckle.Testing\Speckle.Testing.csproj" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,21 @@ public class ArcToSpeckleConverter : ITypedConverter<RG.Arc, SOG.Arc>
private readonly ITypedConverter<RG.Plane, SOG.Plane> _planeConverter;
private readonly ITypedConverter<RG.Box, SOG.Box> _boxConverter;
private readonly IConversionContextStack<RhinoDoc, UnitSystem> _contextStack;
private readonly IBoxFactory _boxFactory;

public ArcToSpeckleConverter(
ITypedConverter<RG.Point3d, SOG.Point> pointConverter,
ITypedConverter<RG.Plane, SOG.Plane> planeConverter,
ITypedConverter<RG.Box, SOG.Box> boxConverter,
IConversionContextStack<RhinoDoc, UnitSystem> contextStack
IConversionContextStack<RhinoDoc, UnitSystem> contextStack,
IBoxFactory boxFactory
)
{
_pointConverter = pointConverter;
_planeConverter = planeConverter;
_boxConverter = boxConverter;
_contextStack = contextStack;
_boxFactory = boxFactory;
}

/// <summary>
Expand All @@ -47,6 +50,6 @@ public SOG.Arc Convert(RG.Arc target) =>
endPoint = _pointConverter.Convert(target.EndPoint),
domain = new SOP.Interval(0, 1),
length = target.Length,
bbox = _boxConverter.Convert(new RG.Box(target.BoundingBox()))
bbox = _boxConverter.Convert(_boxFactory.Create(target.BoundingBox()))
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using Speckle.InterfaceGenerator;

namespace Speckle.Converters.Rhino7.ToSpeckle.Raw;

[GenerateAutoInterface]
public class BoxFactory : IBoxFactory
{
public RG.Box Create(RG.BoundingBox bb) => new(bb);
}
18 changes: 18 additions & 0 deletions Sdk/Speckle.Testing/MoqTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using Moq;
using NUnit.Framework;

namespace Speckle.Testing;

public abstract class MoqTest
{
[SetUp]
public void Setup() => Repository = new(MockBehavior.Strict);

[TearDown]
public void Verify() => Repository.VerifyAll();

protected MockRepository Repository { get; private set; } = new(MockBehavior.Strict);

protected Mock<T> Create<T>()
where T : class => Repository.Create<T>();
}
10 changes: 10 additions & 0 deletions Sdk/Speckle.Testing/Speckle.Testing.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Moq" />
<PackageReference Include="NUnit" />
</ItemGroup>
</Project>
67 changes: 67 additions & 0 deletions Sdk/Speckle.Testing/packages.lock.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"version": 2,
"dependencies": {
"net8.0": {
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
"dependencies": {
"Microsoft.Build.Tasks.Git": "8.0.0",
"Microsoft.SourceLink.Common": "8.0.0"
}
},
"Moq": {
"type": "Direct",
"requested": "[4.20.70, )",
"resolved": "4.20.70",
"contentHash": "4rNnAwdpXJBuxqrOCzCyICXHSImOTRktCgCWXWykuF1qwoIsVvEnR7PjbMk/eLOxWvhmj5Kwt+kDV3RGUYcNwg==",
"dependencies": {
"Castle.Core": "5.1.1"
}
},
"NUnit": {
"type": "Direct",
"requested": "[4.1.0, )",
"resolved": "4.1.0",
"contentHash": "MT/DpAhjtiytzhTgTqIhBuWx4y26PKfDepYUHUM+5uv4TsryHC2jwFo5e6NhWkApCm/G6kZ80dRjdJFuAxq3rg=="
},
"PolySharp": {
"type": "Direct",
"requested": "[1.14.1, )",
"resolved": "1.14.1",
"contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ=="
},
"Speckle.InterfaceGenerator": {
"type": "Direct",
"requested": "[0.9.5, )",
"resolved": "0.9.5",
"contentHash": "oU/L7pN1R7q8KkbrpQ3WJnHirPHqn+9DEA7asOcUiggV5dzVg1A/VYs7GOSusD24njxXh03tE3a2oTLOjt3cVg=="
},
"Castle.Core": {
"type": "Transitive",
"resolved": "5.1.1",
"contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
"dependencies": {
"System.Diagnostics.EventLog": "6.0.0"
}
},
"Microsoft.Build.Tasks.Git": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
},
"System.Diagnostics.EventLog": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
}
}
}
}

0 comments on commit 23942b0

Please sign in to comment.