public void SortingLine_without_parts_should_not_be_valid() { var package = new Package { Length = 5, Width = 5 }; _sortingLine = GetSortingLine(); var sortingLineResult = _service.CanPackagePassThrough(package, _sortingLine); sortingLineResult.ShouldNotBeValid(); sortingLineResult.ShouldBreakRule <SortingLineInvalidBusinessRule>(); }
public void Package_should_not_fit_through_invalid_width_sorting_line(int sortingLineWidth) { var package = new Package { Length = 10, Width = 10 }; _sortingLine = GetSortingLine(sortingLineWidth); var sortingLineResult = _service.CanPackagePassThrough(package, _sortingLine); sortingLineResult.ShouldNotBeValid(); sortingLineResult.ShouldBreakRule <SortingLineInvalidBusinessRule>(); }
private static PackageSortingLine GetSortingLine(params int[] sortingLineWidths) { var sortingLine = new PackageSortingLine(); foreach (var sortingLineWidth in sortingLineWidths) { sortingLine.Segments.Add(new PackageSortingLineSegment { Width = sortingLineWidth }); } return(sortingLine); }
public PackageSortingLineResult CanPackagePassThrough(Package package, PackageSortingLine sortingLine) { var result = new PackageSortingLineResult(); ValidatePackage(package, result); ValidateSortingLine(sortingLine, result); if (!result.Success) { return(result); } PackageSortingLineSegment currentSegment = null; foreach (var segment in sortingLine.Segments) { bool canPackageFit = CanPackageFit(package, currentSegment, segment); if (!canPackageFit) { var rotatedPackage = RotatePackage(package, currentSegment); if (rotatedPackage != null) { package = rotatedPackage; canPackageFit = CanPackageFit(package, currentSegment, segment); } } if (!canPackageFit) { var message = $"width {(currentSegment == null ? "" : $"{currentSegment.Width} and")} {segment.Width}"; result.AddBrokenRule(new PackageCannotFitThroughSortingLineBusinessRule(message)); break; } currentSegment = segment; }
public void Setup() { _service = new PackageSortingLineService(); _sortingLine = GetSortingLine(10, 10); }