/** * Updates an existing storage attributes by storage name. * <p> * This endpoint replaces the entire list of attributes on the Storage with the contents of the request. Observe this example: * <ol> * <li>Three attributes present on the Storage.</li> * <li>This endpoint is called with a single attribute in the request with an updated value.</li> * <li>After this operation the Storage will have only one attribute – which is probably not the desired outcome.</li> * <li>Instead, supply all existing attributes and provide updated values and additional attributes as needed. * The only case when an existing attribute should be left out is to remove the attribute.</li> * </ol> * </p> * * @param storageName the name of the storage * @param storageAttributesUpdateRequest the information needed to update storage attributes * * @return the updated storage information */ @RequestMapping(value = "/storageAttributes/storages/{storageName}", method = RequestMethod.PUT, consumes = {"application/xml", "application/json"}) @Secured(SecurityFunctions.FN_STORAGE_ATTRIBUTES_PUT) Storage updateStorageAttributes(@PathVariable("storageName") String storageName, @RequestBody StorageAttributesUpdateRequest storageAttributesUpdateRequest) { return storageService.updateStorageAttributes(new StorageKey(storageName), storageAttributesUpdateRequest); } }
/** * Updates an existing storage attributes by storage name. * <p> * This endpoint replaces the entire list of attributes on the Storage with the contents of the request. Observe this example: * <ol> * <li>Three attributes present on the Storage.</li> * <li>This endpoint is called with a single attribute in the request with an updated value.</li> * <li>After this operation the Storage will have only one attribute – which is probably not the desired outcome.</li> * <li>Instead, supply all existing attributes and provide updated values and additional attributes as needed. * The only case when an existing attribute should be left out is to remove the attribute.</li> * </ol> * </p> * * @param storageName the name of the storage * @param storageAttributesUpdateRequest the information needed to update storage attributes * * @return the updated storage information */ @RequestMapping(value = "/storageAttributes/storages/{storageName}", method = RequestMethod.PUT, consumes = {"application/xml", "application/json"}) @Secured(SecurityFunctions.FN_STORAGE_ATTRIBUTES_PUT) Storage updateStorageAttributes(@PathVariable("storageName") String storageName, @RequestBody StorageAttributesUpdateRequest storageAttributesUpdateRequest) { return storageService.updateStorageAttributes(new StorageKey(storageName), storageAttributesUpdateRequest); } }
@Test public void testUpdateStorageAttributes() { // Create a storage key. StorageKey storageKey = new StorageKey(STORAGE_NAME); // Create a storage update request. StorageAttributesUpdateRequest storageAttributesUpdateRequest = new StorageAttributesUpdateRequest(businessObjectDefinitionServiceTestHelper.getNewAttributes()); // Create a storage. Storage storage = new Storage(STORAGE_NAME, STORAGE_PLATFORM_CODE, businessObjectDefinitionServiceTestHelper.getNewAttributes()); // Mock the external calls. when(storageService.updateStorageAttributes(storageKey, storageAttributesUpdateRequest)).thenReturn(storage); // Call the method under test. Storage result = storageRestController.updateStorageAttributes(STORAGE_NAME, storageAttributesUpdateRequest); // Verify the external calls. verify(storageService).updateStorageAttributes(storageKey, storageAttributesUpdateRequest); verifyNoMoreInteractions(storageService); // Validate the returned object. assertEquals(storage, result); } }
@Test public void testUpdateStorageAttributesStorageNoExists() { // Try to update attributes for a storage that doesn't yet exist. try { storageService.updateStorageAttributes(new StorageKey(INVALID_VALUE), new StorageAttributesUpdateRequest(businessObjectDefinitionServiceTestHelper.getNewAttributes())); fail(); } catch (ObjectNotFoundException e) { assertEquals(String.format("Storage with name \"%s\" doesn't exist.", INVALID_VALUE), e.getMessage()); } }
@Test public void testUpdateStorageAttributesStorageHasDuplicateAttributes() { // Create and persist a valid storage. StorageCreateRequest request = getNewStorageCreateRequest(); Storage storage = storageService.createStorage(request); // Add a duplicate attribute to the storage. StorageEntity storageEntity = storageDao.getStorageByName(storage.getName()); StorageAttributeEntity storageAttributeEntity = new StorageAttributeEntity(); storageAttributeEntity.setStorage(storageEntity); storageAttributeEntity.setName(request.getAttributes().get(0).getName().toUpperCase()); storageEntity.getAttributes().add(storageAttributeEntity); storageDao.saveAndRefresh(storageEntity); // Try to update attributes for the storage. try { storageService.updateStorageAttributes(new StorageKey(storage.getName()), new StorageAttributesUpdateRequest(businessObjectDefinitionServiceTestHelper.getNewAttributes2())); } catch (IllegalStateException e) { assertEquals(String.format("Found duplicate attribute with name \"%s\" for \"%s\" storage.", request.getAttributes().get(0).getName().toLowerCase(), storage.getName()), e.getMessage()); } }
@Test public void testUpdateStorageAttributesRemoveAllAttributes() { // Create and persist a valid storage. StorageCreateRequest request = getNewStorageCreateRequest(); Storage storage = storageService.createStorage(request); // Update attributes for the storage. Storage result = storageService.updateStorageAttributes(new StorageKey(storage.getName()), new StorageAttributesUpdateRequest(NO_ATTRIBUTES)); // Validate the results. assertEquals(new Storage(storage.getName(), storage.getStoragePlatformName(), NO_ATTRIBUTES), result); }
@Test public void testUpdateStorageAttributes() { // Create and persist a valid storage. StorageCreateRequest request = getNewStorageCreateRequest(); Storage storage = storageService.createStorage(request); // Update attributes for the storage. Storage result = storageService.updateStorageAttributes(new StorageKey(storage.getName()), new StorageAttributesUpdateRequest(businessObjectDefinitionServiceTestHelper.getNewAttributes2())); // Validate the results. assertEquals(new Storage(storage.getName(), storage.getStoragePlatformName(), businessObjectDefinitionServiceTestHelper.getNewAttributes2()), result); }