This conversation has been locked due to inactivity. Please create a new post.
This conversation has been locked due to inactivity. Please create a new post.
Hi All,
I coudln't able to adapt the resource to my Sling Model class,
getting the error
Could not yet find an adapter factory for the model class my_class from adaptable class org.apache.sling.testing.resourceresolver.MockResource.
Attaching the Sling models and junit files here.
Model Interface
package com.mycore.core.models;
import org.apache.commons.lang.StringUtils;
public interface ConfiguratorPromptModel {
default String getNameplateId() {
return StringUtils.EMPTY;
}
}
Model Implementation
package com.mycore.core.internal.models.v1;
import com.mycore.core.models.ConfiguratorPromptModel;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.injectorspecific.InjectionStrategy;
import org.apache.sling.models.annotations.injectorspecific.ValueMapValue;
@Model(adaptables = Resource.class, adapters = {ConfiguratorPromptModel.class})
public class ConfiguratorPromptModelImpl implements ConfiguratorPromptModel {
public String getNameplateId() {
return nameplateId;
}
@ValueMapValue(injectionStrategy = InjectionStrategy.OPTIONAL)
private String nameplateId;
}
Test Case
package com.mycore.core.internal.models.v1;
import com.mycore.core.models.ConfiguratorPromptModel;
import io.wcm.testing.mock.aem.junit5.AemContext;
import io.wcm.testing.mock.aem.junit5.AemContextExtension;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.models.factory.ModelFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import static org.junit.jupiter.api.Assertions.assertEquals;
@ExtendWith(AemContextExtension.class)
class ConfiguratorPromptModelImplTest {
private ConfiguratorPromptModel configuratorPromptModel;
@BeforeEach
public void setUp(AemContext context) throws Exception {
context.load().json("/content/configuratorprompt/configuratorprompt.json", "/content/configuratorprompt.html");
Resource resource = context.resourceResolver().getResource("/content/configuratorprompt.html");
this.configuratorPromptModel = context.getService(ModelFactory.class).createModel(resource, ConfiguratorPromptModelImpl.class);
}
void getNameplateId() {
assertEquals("nameplate", configuratorPromptModel.getNameplateId());
}
}
Thanks,
Gokulraj
Solved! Go to Solution.
Views
Replies
Total Likes
Hi @rsGokulraj4 ,
{
"jcr:primaryType": "cq:Page",
"jcr:content": {
"jcr:primaryType": "cq:PageContent",
"jcr:title": "en",
"cq:template": "/conf/we-retail/settings/wcm/templates/homepage",
"cq:contextHubSegmentsPath": "/etc/segmentation/contexthub",
"jcr:isCheckedOut": true,
"pageTitle": "Test page",
"jcr:uuid": "d2d32722-0ce4-4663-8873-1b11a8e34ceb",
"sling:resourceType": "we-retail/components/page",
"cq:contextHubPath": "/etc/cloudsettings/default/contexthub",
"root": {
"jcr:primaryType": "nt:unstructured",
"layout": "responsiveGrid",
"sling:resourceType": "we-retail/components/container",
"container": {
"jcr:primaryType": "nt:unstructured",
"sling:resourceType": "we-retail/components/container",
"container": {
"jcr:primaryType": "nt:unstructured",
"layout": "responsiveGrid",
"sling:resourceType": "we-retail/components/container",
"banner": {
"jcr:primaryType": "nt:unstructured",
"id": "1234",
"type": "callbutton",
"bannerText":"Banner Text",
"sling:resourceType": "we-retail/components/banner",
"cq:styleIds": [
"1654672680483",
"1654672784107"
]
}
}
}
}
}
}
Is this working now?
Thanks
Hi @rsGokulraj4 ,
PFB example
@ExtendWith(AemContextExtension.class)
public class BannerTest {
/** The Constant RESOURCE_CONTENT. */
private static final String RESOURCE_CONTENT = "/core/models/banner/banner.json";
/** The Constant TEST_CONTENT_ROOT. */
private static final String TEST_CONTENT_ROOT = "/content/we-retail/us/en";
/** The Constant RESOURCE. */
private static final String RESOURCE = TEST_CONTENT_ROOT + "/jcr:content/root/container/container/banner";
/** The model. */
private Banner model;
/** The resource. */
private Resource resource;
/**
* Sets the up.
*
* @param aemContext the new up
*/
@BeforeEach
public void setup(AemContext aemContext) {
Class<Banner> modelClass = Banner.class;
aemContext.load().json(RESOURCE_CONTENT, TEST_CONTENT_ROOT);
aemContext.addModelsForClasses(modelClass);
resource = aemContext.currentResource(RESOURCE);
model = resource.adaptTo(modelClass);
}
/**
* Simple load and getter test.
*/
@Test
public void simpleLoadAndGetterTest() {
assertEquals("1234", model.getId());
assertEquals("Banner Text", model.getBannerText());
}
}
Hope this helps
Thanks
Hi @Bimmi_Soi
Thanks for the suggestion,
I tried the approach you have shared, but still getting the null exception on line.
model = resource.adaptTo(modelClass);
Check if you are using these imports and share the json file
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.apache.sling.api.resource.Resource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import io.wcm.testing.mock.aem.junit5.AemContext;
import io.wcm.testing.mock.aem.junit5.AemContextExtension;
Hi @rsGokulraj4 ,
{
"jcr:primaryType": "cq:Page",
"jcr:content": {
"jcr:primaryType": "cq:PageContent",
"jcr:title": "en",
"cq:template": "/conf/we-retail/settings/wcm/templates/homepage",
"cq:contextHubSegmentsPath": "/etc/segmentation/contexthub",
"jcr:isCheckedOut": true,
"pageTitle": "Test page",
"jcr:uuid": "d2d32722-0ce4-4663-8873-1b11a8e34ceb",
"sling:resourceType": "we-retail/components/page",
"cq:contextHubPath": "/etc/cloudsettings/default/contexthub",
"root": {
"jcr:primaryType": "nt:unstructured",
"layout": "responsiveGrid",
"sling:resourceType": "we-retail/components/container",
"container": {
"jcr:primaryType": "nt:unstructured",
"sling:resourceType": "we-retail/components/container",
"container": {
"jcr:primaryType": "nt:unstructured",
"layout": "responsiveGrid",
"sling:resourceType": "we-retail/components/container",
"banner": {
"jcr:primaryType": "nt:unstructured",
"id": "1234",
"type": "callbutton",
"bannerText":"Banner Text",
"sling:resourceType": "we-retail/components/banner",
"cq:styleIds": [
"1654672680483",
"1654672784107"
]
}
}
}
}
}
}
Is this working now?
Thanks
Views
Likes
Replies