How to mock context configuration class | Community
Skip to main content
TarunKumar
Community Advisor
Community Advisor
May 5, 2023
Solved

How to mock context configuration class

  • May 5, 2023
  • 2 replies
  • 2380 views

HI,

I am trying to write Junit for a java class which has context aware configuration code something like below:
Main class logic:

ConfigurationBuilder configBuilder =resource.adaptTo(ConfigurationBuilder.class); SimpleConfig simpleConfig = configBuilder.name("feature").as(SimpleConfig.class);

 

but smipleConfig value is showing as "null" when I debug it in Junit.

Junit class logic, what I am trying to do:

package org.apache.sling.testing.mock.caconfig; import static org.apache.sling.testing.mock.caconfig.ContextPlugins.CACONFIG; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ValueMap; import org.apache.sling.caconfig.ConfigurationBuilder; import org.apache.sling.testing.mock.caconfig.example.SimpleConfig; import org.apache.sling.testing.mock.sling.junit.SlingContext; import org.apache.sling.testing.mock.sling.junit.SlingContextBuilder; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @SuppressWarnings("null") public class ContextPluginsTest { private static final String CONFIG_NAME = "testConfig"; @Rule public SlingContext context = new SlingContextBuilder() .plugin(CACONFIG) .build(); private Resource contextResource; @Before public void setUp() { context.create().resource("/content/site1", "sling:configRef", "/conf/site1"); contextResource = context.create().resource("/content/site1/page1"); // register configuration annotation class MockContextAwareConfig.registerAnnotationClasses(context, SimpleConfig.class); // write config MockContextAwareConfig.writeConfiguration(context, contextResource.getPath(), SimpleConfig.class, "stringParam", "value1", "intParam", 123, "boolParam", true); } }



This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by rawvarun

There are three things in your case:

1. Provide current resource.   Missing in your code

context.currentResource

2. Provide a resource for config.       

context.create().resource

3. Config values

MockContextAwareConfig.writeConfiguration

 

2 replies

Ravi_Pampana
Community Advisor
Community Advisor
May 5, 2023

Hi,

We are able to mock CA Config like below

 

import static io.wcm.testing.mock.wcmio.caconfig.ContextPlugins.WCMIO_CACONFIG;

import static org.apache.sling.testing.mock.caconfig.ContextPlugins.CACONFIG;

import org.apache.sling.testing.mock.caconfig.MockContextAwareConfig;

private AemContext aemContext = new AemContextBuilder().plugin(CACONFIG).plugin(WCMIO_CACONFIG)

            .resourceResolverType(ResourceResolverType.JCR_MOCK).build();

 

in setup method:

aemContext.create().resource("/content/<your-project>/<locale>", "sling:configRef", "/conf/<your-project>");

 

Add all your properties here. LocaleConfig is the java class which reads CA config in backend 

 

MockContextAwareConfig.writeConfiguration(aemContext,
"/content/<your-project>/<locale>", LocaleConfig.class, "currencySymbol", "$");

 

Hope this helps!

rawvarun
Community Advisor
rawvarunCommunity AdvisorAccepted solution
Community Advisor
May 5, 2023

There are three things in your case:

1. Provide current resource.   Missing in your code

context.currentResource

2. Provide a resource for config.       

context.create().resource

3. Config values

MockContextAwareConfig.writeConfiguration