@BrxmPageModelTest // Zero-config for standard project layouts
class PageModelTest {
@Test
void testPageModelApi(DynamicPageModelTest brxm) throws Exception {
PageModelResponse pageModel = brxm.request()
.get("/site/resourceapi/news")
.executeAsPageModel();
assertNotNull(pageModel.getRootComponent());
assertTrue(pageModel.getComponentCount() > 0);
}
}
| Method | Returns | Description |
|---|---|---|
getRootComponent() |
PageComponent | Root of component tree |
findComponentByName(name) |
Optional<PageComponent> | Find component anywhere in tree |
getChildComponents(parent) |
List<PageComponent> | Direct children of component |
getComponentCount() |
int | Total components in tree |
getLinks() |
Map | Self/canonical links |
@Test
void testComponentStructure(DynamicPageModelTest brxm) throws Exception {
PageModelResponse pageModel = brxm.request()
.get("/site/resourceapi/")
.executeAsPageModel();
// Navigate component tree
PageComponent root = pageModel.getRootComponent();
List<PageComponent> children = pageModel.getChildComponents(root);
List<String> containerNames = children.stream()
.map(PageComponent::getName)
.toList();
assertThat(containerNames).contains("main");
// Navigate deeper
PageComponent main = pageModel.findComponentByName("main").orElseThrow();
List<PageComponent> mainChildren = pageModel.getChildComponents(main);
assertThat(mainChildren).isNotEmpty();
}
private static final ObjectMapper MAPPER = new ObjectMapper();
@Test
void testModelContent(DynamicPageModelTest brxm) throws Exception {
PageModelResponse pageModel = brxm.request()
.get("/site/resourceapi/")
.executeAsPageModel();
// Find component
PageComponent heroBanner = pageModel.findComponentByName("HeroBanner").orElseThrow();
// Get model data
Map<String, Object> model = heroBanner.getModel("heroBanner");
// Map to POJO
HeroBannerContent content = MAPPER.convertValue(model, HeroBannerContent.class);
assertThat(content.getTitle()).isNotBlank();
assertThat(content.getCallToAction()).isNotNull();
}
public class HeroBannerContent {
private String title;
private String description;
private CallToAction callToAction;
// Getters and setters...
public static class CallToAction {
private String title;
private String externalLink;
// Getters and setters...
}
}
@BrxmPageModelTest(loadProjectContent = true)
class SecurePageModelTest {
@Test
void premiumUser_seesExclusiveContent(DynamicPageModelTest brxm) throws Exception {
PageModelResponse pageModel = brxm.request()
.get("/site/resourceapi/premium")
.asUser("subscriber", "premium-tier")
.executeAsPageModel();
assertThat(pageModel.findComponentByName("ExclusiveContent")).isPresent();
}
@Test
void anonymousUser_seesPromotionalContent(DynamicPageModelTest brxm) throws Exception {
PageModelResponse pageModel = brxm.request()
.get("/site/resourceapi/")
.executeAsPageModel();
PageComponent heroBanner = pageModel.findComponentByName("HeroBanner").orElseThrow();
Map<String, Object> model = heroBanner.getModel("heroBanner");
assertThat(model.get("ctaTitle")).isEqualTo("Get Started Free");
}
}
| Parameter | Type | Default | Description |
|---|---|---|---|
beanPackages |
String[] | auto-detected | HST content bean packages |
hstRoot |
String | auto-detected | HST configuration root |
springConfig |
String | auto-detected | Spring XML config for PageModel pipeline |
loadProjectContent |
boolean | false | Load real HCM modules |
| Method | Description |
|---|---|
getName() |
Component name (matches HST config) |
getId() |
Unique component ID |
getComponentClass() |
Java class name |
getModel(key) |
Get model data by attribute name |
getLabels() |
CMS labels for component |
@Test
void testPageStructure(DynamicPageModelTest brxm) throws Exception {
PageModelResponse pageModel = brxm.request()
.get("/site/resourceapi/dashboard")
.executeAsPageModel();
// Check expected components exist
assertThat(pageModel.findComponentByName("Header")).isPresent();
assertThat(pageModel.findComponentByName("Footer")).isPresent();
assertThat(pageModel.findComponentByName("MainContent")).isPresent();
}
@Test
void testPageLinks(DynamicPageModelTest brxm) throws Exception {
PageModelResponse pageModel = brxm.request()
.get("/site/resourceapi/")
.executeAsPageModel();
assertThat(pageModel.getLinks()).containsKey("self");
}