Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MARP-1629 Change README split regex #256

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,16 @@
import static com.axonivy.market.constants.ProductJsonConstants.DEFAULT_PRODUCT_TYPE;

public class ProductContentUtils {
public static final String DEMO_SETUP_TITLE = "(?i)## Demo|## Setup";
/*
* Accept any combination of #, can be ## or ###, and whitespaces before Demo/Setup word
* Match exactly Demo or Setup
*/
public static final String DEMO_SETUP_TITLE = "(?m)^[#\\s]*##?\\s*(Demo|Setup)\\s*$";
private static final String HASH = "#";
public static final String DESCRIPTION = "description";
public static final String DEMO = "demo";
public static final String SETUP = "setup";
public static final String README_IMAGE_FORMAT = "\\(([^)]*?/)?%s\\)";
public static final String README_IMAGE_FORMAT = "\\(([^)]*?/)?%s(\\s+\"[^\"]+\")?\\)";
public static final String IMAGE_DOWNLOAD_URL_FORMAT = "(%s)";

private ProductContentUtils() {
Expand Down Expand Up @@ -141,6 +145,11 @@ public static void updateProductModuleTabContents(ProductModuleContent productMo
productModuleContent.setSetup(replaceEmptyContentsWithEnContent(moduleContents.get(SETUP)));
}

/**
* Cover some inconsistent cases:
* Products contain image names in round brackets (employee-onboarding, demo-projects, etc.)
* Image with name contains in other images' (mattermost)
*/
public static String replaceImageDirWithImageCustomId(Map<String, String> imageUrls, String readmeContents) {
for (Map.Entry<String, String> entry : imageUrls.entrySet()) {
String imagePattern = String.format(README_IMAGE_FORMAT, Pattern.quote(entry.getKey()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public class BaseSetup {
protected static final String MOCK_PRODUCT_REPOSITORY_NAME = "axonivy-market/bpmn-statistic";
protected static final String MOCK_IMAGE_ID_FORMAT_1 = "imageId-66e2b14868f2f95b2f95549a";
protected static final String MOCK_IMAGE_ID_FORMAT_2 = "imageId-66e2b14868f2f95b2f95550a";
protected static final String MOCK_IMAGE_ID_FORMAT_3 = "imageId-66e2b14868f2f95b2f95551a";
protected static final String MOCK_PRODUCT_JSON_FILE_PATH = "src/test/resources/product.json";
protected static final String MOCK_PRODUCT_JSON_FILE_PATH_NO_URL = "src/test/resources/productMissingURL.json";
protected static final String MOCK_PRODUCT_JSON_WITH_DROPINS_FILE_PATH = "src/test/resources/product-dropins.json";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,11 @@ void testReplaceImageDirWithImageCustomId() {
Map<String, String> imageUrls = new HashMap<>();
imageUrls.put("slash-command.png", MOCK_IMAGE_ID_FORMAT_1);
imageUrls.put("create-slash-command.png", MOCK_IMAGE_ID_FORMAT_2);
imageUrls.put("screen2.png", MOCK_IMAGE_ID_FORMAT_3);

String expectedResult = readmeContents.replace("images/slash-command.png",
MOCK_IMAGE_ID_FORMAT_1).replace("images/create-slash-command.png",
MOCK_IMAGE_ID_FORMAT_2);
MOCK_IMAGE_ID_FORMAT_2).replace("screen2.png \"Restful Person Manager\"", MOCK_IMAGE_ID_FORMAT_3);
String updatedContents = ProductContentUtils.replaceImageDirWithImageCustomId(imageUrls, readmeContents);

assertEquals(expectedResult, updatedContents);
Expand Down Expand Up @@ -114,6 +115,40 @@ void testGetExtractedPartsOfEmptyReadme() {
assertTrue(StringUtils.isBlank(readmeContentsModel.getSetup()));
}

@Test
void testGetExtractedPartsOfReadmeAtCorrectHeadings() {
String readmeContents = getMockReadmeContent();
ReadmeContentsModel readmeContentsModel = ProductContentUtils.getExtractedPartsOfReadme(readmeContents);
assertTrue(readmeContentsModel.getDescription().startsWith("Axon Ivy’s mattermost connector"));
assertTrue(readmeContentsModel.getDemo().startsWith("### Demo sample"));
assertTrue(readmeContentsModel.getSetup().startsWith("### Setup guideline"));
}

@Test
void testGetExtractedPartsOfReadmeWithInconsistentFormats() {
String readmeContentsWithHeading3 = """
#Product-name
Test README
### Setup
Setup content (./image.png)""";
ReadmeContentsModel readmeContentsModel = ProductContentUtils.getExtractedPartsOfReadme(readmeContentsWithHeading3);
assertTrue(readmeContentsModel.getDescription().startsWith("Test README"));
assertTrue(readmeContentsModel.getSetup().startsWith("Setup content (./image.png)"));

String readmeContentsWithSpaceHeading = """
#Product-name
Test README
##Demo
### Demo project
Demo content
## Setup
Setup content (./image.png)""";
ReadmeContentsModel readmeContentsModel1 =
ProductContentUtils.getExtractedPartsOfReadme(readmeContentsWithSpaceHeading);
assertTrue(readmeContentsModel1.getDemo().startsWith("### Demo project"));
assertTrue(readmeContentsModel1.getSetup().startsWith("Setup content (./image.png)"));
}

@Test
void testHasImageDirectives() {
String readmeContents = getMockReadmeContent();
Expand Down
3 changes: 3 additions & 0 deletions marketplace-service/src/test/resources/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@ This connector:
- allow you to start the Axon Ivy process by hitting the slash command key from the mattermost's channel.
- allow you to send a message to the mattermost's channel from the Axon Ivy workplace.
- notifies users on the channel for new Axon Ivy workflow Tasks.
![Restful Person Manager](screen2.png "Restful Person Manager")

## Demo

### Demo sample
1. Hit the slash command key on the channel's chat.
The Axon Ivy process will be triggered and create a new task.
The task's information will be sent to the channel by a message.
Expand All @@ -20,6 +22,7 @@ This connector:

## Setup

### Setup guideline
Mattermost Instance

1. Ref to [Deploy Mattermost](https://docs.mattermost.com/guides/deployment.html).
Expand Down
Loading