public void ShouldThrowExceptionIfNoParcelTypeWouldFit() { var input = new ParcelInput(10, 0, 0, 0); var types = new[] { new ParcelSpecification("Small", 1, 0, 1, 0) }; Assert.Throws <NoSuitableParcelTypeException>(() => new ParcelPicker(types).Pick(input)); }
public void ShouldPickCorrectSizeParcel(int x, int y, int z, int weight, string expectedType) { var input = new ParcelInput(x, y, z, weight); var parcelType = new ParcelPicker(ParcelTestData.ParcelTypes).Pick(input); Assert.Equal(expectedType, parcelType.Name); }
public void ParcelTypesShouldBeOrderedByPrice() { var input = new ParcelInput(5, 0, 0, 0); var types = new[] { new ParcelSpecification("Small $2", 10, 0, 2, 0), new ParcelSpecification("Small $1", 10, 0, 1, 0) }; var parcelType = new ParcelPicker(types).Pick(input); Assert.Equal("Small $1", parcelType.Name); }
public static decimal CalculatePrice(this ParcelSpecification spec, ParcelInput input) { var basePrice = spec.Price; var weightSurcharge = 0; if (input.Weight > spec.MaxWeight) { weightSurcharge = (input.Weight - spec.MaxWeight) * spec.WeightSurcharge; } return(basePrice + weightSurcharge); }
public static bool WouldFit(this ParcelSpecification parcelType, ParcelInput input) { if (input.X >= parcelType.MaxDimension) { return(false); } if (input.Y >= parcelType.MaxDimension) { return(false); } if (input.Z >= parcelType.MaxDimension) { return(false); } return(true); }