package com.adobe.acs.commons.wcm.impl;
import com.day.cq.commons.jcr.JcrConstants;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.assertEquals;
@RunWith(MockitoJUnitRunner.class)
public class CQIncludePropertyNamespaceServletTest {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testNamePropertyUpdater_PropertyNames() throws Exception {
final Map<String, Object> config = new HashMap<String, Object>();
config.put(CQIncludePropertyNamespaceServlet.PROP_NAMESPACEABLE_PROPERTY_NAMES,
new String[]{"fileName", "name", "noDotSlash"});
final CQIncludePropertyNamespaceServlet servlet = new CQIncludePropertyNamespaceServlet();
servlet.activate(config);
CQIncludePropertyNamespaceServlet.PropertyNamespaceUpdater visitor =
servlet.new PropertyNamespaceUpdater("test");
final JSONObject json = new JSONObject();
json.put(JcrConstants.JCR_PRIMARYTYPE, "cq:Widget");
json.put("name", "./myValue");
json.put("fileName", "./myFile");
json.put("jcr:description", "words");
json.put("noDotSlash", "no dot slash");
visitor.accept(json);
assertEquals("./test/myValue", json.get("name"));
assertEquals("./test/myFile", json.get("fileName"));
assertEquals("words", json.get("jcr:description"));
assertEquals("test/no dot slash", json.get("noDotSlash"));
}
@Test
public void testNamePropertyUpdater_PropertyValuePatterns() throws Exception {
final Map<String, Object> config = new HashMap<String, Object>();
config.put(CQIncludePropertyNamespaceServlet.PROP_NAMESPACEABLE_PROPERTY_VALUE_PATTERNS,
new String[]{"^\\./.*"});
final CQIncludePropertyNamespaceServlet servlet = new CQIncludePropertyNamespaceServlet();
servlet.activate(config);
CQIncludePropertyNamespaceServlet.PropertyNamespaceUpdater visitor =
servlet.new PropertyNamespaceUpdater("test");
final JSONObject json = new JSONObject();
json.put(JcrConstants.JCR_PRIMARYTYPE, "cq:Widget");
json.put("name", "./myValue");
json.put("fileName", "./image/myFile");
json.put("jcr:description", "words");
json.put("noDotSlash", "no dot slash");
visitor.accept(json);
assertEquals("./test/myValue", json.get("name"));
assertEquals("./test/image/myFile", json.get("fileName"));
assertEquals("words", json.get("jcr:description"));
assertEquals("no dot slash", json.get("noDotSlash"));
}
@Test
public void testNamePropertyUpdater_MultiLevel() throws Exception {
final Map<String, Object> config = new HashMap<String, Object>();
config.put(CQIncludePropertyNamespaceServlet.PROP_NAMESPACEABLE_PROPERTY_VALUE_PATTERNS,
new String[]{"^\\./.*"});
config.put("namespace.multi-level", true);
final CQIncludePropertyNamespaceServlet servlet = new CQIncludePropertyNamespaceServlet();
servlet.activate(config);
CQIncludePropertyNamespaceServlet.PropertyNamespaceUpdater visitor =
servlet.new PropertyNamespaceUpdater("test");
final JSONObject json = new JSONObject();
json.put(JcrConstants.JCR_PRIMARYTYPE, "cq:Widget");
json.put("xtype", "cqinclude");
json.put("path", "/apps/test.cqinclude.namespace.level-1.json");
visitor.accept(json);
assertEquals("/apps/test.cqinclude.namespace.test%252Flevel-1.json", json.get("path"));
}
@Test
public void testIsCqincludeNamspaceWidget() throws JSONException {
CQIncludePropertyNamespaceServlet.PropertyNamespaceUpdater pnu = new CQIncludePropertyNamespaceServlet().new PropertyNamespaceUpdater("my-namespace");
final JSONObject json = new JSONObject();
json.put(JcrConstants.JCR_PRIMARYTYPE, "cq:Widget");
json.put("xtype", "cqinclude");
json.put("path", "/apps/test.cqinclude.namespace.test.json");
assertEquals(true, pnu.isCqincludeNamespaceWidget(json));
}
@Test
public void testMakeMultiLevel() throws JSONException {
CQIncludePropertyNamespaceServlet.PropertyNamespaceUpdater pnu = new CQIncludePropertyNamespaceServlet().new PropertyNamespaceUpdater("my-namespace");
final JSONObject json = new JSONObject();
json.put(JcrConstants.JCR_PRIMARYTYPE, "cq:Widget");
json.put("xtype", "cqinclude");
json.put("path", "/apps/test.cqinclude.namespace.test.json");
JSONObject actual = pnu.makeMultiLevel(json);
assertEquals("/apps/test.cqinclude.namespace.my-namespace%252Ftest.json", actual.getString("path"));
}
}