public void ensureApplyAllRestrictionsReturnsNullIfProductDoesNotObeyRestrictions() { ProductCategory cat = new ProductCategory("All Products"); Color black = Color.valueOf("Deep Black", 0, 0, 0, 0); Color white = Color.valueOf("Blinding White", 255, 255, 255, 0); List <Color> colors = new List <Color>() { black, white }; Finish glossy = Finish.valueOf("Glossy", 100); Finish matte = Finish.valueOf("Matte", 0); List <Finish> finishes = new List <Finish>() { glossy, matte }; Material material = new Material("#001", "Really Expensive Wood", "ola.jpg", colors, finishes); Material material2 = new Material("#002", "Expensive Wood", "ola.jpg", colors, finishes); Dimension heightDimension = new SingleValueDimension(50); Dimension widthDimension = new DiscreteDimensionInterval(new List <double>() { 60, 65, 70, 80, 90, 105 }); Dimension depthDimension = new ContinuousDimensionInterval(10, 25, 5); Measurement measurement = new Measurement(heightDimension, widthDimension, depthDimension); Product product = new Product("Test", "Shelf", "shelf.glb", cat, new List <Material>() { material, material2 }, new List <Measurement>() { measurement }, ProductSlotWidths.valueOf(4, 4, 4)); Product product2 = new Product("Test", "Shelf", "shelf.glb", cat, new List <Material>() { material }, new List <Measurement>() { measurement }, ProductSlotWidths.valueOf(4, 4, 4)); CustomizedDimensions customDimension = CustomizedDimensions.valueOf(50, 80, 25); CustomizedMaterial customMaterial = CustomizedMaterial.valueOf(material2, white, matte); CustomizedProduct customizedProduct = CustomizedProductBuilder.createCustomizedProduct("reference", product, customDimension).build(); customizedProduct.changeCustomizedMaterial(customMaterial); customizedProduct.finalizeCustomization(); RestrictableImpl instance = new RestrictableImpl(); instance.addRestriction(new Restriction("same material", new SameMaterialAndFinishAlgorithm())); Assert.Null(instance.applyAllRestrictions(customizedProduct, product2)); }
private CustomizedProduct buildUnfinishedCustomizedProductInstance() { string reference = "123"; CustomizedMaterial customizedMaterial = buildCustomizedMaterial(); CustomizedDimensions selectedDimensions = buildCustomizedDimensions(); CustomizedProduct customizedProduct = CustomizedProductBuilder.createCustomizedProduct(reference, buildValidProduct(), selectedDimensions).build(); customizedProduct.changeCustomizedMaterial(customizedMaterial); return(customizedProduct); }
public void ensureApplyAllRestrictionsReturnsRestrictedProduct() { ProductCategory cat = new ProductCategory("All Products"); Color black = Color.valueOf("Deep Black", 0, 0, 0, 0); Color white = Color.valueOf("Blinding White", 255, 255, 255, 0); List <Color> colors = new List <Color>() { black, white }; Finish glossy = Finish.valueOf("Glossy", 100); Finish matte = Finish.valueOf("Matte", 0); List <Finish> finishes = new List <Finish>() { glossy, matte }; Material material = new Material("#001", "Really Expensive Wood", "ola.jpg", colors, finishes); Material material2 = new Material("#002", "Expensive Wood", "ola.jpg", colors, finishes); Dimension heightDimension = new SingleValueDimension(50); Dimension widthDimension = new DiscreteDimensionInterval(new List <double>() { 60, 65, 70, 80, 90, 105 }); Dimension depthDimension = new ContinuousDimensionInterval(10, 25, 5); Measurement measurement = new Measurement(heightDimension, widthDimension, depthDimension); Product product = new Product("Test", "Shelf", "shelf.glb", cat, new List <Material>() { material, material2 }, new List <Measurement>() { measurement }, ProductSlotWidths.valueOf(4, 4, 4)); Product product2 = new Product("Test", "Shelf", "shelf.glb", cat, new List <Material>() { material, material2 }, new List <Measurement>() { measurement }, ProductSlotWidths.valueOf(4, 4, 4)); CustomizedDimensions customDimension = CustomizedDimensions.valueOf(50, 80, 25); CustomizedMaterial customMaterial = CustomizedMaterial.valueOf(material, white, matte); CustomizedProduct customizedProduct = CustomizedProductBuilder.createCustomizedProduct("reference", product, customDimension).build(); customizedProduct.changeCustomizedMaterial(customMaterial); customizedProduct.finalizeCustomization(); RestrictableImpl instance = new RestrictableImpl(); instance.addRestriction(new Restriction("same material", new SameMaterialAndFinishAlgorithm())); WidthPercentageAlgorithm algorithm = new WidthPercentageAlgorithm(); Input minInput = Input.valueOf("Minimum Percentage", "From 0 to 1"); Input maxInput = Input.valueOf("Maximum Percentage", "From 0 to 1"); Dictionary <Input, string> inputs = new Dictionary <Input, string>(); inputs.Add(minInput, "0.8"); inputs.Add(maxInput, "1.0"); algorithm.setInputValues(inputs); instance.addRestriction(new Restriction("width percentage", algorithm)); Product returned = instance.applyAllRestrictions(customizedProduct, product2); Assert.True(returned.productMaterials.Count == 1); Assert.True(returned.productMaterials[0].material.Equals(material)); Assert.True(returned.productMeasurements[0].measurement.width.getMinValue() == 65); Assert.True(returned.productMeasurements[0].measurement.width.getMaxValue() == 80); }
/// <summary> /// Updates an instance of CustomizedProduct with the data provided in the given UpdateCustomizedProductModelView. /// </summary> /// <param name="updateCustomizedProductModelView">Instance of UpdateCustomizedProductModelView containing updated CustomizedProduct information.</param> /// <returns>An instance of GetCustomizedProductModelView with the updated CustomizedProduct information.</returns> /// <exception cref="ResourceNotFoundException">Thrown when the CustomizedProduct could not be found.</exception> /// <exception cref="System.ArgumentException">Thrown when none of the CustomizedProduct's properties are updated.</exception> public GetCustomizedProductModelView updateCustomizedProduct(UpdateCustomizedProductModelView updateCustomizedProductModelView) { CustomizedProductRepository customizedProductRepository = PersistenceContext.repositories().createCustomizedProductRepository(); CustomizedProduct customizedProduct = customizedProductRepository.find(updateCustomizedProductModelView.customizedProductId); if (customizedProduct == null) { throw new ResourceNotFoundException(string.Format(ERROR_UNABLE_TO_FIND_CUSTOMIZED_PRODUCT_BY_ID, updateCustomizedProductModelView.customizedProductId)); } checkUserToken(customizedProduct, updateCustomizedProductModelView.userAuthToken); bool performedAtLeastOneUpdate = false; if (updateCustomizedProductModelView.reference != null) { customizedProduct.changeReference(updateCustomizedProductModelView.reference); performedAtLeastOneUpdate = true; } if (updateCustomizedProductModelView.designation != null) { customizedProduct.changeDesignation(updateCustomizedProductModelView.designation); performedAtLeastOneUpdate = true; } if (updateCustomizedProductModelView.customizedMaterial != null) { //TODO: check if only the finish or the color are being updated CustomizedMaterial customizedMaterial = CreateCustomizedMaterialService.create(updateCustomizedProductModelView.customizedMaterial); customizedProduct.changeCustomizedMaterial(customizedMaterial); performedAtLeastOneUpdate = true; } if (updateCustomizedProductModelView.customizedDimensions != null) { customizedProduct.changeDimensions(CustomizedDimensionsModelViewService.fromModelView(updateCustomizedProductModelView.customizedDimensions)); performedAtLeastOneUpdate = true; } if (updateCustomizedProductModelView.customizationStatus == CustomizationStatus.FINISHED) { customizedProduct.finalizeCustomization(); performedAtLeastOneUpdate = true; } if (!performedAtLeastOneUpdate) { throw new ArgumentException(ERROR_NO_UPDATE_PERFORMED); } customizedProduct = customizedProductRepository.update(customizedProduct); if (customizedProduct == null) { throw new ArgumentException(ERROR_UNABLE_TO_SAVE_CUSTOMIZED_PRODUCT); } return(CustomizedProductModelViewService.fromEntity(customizedProduct)); }