### Question:
AssetFolderCreator extends ProcessDefinition implements Serializable { public void parseAssetFolderDefinitions(ActionManager manager) throws Exception { manager.withResolver(rr -> { final XSSFWorkbook workbook = new XSSFWorkbook(excelFile); excelFile.close(); final XSSFSheet sheet = workbook.getSheetAt(0); final Iterator<Row> rows = sheet.rowIterator(); while(rows.hasNext()) { parseAssetFolderRow(rows.next()); } log.info("Finished Parsing and collected [ {} ] asset folders for creation.", assetFolderDefinitions.size()); }); } AssetFolderCreator(Map<String, ResourceDefinitionBuilder> resourceDefinitionBuilders); @Override void init(); @Override void buildProcess(ProcessInstance instance, ResourceResolver rr); void parseAssetFolderDefinitions(ActionManager manager); void createAssetFolders(ActionManager manager); @Override void storeReport(ProcessInstance instance, ResourceResolver rr); static final String NAME; @FormField(
            name = "Excel File",
            description = "Provide the .xlsx file that defines the Asset Folder taxonomy",
            component = FileUploadComponent.class,
            options = {"mimeTypes=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "required"}
    )
    transient InputStream excelFile; @FormField(
            name = "Folder Type",
            description = "",
            component = SelectComponent.EnumerationSelector.class,
            options = {"default=UNORDERED_FOLDER", "required"}
    )
    public FolderType assetFolderType; @FormField(
            name = "Primary Creator",
            description = "This will be used first and the Fallback will only be used if this fails to generate a valid Asset Folder definition.",
            component = SelectComponent.EnumerationSelector.class,
            options = {"default=TITLE_AND_NODE_NAME", "required"}
    )
    public AssetFolderBuilder primary; @FormField(
            name = "Fallback Creator",
            description = "This is only invoked when the Primary cannot generate a valid Asset Folder definition. If this can also not generate a valid Asset Folder definition then the row will be skipped.",
            component = SelectComponent.EnumerationSelector.class,
            options = {"default=LOWERCASE_WITH_DASHES", "required"}
    )
    public AssetFolderBuilder fallback; }### Answer:
@Test public void parseAssetFolderDefinitions() throws Exception { assetFolderCreator.parseAssetFolderDefinitions(actionManager); final int expected = 9 + 2 + 2 + 3; assertEquals(expected, assetFolderCreator.assetFolderDefinitions.size()); }