예제 #1
0
        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>();
        }
예제 #2
0
        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>();
        }
예제 #3
0
        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;
            }
예제 #5
0
 public void Setup()
 {
     _service     = new PackageSortingLineService();
     _sortingLine = GetSortingLine(10, 10);
 }