Hi @djohn98390536,
if you are interesting in the AEM Unit test, you can use my code below. However, I would suggest you to refactor your piece of code firstly, because it could lead to NullPointerException.
Refactored code (ResourceResolver#getResource, Resource#adaptTo can return null):
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import java.util.Optional;
public class Foo {
public void barNew(Resource assetResource, String newversion, String path) {
ResourceResolver resourceResolver = assetResource.getResourceResolver();
ValueMap vm = assetResource.getValueMap();
String version = vm.get("jcr:lastModifiedVersion", String.class);
boolean isNewAsset = vm.containsKey("newAsset");
String newVersion = isNewAsset ? version + 2 : version + 1;
Optional.ofNullable(resourceResolver.getResource(path))
.map(resource -> resource.adaptTo(ModifiableValueMap.class))
.ifPresent(mvm -> mvm.put(newversion, newVersion));
}
}AEM Unit test:
import com.day.cq.dam.api.Asset;
import io.wcm.testing.mock.aem.junit5.AemContext;
import io.wcm.testing.mock.aem.junit5.AemContextExtension;
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import java.io.ByteArrayInputStream;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
@ExtendWith(AemContextExtension.class)
class FooTest {
private AemContext aemContext = new AemContext();
private Foo foo;
private Resource assetResource;
@BeforeEach
void setUp() {
foo = new Foo();
Asset asset = aemContext.create().asset("/conten/dam/foo.json", new ByteArrayInputStream("{}".getBytes()), "application/json");
assetResource = asset.adaptTo(Resource.class);
}
@Test
void testBar_notNewAsset() {
ModifiableValueMap modifiableValueMap = assetResource.adaptTo(ModifiableValueMap.class);
modifiableValueMap.put("jcr:lastModifiedVersion", "123");
String path = "/conten/dam/foo.json";
foo.barNew(assetResource, "new-version-property", path);
ValueMap valueMap = aemContext.resourceResolver().getResource(path).getValueMap();
assertEquals("1231", valueMap.get("new-version-property"));
}
@Test
void testBar_newAsset() {
ModifiableValueMap modifiableValueMap = assetResource.adaptTo(ModifiableValueMap.class);
modifiableValueMap.put("jcr:lastModifiedVersion", "123");
modifiableValueMap.put("newAsset", true);
String path = "/conten/dam/foo.json";
foo.barNew(assetResource, "new-version-property", path);
ValueMap valueMap = aemContext.resourceResolver().getResource(path).getValueMap();
assertEquals("1232", valueMap.get("new-version-property"));
}
@Test
void testBar_setToNotExistingPath() {
ModifiableValueMap modifiableValueMap = assetResource.adaptTo(ModifiableValueMap.class);
modifiableValueMap.put("jcr:lastModifiedVersion", "123");
modifiableValueMap.put("newAsset", true);
String path = "/conten/dam/not-existing-path.json";
foo.barNew(assetResource, "new-version-property", path);
assertNull(aemContext.resourceResolver().getResource(path));
}
@Test
void testBar_setToExistingPath() {
ModifiableValueMap modifiableValueMap = assetResource.adaptTo(ModifiableValueMap.class);
modifiableValueMap.put("jcr:lastModifiedVersion", "123");
modifiableValueMap.put("newAsset", true);
String path = "/conten/dam/not-existing-path.json";
aemContext.create().resource(path);
foo.barNew(assetResource, "new-version-property", path);
ValueMap valueMap = aemContext.resourceResolver().getResource(path).getValueMap();
assertEquals("1232", valueMap.get("new-version-property"));
}
} If tests are failing, please add the following Maven dependency:
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.11.0</version>
<scope>test</scope>
</dependency>