You can import nodes using the ImporterUtils from the brut-common
module.
import java.net.URL; import org.bloomreach.forge.brut.common.repository.utils.ImporterUtils; URL resource = getClass().getResource("/news.yaml"); ImporterUtils.importYaml(resource, rootNode, "/content/documents/mychannel", "hippostd:folder");
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd"> <bean id="contributedCndResourcesPatterns" class="java.util.ArrayList"> <constructor-arg> <list> <value>classpath*:org/example/namespaces/**/*.cnd</value> </list> </constructor-arg> </bean> <bean id="contributedYamlResourcesPatterns" class="java.util.ArrayList"> <constructor-arg> <list> <value>classpath*:org/packagename/imports/**/*.yaml</value> </list> </constructor-arg> </bean> </beans>
package org.example; import java.util.Arrays; import java.util.List; import javax.jcr.Node; import javax.jcr.Repository; import javax.jcr.Session; import javax.jcr.SimpleCredentials; import jakarta.ws.rs.HttpMethod; import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.MediaType; import org.example.model.ListItemPagination; import org.example.model.NewsItemRep; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import com.bloomreach.ps.brut.resources.AbstractJaxrsTest; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import static org.junit.jupiter.api.Assertions.assertEquals; /** * A user (client) of the testing library providing his/her own config/content */ @TestInstance(TestInstance.Lifecycle.PER_CLASS) public class JaxrsTest extends AbstractJaxrsTest { @BeforeAll public void init() { super.init(); } @BeforeEach public void beforeEach() { setupForNewRequest(); } private void setupForNewRequest() { setupHstRequest(); getHstRequest().setHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); getHstRequest().setMethod(HttpMethod.GET); setupServletContext(); unregisterHstModel(); registerHstModel(); setupHstResponse(); } @Override protected String getAnnotatedHstBeansClasses() { return "classpath*:org/example/model/*.class,"; } @Override protected List<String> contributeSpringConfigurationLocations() { return Arrays.asList("/org/example/custom-jaxrs.xml", "/org/example/rest-resources.xml"); } @Override protected List<String> contributeAddonModulePaths() { return null; } @Override protected String contributeHstConfigurationRootPath() { return "/hst:myproject"; } @Test @DisplayName("Test invoking the user endpoint") public void testUserEndpoint() { String user = "baris"; getHstRequest().setRequestURI("/site/api/hello/" + user); String response = invokeFilter(); assertEquals("Hello, World! " + user, response); } @Test @DisplayName("Test HST config changes are not visible if HST model is not reloaded after a node update via JCR API") public void testMountParamsUpdated() throws Exception { String key = "paramName"; String value = "paramValue"; getHstRequest().setRequestURI("/site/api/hello/mount/" + key); String response = invokeFilter(); setParamsOnMount(new String[]{key}, new String[]{value}); assertEquals("", response, "Expected nothing to change since the HST model was not explicitly reloaded"); invalidateHstModel(); String response2 = invokeFilter(); assertEquals(value, response2, "Expected param value to be updated since HST model was loaded"); } @Test @DisplayName("Test running HST query in news endpoint") public void testNewsEndpoint() throws Exception { getHstRequest().setRequestURI("/site/api/news"); String response = invokeFilter(); ListItemPagination<NewsItemRep> pageable = new ObjectMapper().readValue(response, new TypeReference<ListItemPagination<NewsItemRep>>() { }); assertEquals(3, pageable.getItems().size(), "Pageable didn't have enough results"); } private void setParamsOnMount(String[] paramNames, String[] paramValues) throws Exception { Repository repository = getComponentManager().getComponent(Repository.class); Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray())); String rootMountPath = "/hst:myproject/hst:hosts/dev-localhost/localhost/hst:root"; Node rootMount = session.getNode(rootMountPath); rootMount.setProperty("hst:parameternames", paramNames); rootMount.setProperty("hst:parametervalues", paramValues); session.save(); session.logout(); } }
package org.example; import java.io.IOException; import java.util.Collections; import java.util.List; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import com.bloomreach.ps.brut.resources.AbstractPageModelTest; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; /** * A user (client) of the testing library providing his/her own config/content */ @TestInstance(TestInstance.Lifecycle.PER_CLASS) public class PageModelTest extends AbstractPageModelTest { @BeforeAll public void init() { super.init(); } @AfterAll public void destroy() { super.destroy(); } @Override protected String getAnnotatedHstBeansClasses() { return "classpath*:org/example/beans/*.class,"; } @Override protected List<String> contributeSpringConfigurationLocations() { return Collections.singletonList("/org/example/custom-pagemodel.xml"); } @Override protected List<String> contributeAddonModulePaths() { return null; } @Override protected String contributeHstConfigurationRootPath() { return "/hst:myproject"; } @Test @DisplayName("Component rendering url response") public void test() throws IOException { getHstRequest().setRequestURI("/site/resourceapi/news"); getHstRequest().setQueryString("_hn:type=component-rendering&_hn:ref=r5_r1_r1"); String response = invokeFilter(); ObjectMapper mapper = new ObjectMapper(); JsonNode jsonNode = mapper.readValue(response, JsonNode.class); assertTrue(jsonNode.get("page").size() > 0); assertEquals(jsonNode.get("page").get("models").get("pageable").get("pageSize").intValue(), 10); } }